DDD:如何组织层?

时间:2011-05-04 10:20:01

标签: domain-driven-design repository code-organization project-organization layer

我在软件开发方面非常新。我个人认为,分层体系结构是一种很好的方法,可以减少面向对象方法中软件开发过程中出现的复杂性,更不用说保持代码的有序性。现在,我遇到了一些DDD(Domain Driven Design)引入的问题。当然,初级水平的 这是 -
让我们说,我想构建一个应用程序来保存数据库中的“人”相关数据,并在wpf数据网格中显示人员详细信息(DDD绝对不适合这种规模的应用程序,但只是为了像我这样的业余爱好者保持简单) 。所以,我设计了一个域类“Person”,比如 -

public class Person
 {
    public Person(dataType paramA, dataType paramB)
    {
        _fieldA = paramA;
        _fieldB = paramB;
    }

    private dataType _fieldA;
    public dataType PropertyA
    {
        //encapsulates _fieldA    
    }

    private dataType _fieldB;
    public dataType PropertyB
    {        
        //encapsulates _fieldB    
    }

    public dataType PropertyX
    {        
        //some code based on private fields    
    }

    public dataType PropertyY
    {        
        //some code based on private fields    
    }

    private dataType MethodPQR(dataType param)
    {        
        //some code    
    }

    public dataType MethodUVW(dataType paramOne, dataType paramTwo)
    {        
        //some code    
    }
}

现在,我对DDD的理解说,架构(最简单的版本)应该如下(如果我错了,请纠正我) -
enter image description here
注意:

  1. 我希望将datagrid绑定到某个ObservableCollection,只是为了立即反映任何类型的更改。

  2. 这是一个wpf应用程序,但不一定是MVVM模式,我故意想使用后面的代码(我不知道背后的代码是否代表应用程序层)

  3. 所以我的问题是 -

    1. 应用层应属于哪种代码?

    2. 我的猜测是,我绝对不应该将我的域对象(Person)的ObservableColletion绑定为datagrid的itmsSource。那么我应该从域对象中提取什么类型的对象,以及如何?

    3. 为了保持表示层对象和域层对象之间的解耦,可能会有像“never instantiate domain objects directly in presentation layer”之类的约定。那么非“直接”方法是什么?

    4. 如果Code-Behind与应用层进行对话,那么应用层应该与存储库进行通信吗?但是,如果需要某种类型的域访问,而数据访问相关(可能不在此应用程序中,但它可能会发生,对吧?)域应用层中的那个X人是谁应该和谁谈谈?

    5. 我知道我的所有问题和问题都属于业余水平。但它们确实是问题和问题。所以,如果有人有时间,我们将不胜感激。

      编辑:我不确定Data Repository是否应该有域模型的引用。

1 个答案:

答案 0 :(得分:38)