1

我正在组建一个新系统,我想为它提供一个丰富的域。但是,我被困在一个我想了解更多的小细节上。

假设我有一个客户类,您实际上在哪里保留客户实体或聚合根?

应该是有持久化知识的客户类吗?

var myCustomer = CustomerFactory.CreateCustomer(id);
myCustomer.Name = ...
myCustomer.LastName = ...

myCustomer.Save()

在这种情况下,我需要将我的客户存储库传递给客户类(通过工厂或某些注入)。请注意,我在 Eric Evens 的 DDD 书中找不到一个很好的例子。

另一种方法是让客户不知道持久性

var myCustomer = CustomerFactory.CreateCustomer(id);
myCustomer.Name = ...
myCustomer.LastName = ...

CustomerRepository repository = new CustomerRepository();
repository.Save(myCustomer);

另外我想我可以有一个服务类,像这样一起完成这一切:

AddCustomerService service = new AddCustomerService(CustomerRepository repository)
service.AddCustomer(myCustomer);

只是一点点说明:如果我实际上没有保存在客户类中,我发现我的客户类只不过是属性,可能需要一点验证,但仅此而已。没有真正的行为。行为被移动到客户端使用的服务类或存储库......

4

2 回答 2

2

后者更可取。也就是说,在 CustomerRepository 类中编写保存方法。在 DDD 中,实体应该不知道持久性逻辑。您的域实体不包含行为并且只包含属性是很常见的(尽管有时它们应该包含两者)。

于 2013-07-06T13:42:10.727 回答
1

我有一个 DDD 项目。这个顺序有 4 层(因为我没有使用 WCF,否则会有更多):

1. UI
1.1 MVC4.csproj
... (Repository Interfaces)
... (Repository Implementations)

2. Service Layer
2.1 Service.cs 
...DTOs

3. Business Layer
3.1 DomainObjects.csproj

4. Data Access Layer
4.1 DAL.csproj (Entity framework 5)
... (Repository Interfaces)
... (Repository Implementations
于 2013-07-06T20:06:09.887 回答