我正在尽力学习DDD,但我不确定一些非常基本的概念;您的域对象和服务位于何处,整体布局如何组织?我有一个习惯,无论好坏,我不知道,这就是我要问的原因;创建一个“程序”类,它包含域集合,域对象和服务对象。比如下面的例子。
这是好的还是坏的方法?如果不好,还有什么替代方案?我到目前为止只是在与winforms项目合作,所以这是我此时的主要关注点。
另外,如果您可以在此处对我使用“静态”对象进行一些评估吗?我经常不确定是否使用静态,并且如果我知道它是单个对象(如果这是正确的术语),则倾向于将其抛弃。
修改 的 为了解释一下,我正在使用“Program”类的New方法来协调不同的域对象,并在程序启动时从数据库等运行初始加载。所以,如果你建议我摆脱这个课程,那么我应该介绍一些其他服务来代替程序启动吗?
示例:
class Form1
{
private MainClass main;
}
class MainClass
{
public static UserService UserServ;
public static UserAccountService UserAccServ;
public static List<UserAccount> UserAccounts;
}
class UserService
{
}
class UserAccountService
{
}
class UserAccount
{
public UserData User;
}
class UserData
{
}
修改 回应大卫:
谢谢!为了解决你的观点:
1)我的例子只是一个粗略的类型,我为每个类使用单独的文件,而我的项目实际上已经有10,000行代码,尽管它可能听起来不像。
2)理解接口的提示。
3)了解汇编。
4)我正在使用Repositories(和FluentNHibernate),我打算让服务依赖于它们。目前我有xxxManager类,我知道这是坏的,并且会将它们更改为xxxServices。
5)我知道DI非常受欢迎,你说这一点很好,所以我知道这是我的问题的关键决心。我会学习的。据我所知,您建议我将服务直接注入表单类?但是域对象怎么样?他们住在哪里”?他们都应该住在某种类型的服务中吗?如果是这种情况,您创建什么类型的服务来处理程序启动逻辑?我理解使用存储库等持久化数据的服务的基本概念,但是我可能还没有其他类型的常见服务类与我的问题相关吗?
PS:我不应该(错误地)将我的课命名为“程序”,因为这已经是C#项目中的一个类。我同时使用C#和VB,所以实际上在C#中我通常称它为MainClass。所以我编辑了这个。
答案 0 :(得分:1)
您所描述的是如何整理 依赖关系 (在这种情况下,您的表单项目取决于服务)。
关于上述代码的几点:
interface
(IUserService
和IUserAccountService
) - 这使您可以模拟单元测试的依赖关系,交换实现并且更好地解耦你的申请。UserAccount
和UserData
)也应如此。Program.UserService
等表格。一旦完成,那么您就可以使用依赖注入(DI)来为您的应用程序提供服务(而不是您的应用程序负责自己创建它们) )。 Ninject是一个不错的选择。这是an example of how to implement it,但您可能会在Ninject wiki上获得更多好运。
答案 1 :(得分:0)
对于领域驱动的设计,通常有一个包含三个项目的解决方案。应用程序,域和基础结构。
“应用程序”层包含Windows Forms应用程序以及与用户界面相关的内容,其中包含Program.cs
文件。
“域”层包含根聚合,附加到根聚合的相关域实体以及域事件。还包含用于存储库的接口。
Infrastructure层包含NHibernate和您的存储库。