域对象和服务类对象应位于何处?

问题描述 投票:2回答:2

我正在尽力学习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。因此,我对此进行了编辑。

c# .net domain-driven-design
2个回答
1
投票

您正在描述的是如何组织dependencies(在这种情况下,您的表单项目取决于服务)。

关于以上代码的几点:

  • 看来您的所有类都在同一个文件中。通常,您应该将每个新类放在其自己的文件中。
  • 您的服务类都应该implement和一个interfaceIUserServiceIUserAccountService)-这使您可以模拟单元测试的依赖关系,交换实现并更好地分离应用程序。
  • 理想情况下,您的服务类应该在不同的程序集中(新的Visual Studio项目),而您的域实体(UserAccountUserData)也应该位于其他程序集中。
  • [您可能考虑创建一个或多个存储库来处理将数据简单地传递到应用程序服务(应用程序服务将依赖于存储库,存储库将not依赖于服务)。
  • 您将服务放在静态字段中(不是单例,这是一种使用C#中的静态字段来确保在应用程序的生命周期中仅创建一个对象的模式)。最好使用DI(请参见下文)而不是使用Program.UserService ...等的表格。>
  • 一旦完成,您就可以使用依赖注入(DI)

为您的应用程序提供服务了(而不是由应用程序负责自己创建服务)。 Ninject将是一个很好的选择。这是an example of how to implement it,但您可能会在Ninject wiki上有更多的运气。

0
投票

对于域驱动的设计,通常有三个项目的解决方案;应用程序,域和基础结构。

© www.soinside.com 2019 - 2024. All rights reserved.