我在软件开发方面非常新颖。就我个人而言,我认为分层体系结构是减少面向对象方法在软件开发过程中产生的复杂性的一种好方法,更不用说保持代码的组织性。现在,我遇到了DDD(域驱动设计)引入的一些问题。当然,初学者水平。
这里是 -
假设我想构建一个应用程序来保存数据库中的“人员”相关数据,并在wpf数据网格中显示个人详细信息(DDD绝对不适用于这种规模的应用程序,而只是为了保持对于像我这样的业余爱好者来说很简单)。所以,我设计了一个域类“人”,有点像 -DDD:应该如何组织图层?
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的理解说的架构(它的最简单的版本)应该是如下(请纠正我,如果我错误) -
注:
我想将DataGrid绑定到一些的ObservableCollection,只是即时反映任何样的变化。
这是一个WPF应用程序,但不一定是在MVVM模式,我故意要这样使用后面的代码(我也不知道,如果自己后面的代码代表了应用层)
我问题是 -
什么样的代码应该属于应用层?
我的猜测是,我绝对不应该将我的域对象(Person)的ObservableColletion绑定为datagrid的itmsSource。然后我应该从域对象中提取什么类型的对象,以及如何?
为了保持表示层对象和域层对象之间的解耦,可能会出现像
“never instantiate domain objects directly in presentation layer”
这样的约定。那么什么是非直接的方法?如果Code-Behind与应用层对话,那么应用层是否应该与Repository进行通信?但是,如果需要某种类型的域访问,而不是而不是数据访问相关(可能不在此应用中,但可能会发生,对吗?)谁是应用层应该与之通信的域层中的X人?
我知道我所有的问题和问题都非常非常业余水平。但他们确实是问题和问题。所以,如果有人有时间,任何回应将不胜感激。
编辑:我不确定数据存储库是否应该有一个域模型的参考。
@Sisyphus:现在+1,清洁和详细的描述,以及你的时间来开导我。但是,更多的问题会来到你的方式:) – atiyar 2011-05-06 18:09:11
@Sisyphus:再次感谢。你的建议很整洁,应用程序服务和域服务之间的区别非常有帮助。还有一个问题。应用层是否可以直接访问存储库,或者它总是通过域层?我的意思是,几乎总是,每个请求**履行**执行某种域限制(验证可能)检查任何请求**提交**,对不对?那么应用层不应该向域层提交每个请求,只有域层可以访问存储库? – atiyar 2011-05-07 20:07:45
因为意见是有限的,我添加到我的答案。见编辑部分。 – Sisyphus 2011-05-08 10:51:27