我正在尽力学习DDD,但是我不确定一些真正的基本概念;域对象和服务位于何处,整体布局如何组织?我有一个习惯,无论好坏,我都不知道。创建一个“程序”类,其中包含域集合,域对象和服务对象。像下面的例子。
这是好方法还是坏方法?如果不好的话,还有什么选择?到目前为止,我只是在处理winforms项目,所以这是我目前主要关心的问题。
还可以在这里对我对“静态”对象的使用情况进行一些评估吗?我经常不确定是否要使用静态对象,如果我知道它是一个单例对象(如果这是正确的术语),则倾向于将其抛出。
EDIT:为了进一步说明,我使用“ 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)我正在使用存储库(和FluentNHibernate),我打算让服务依赖它们。目前,我有xxxManager类,我知道这很不好,可以将其更改为xxxServices。
5)我知道DI非常受欢迎,这很高兴您提出这一点,所以我知道这是解决我的问题的关键方法。我将学习。据我了解,您建议我将服务直接注入到表单类中吗?但是域对象呢?他们住在哪里”?他们都应该住在某种服务中吗?如果是这样,您创建了哪种类型的服务来处理程序启动逻辑?我了解用于持久存储数据,使用存储库等的服务的基本概念,但是可能还有其他类型的我不知道的常见服务类与我的问题有关?
PS:我不应该(错误)将我的类命名为“ Program”,因为这已经是C#项目中的一个类。我同时使用C#和VB,因此实际上在C#中,我通常将其称为MainClass。因此,我对此进行了编辑。
您正在描述的是如何组织dependencies(在这种情况下,您的表单项目取决于服务)。
关于以上代码的几点:
interface
(IUserService
和IUserAccountService
)-这使您可以模拟单元测试的依赖关系,交换实现并更好地分离应用程序。UserAccount
和UserData
)也应该位于其他程序集中。Program.UserService
...等的表格。>一旦完成,您就可以使用依赖注入(DI)
对于域驱动的设计,通常有三个项目的解决方案;应用程序,域和基础结构。