具有以下域模型: World ->专营权办公室-> ->代理
我知道存储库应该返回聚集根,这些域实体中的哪个是聚集根?或者全部(每个都需要一个存储库)?
我希望能够通过通过url传递的id来获取实体。我应该把这些GetById方法放在哪里?
如果我想要获得具有部分名字"Jo“的特许经营中的所有代理的列表,我如何将其构建到系统中?我应该:在特许经营实体中有一个基本上是.SelectMany linq语句的方法吗?或者有一个具有GetByPartialFirstName()方法的代理存储库?
发布于 2012-01-10 13:15:48
依赖于域逻辑,如果实体是由它自己消费的,那么它是一个聚合根,如果你想获得"Agent“的实例并直接从你的消费者代码调用方法,那么它应该有它自己的存储库,否则,如果它是作为"Office”的一部分消费的,并且它的方法是从它的根"Office“调用的,那么它就不是聚合根,你不需要独立地从存储库获取它。
将此规则应用于所有实体,以决定为哪些实体创建存储库。
发布于 2012-01-10 07:44:11
我没有存储库方面的经验,但我建议,如果您计划使用多种方法来搜索代理,我建议您创建一个criteria接口/类。这将允许您使用单个方法调用(名字/姓氏、名字/城市等)进行多种类型的组合搜索。
(我喜欢使用接口来保持应用程序和数据源的解耦)
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
}https://stackoverflow.com/questions/8796731
复制相似问题