在ASP.NETMVC应用程序中使用静态存储库的优缺点是什么?让所有方法始终可用不是更好吗->意味着类只被实例化一次,而不是让多个Controller引用同一个存储库类及其方法?还是我在这里弄错了什么?非常感谢所有帮助! 最佳答案 优点:存储库随处可见缺点:存储库不实现合约,这导致存储库的消费者与实现之间存在强耦合无法进行单元测试可能会遇到线程问题备注:在每个请求上实例化存储库不应被视为性能问题。 关于c#-在ASP.NETMVC应用程序中使用静态存储库的优缺点,我们在StackOver
假设我有一个名为User的实体,它有很多帖子。对于删除帖子,我的服务如下所示:voidDeletePost(intpostId,intuserId);我的验证码去哪儿了?(确保用户有删除权限)。我应该在存储库中使用1个数据库调用来执行此操作吗?或者我应该在我进行2次调用的服务层中执行此检查:通过userId获取用户。在对用户完成验证后调用delete。我将有2个存储库,1个用于用户,1个用于帖子,每个都如下所示://FromthePostRepository.voidDelete(intpostId);//MayhavetoaddauserIdparamifIdovalidationi
我试图弄清楚哪一层应该负责域驱动设计项目中的缓存(插入/删除)工作。目标是通过缓存从存储库检索到的任何实体来提高Web应用程序的性能。我的解决方案如下:MyApp.InfrastractureMyApp.RepositoriesMyApp.DomainMyApp.WebApplication我觉得既然只有Web应用程序使用缓存,那么缓存逻辑应该放在这一层吗?然而,这感觉不正确,因为我想保持Web应用程序的轻量级并专注于提供网页。缓存也不是一流的领域概念,因此不适合领域层。怎么办? 最佳答案 这是以上所有问题的关注点。缓存是其中一个横
常量是美丽的人——它们可以在一个独特的地方保存一个在代码中随处使用的值。更改该值只需要一个简单的修改。生活很酷。嗯,这是promise。现实有时是不同的:您将LogCompleteFileName常量值从L:\LOGS\MyApp.log更改为\\Traces\App208.txt并且您得到两个文件:用于跟踪的\\traces\App208.txt和用于日志的\\traces\App208.txt.log...您将TransactionTimeout从2分钟更改为4分钟,但在2分钟后您仍然会超时(在花费了一天之后,您发现您还必须更改DBMS的超时和超时交易经理...)。您将SleepT
我正在查看ASP.NETMVC应用程序的repository方法,并注意到未使用static类。既然repo是CRUD,为什么不让它成为static? 最佳答案 1)很难用静态类进行单元测试(如果你正在测试一个依赖于你的存储库的类,你希望该测试针对一个假的“模拟”存储库对象而不是你的真实对象)2)您通常希望每个请求有1个存储库实例,以便更轻松地确保来自一个用户的未提交更改不会对另一个用户造成困惑。 关于c#-为什么数据存储库不是静态的?,我们在StackOverflow上找到一个类似的问
我有一个类在其构造函数中采用IRepository,如下所示......publicclassUserService{publicIRepository_repo{get;set;}publicUserService(IRepositoryrepo=null){_repo=repo??newUserRepository();}并且有一个看起来像这样的方法......publicboolIsUserActive(emailstring){//Themethodactuallydoesmorebuttokeepitsimpleletsimagine//itdoesthisUseruser=
假设我有publicclassProduct:Entity{publicIListItems{get;set;}}假设我想找到一个最大的项目...我可以添加方法Product.GetMaxItemSmth()并使用Linq(fromiinItemsselecti.smth).Max())或使用手动循环或其他方式。现在,问题是这会将整个集合加载到内存中。正确的解决方案是进行特定的数据库查询,但域实体无权访问存储库,对吧?所以要么我做productRepository.GetMaxItemSmth(product)(这很丑,不是吗?),或者即使实体可以访问存储库,我也使用来自实体的IPro
我已经看到了存储库模式的一些实现,非常简单直观,链接来自stackoverflow中的其他答案http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-Chttp://www.remondo.net/repository-pattern-example-csharp/publicinterfaceIRepository{voidInsert(Tentity);voidDelete(Tentity);IQueryableSearchFor(Expression>predi
我目前正在开发一个中型应用程序,它将访问不同站点上的2个或更多SQL数据库......我正在考虑使用类似这样的东西:http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with-linq-to.html但是,我想使用流畅的nHibernate代替Linq-to-SQL(当然还有nHibernate.Linq)这可行吗?我将如何配置它?我的映射定义会去哪里等等...?此应用程序最终将具有许多方面-从WebUI、WCF库和Windows应用程序/服务。此外,例如在“产品”表上,我会创建一个“ProductMana
在为我的ASP.NET项目实现存储库模式时,我遇到了一些无法解决的问题。所以我有几个关于如何以正确的方式实现存储库模式的问题。根据我的经验,我认为只有在我的应用程序中没有行为的类/模型,在它们的存储库旁边并不是好的OOP。但是,这就是我实现存储库模式的方式。我只是在任何需要存储库实例的地方制作,以执行一些操作。这种方法的结果是我所有的域类都没有行为。它们只是没有方法的保存数据的对象。我的老师对我说,我用的是瘦模型,我应该努力做胖模型。作为对该反馈的回应,我在类中实现了一些业务逻辑,但遇到了一些问题:场景:我的User类有一个Friends列表,其中包含User对象,代表某个用户的fri