首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 3我应该如何设计我的存储库/DAL?

MVC 3我应该如何设计我的存储库/DAL?
EN

Stack Overflow用户
提问于 2012-01-10 07:37:47
回答 2查看 193关注 0票数 1

具有以下域模型: World ->专营权办公室-> ->代理

我知道存储库应该返回聚集根,这些域实体中的哪个是聚集根?或者全部(每个都需要一个存储库)?

我希望能够通过通过url传递的id来获取实体。我应该把这些GetById方法放在哪里?

如果我想要获得具有部分名字"Jo“的特许经营中的所有代理的列表,我如何将其构建到系统中?我应该:在特许经营实体中有一个基本上是.SelectMany linq语句的方法吗?或者有一个具有GetByPartialFirstName()方法的代理存储库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-10 13:15:48

依赖于域逻辑,如果实体是由它自己消费的,那么它是一个聚合根,如果你想获得"Agent“的实例并直接从你的消费者代码调用方法,那么它应该有它自己的存储库,否则,如果它是作为"Office”的一部分消费的,并且它的方法是从它的根"Office“调用的,那么它就不是聚合根,你不需要独立地从存储库获取它。

将此规则应用于所有实体,以决定为哪些实体创建存储库。

票数 2
EN

Stack Overflow用户

发布于 2012-01-10 07:44:11

我没有存储库方面的经验,但我建议,如果您计划使用多种方法来搜索代理,我建议您创建一个criteria接口/类。这将允许您使用单个方法调用(名字/姓氏、名字/城市等)进行多种类型的组合搜索。

(我喜欢使用接口来保持应用程序和数据源的解耦)

代码语言:javascript
复制
public IEnumerable/IQueryable<IAgent> Get(IAgentCriteria Criteria)
{
  if (Critiria == null) throw new ArgumentNullException();

  var result = entities.Agents;

  if (!string.IsNullEmptyOrWhiteSpace(Criteria.FirstNameStartsWith))
  {
    result = result.Where(x => x.FistName.StartsWith(Criteria.FirstNameStartsWith));
  }

  // etc etc
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8796731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档