当前位置: 首页 > 编程语言 > C#

ASP.NETMVC:有多少存储库?

时间:2023-04-10 11:20:23 C#

ASP.NETMVC:有多少存储库?我正在使用ASP.NETMVC设计一个网站,可能对存储库的确切性质有点困惑。按照NerdDinner示例,我的网站应该有一个存储库,根据需要为实体提供服务。但是,我还听说您应该为特定的相关实体集设置不同的存储库……就我的网站而言,会有很多实体(大约15个表),但大多数都是相关的。拥有一个包含拉取/更新/删除等所需方法的存储库是否可取/可取,还是我应该拆分它们?我为每个数据对象创建一个存储库。例如,一个简单的图书馆数据库可以包含以下存储库:我使用的通用存储库对许多实体来说都很丰富。对于更复杂的,我只是根据需要扩展它。两全其美的。在领域驱动设计中,有一个规则,即存储库是每个聚合根。你可以在这里读更多关于它的内容。我读得越多,我就越认为NerdDinner经常被视为一组良好实践,但实际上并非如此(参见此处的讨论,尤其是NerdDinner存储库)。这就是为什么人们经常指责其他MS示例,如Oxite(这里:开发人员会蜂拥而至,称赞它,并盲目地接受它作为福音,因为它来自Microsoft(并且已经很好)。可悲的是,任何采用其精神的开发人员都会留下难以管理、无法辨认和无法理解的混乱)。如果您使用的是接受类型的通用存储库,那么我看不出有任何理由使用多种类型。我们使用这样的接口:publicinterfaceIRepository{voidSave(ENTITYentity)whereENTITY:Entity;voidDelete(ENTITYentity)whereENTITY:Entity;ENTITYLoad(intid)whereENTITY:Entity;IQueryableQuery()whereENTITY:Entity;IListGetAll()whereENTITY:Entity;IQueryable查询(IDomainQuerywhereQuery)其中实体:实体;ENTITYGet(intid)whereENTITY:Entity;IListGetObjectsForIds(stringids)whereENTITY:Entity;无效冲洗();然后在这样的代码中使用:varreturnedObjects=repository.GetAll();varsingleObject=repository.Get(id);我认为什么是存储库的措辞可能会让您感到困惑。对我来说,存储库是存储数据的数据存储(即MSSQL数据库)。按照存储库模式,我建议每个数据存储有一个存储库。我的大部分项目都使用MSSQL,所以我为这个数据库创建了一个存储库(我喜欢使用Subsonic作为我的DAL/ORM,它还实现了Repositry模式和ActiveRecord模式)然后为每个表创建工厂。这让我包装了SubsonicActiveREcord类并为我提供了抽象。希望能有所帮助,也许...您不应该为每个表创建存储库。正如queen3所说,您应该为每个聚合根创建存储库。就像,如果产品可以有一个类别,类别存储库应该是一个嵌套的产品类。遵循域逻辑而不是域对象。Queen3说的对,可以按照聚合根理论。无论实体如何,我基本上都对我的存储库进行分组,但它们在我正在构建的应用程序中是如何逻辑分组的。例如:CustomersRepositoryOrdersRepository...在CustomerRepository中,我将拥有GetCustomers、GetCustomer、AddCustomer、DeleteCustomer、AddCustomerContact、DeleteCustomerContact的方法。在OrdersRepository中,我会放置GetOrders、GetOrder、AddOrder、CancelOrder、CloneOrder、AddOrderDetail、DeleteOrderDetail等方法。我倾向于为每个相关的权利组使用一个存储库。即orderrepository可能有:Order和OrderDetail。还有另一个,如Customers、CustomerProfiles等。这使存储库类保持整洁。大卫C#学习教程就是这样:ASP.NETMVC:有多少存储库?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: