ASP.NET MVC:有多少库?(ASP.NET MVC: How many repositori

2019-08-16 19:15发布

我在这个过程中设计在ASP.NET MVC网站和我也许到存储库的确切性质有点困惑。

继的NerdDinner例如,我的网站应该有一个仓库,因为我需要他们供应了实体。 但是,我还听说,你应该有一个由相关实体的特定集合处理不同repositorys ....?

在我的网站的情况下,会有一些实体(约15桌),但大部分都有关。 它是确定/最好有一个包含我需要拉/更新/删除等,或者我应该分割下来的所有方法的一个信息库?

Answer 1:

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

例如,一个简单的库数据库可能包括以下库:

  • AuthorRepository
  • BookRepository
  • PublisherRepository


Answer 2:

我使用一个通用的宝库,它是足够的许多实体。

对于更复杂的一个,我只是用所需的内容扩展此。 两全其美真的。



Answer 3:

在领域驱动设计,有一个规则库是每个聚合根。 你可以阅读更多关于它在这里 。

我读的越多,我越觉得的NerdDinner经常被人视为良好做法的集合,而这是绝对没有(看到这里的,特别是,仓库的NerdDinner讨论)。 这就是为什么人们常常指责对方MS的例子像Oxite (和在这里 :

开发商将聚集到它,赞美它,一味地因为它来自微软接受它作为福音(它已经大步向)。 可悲的是,它采用的精神,任何开发人员将留下一个unmaintainble,不可测和混乱不可读

)。



Answer 4:

如果您使用的接受类型的通用信息库,然后我看不出有任何理由使用超过一个。

,我们使用这样的界面:

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();
}

那么在这样的代码中使用:

var returnedObjects =  repository.GetAll<ObjectClass>();
var singleObject =  repository.Get<ObjectClass>(id);


Answer 5:

我想也许是什么的仓库可能会混淆你的空话。 为了我的仓库是数据存储(即,MS SQL数据库),其中数据被存储到的。

继Repository模式我建议为每个数据存储在单个程序存储库。 我的大部分项目,我用MS SQL的,所以我创建该数据库(我喜欢使用一个仓库亚音速我DAL / ORM,同时也实现了Repositry模式和ActiveRecord的模式),那么我为每个表工厂。 这让我包裹起来的亚音速的ActiveRecord类和给我的抽象。

希望这就是有益的,也许...



Answer 6:

你不应该每次创建每个表库。 作为queen3说,你应为每个聚合根库。 就像,如果产品能有一个类别,类别库应该是一个嵌套类产品。 按照比域对象的域的逻辑关系。



Answer 7:

Queen3是正确的,你可以遵循聚合根理论。 我基本上组我的仓库不是在实体思维,但他们怎么组逻辑上我正在创建的应用程序。

例如:

CustomersRepository
OrdersRepository
...

在CustomerRepository我会把对GetCustomers的,GETCUSTOMER,AddCustomer,DeleteCustomer,AddCustomerContact,DeleteCustomerContact方法。

在OrdersRepository我会把对GetOrders,GetOrder,AddOrder,CancelOrder,CloneOrder,AddOrderDetail,DeleteOrderDetail等方法。



Answer 8:

我倾向于使用每个组相关entitites的存储库。 即orderrepository可能有:

为了和的OrderDetail。

并且还会有一个,比如说,客户,CustomerProfile等。

这使库类整洁。

戴维



文章来源: ASP.NET MVC: How many repositories?