存储库,工厂和分层结构化数据

 手机用户2702935421_666 发布于 2023-02-12 14:27

我正在通过Eric Evans的领域驱动设计,他概述了存储库和工厂之间的相互作用.存储库本身将调用DB接口来获取结果集.然后将该结果集传递给工厂,该工厂将理解该结果集以重构该对象.

如果数据本质上是分层的,就像某种树结构那样.例如:

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Foo Parent { get; set; }
    public ICollection { get; set; }

    // Other business like methods here

}

使用DDD我会有我的接口和实现:

public interface IFooRepository
{
    Foo Get(int id);
}

public interface IFooFactory
{
    Foo Create(TSource source);
}

public class SqlFooRepository: IFooRepository
{
    private readonly IFooDao dao;
    private readonly IFooFactory factory;

    public SqlFooRepository(IFooDao dao, IFooFactory factory)
    {
        this.dao = dao;
        this.factory = factory;
    }

    public Foo Get(int id)
    {
        var resultSet = dao.Find(id);
        return factory.Create(resultSet);
    }
}

public class SqlFooFactory: IFooFactory
{
    public Foo Get(SqlDataReader reader)
    {
        var foo = new Foo();
        foo.Id = (int) reader["id];
        foo.Name = (string) reader["name"];
            // Do I build the children accounts here
        return foo;
    }
}

如果我试图在工厂建立孩子,那么我需要再次访问回购.如果我在Repo中这样做,我觉得我正在做的工作应该是工厂.不知道如何解决这个问题.

我有一个想法是,Foo不是聚合根,而是FooTree是聚合根.因此,我需要创建整个树,这意味着我可以将Foo对象的集合传递给FooTreeFactory.

任何帮助将非常感激.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有