ASP.NET MVC:有多少个存储库?

Ser*_*gio 9 .net c# asp.net-mvc repository nerddinner

我正在使用ASP.NET MVC设计一个网站,对于存储库的确切性质可能有点困惑.

在NerdDinner示例之后,我的站点应该有一个存储库,根据需要提供实体.但是,我也听说你应该有不同的存储库来处理特定的相关实体集....

在我的网站的情况下,将有许多实体(大约15个表)但大多数都是相关的.有一个存储库包含拉动/更新/删除等所需的所有方法,或者我应该将它们拆分,这是否可取/可取?

dov*_*ove 8

我使用的通用存储库对很多实体来说都很丰富.

对于更复杂的一个,我只是根据需要扩展它.两个世界中最好的.


que*_*en3 8

在域驱动设计中,存在一个规则,即存储库是每个聚合根.你可以在这里阅读更多相关信息.

我读的越多,我就越认为NerdDinner经常被视为一组良好实践,而绝对不是(请参阅此处讨论,尤其是NerdDinner存储库).这就是为什么人们经常责怪像Oxite这样的其他MS例子(在这里:

开发人员会蜂拥而至,赞美它,盲目地接受它作为福音,因为它来自微软(它已经很好了).可悲的是,任何采用其精神的开发者都会留下难以理解,无法辨认和难以理解的混乱局面

).


Ric*_*ard 5

如果您使用接受类型的通用存储库,那么我认为没有任何理由使用多个类型.

我们使用这样的界面:

public interface IRepository
{
    void Save<ENTITY>(ENTITY entity)
        where ENTITY : Entity;

    void Delete<ENTITY>(ENTITY entity)
        where ENTITY : Entity;

    ENTITY Load<ENTITY>(int id)
        where ENTITY : Entity;

    IQueryable<ENTITY> Query<ENTITY>()
        where ENTITY : Entity;

    IList<ENTITY> GetAll<ENTITY>()
        where ENTITY : Entity;

    IQueryable<ENTITY> Query<ENTITY>(IDomainQuery<ENTITY> whereQuery)
        where ENTITY : Entity;

    ENTITY Get<ENTITY>(int id) where ENTITY : Entity;

    IList<ENTITY> GetObjectsForIds<ENTITY>(string ids) where ENTITY : Entity;

    void Flush();
}
Run Code Online (Sandbox Code Playgroud)

然后在这样的代码中使用:

var returnedObjects =  repository.GetAll<ObjectClass>();
var singleObject =  repository.Get<ObjectClass>(id);
Run Code Online (Sandbox Code Playgroud)


jao*_*jao 2

我为每个数据对象创建一个存储库。

例如,一个简单的图书馆数据库可以包含以下存储库:

  • 作者库
  • 图书库
  • 发布者存储库