相关疑难解决方法(0)

在DDD中放置全局规则验证的位置

我是DDD的新手,我正试图在现实生活中应用它.没有关于这种验证逻辑的问题,如空检查,空字符串检查等 - 直接进入实体构造函数/属性.但是在哪里验证一些全局规则,如"唯一用户名"?

所以,我们有实体用户

public class User : IAggregateRoot
{
   private string _name;

   public string Name
   {
      get { return _name; }
      set { _name = value; }
   }

   // other data and behavior
}
Run Code Online (Sandbox Code Playgroud)

和用户存储库

public interface IUserRepository : IRepository<User>
{
   User FindByName(string name);
}
Run Code Online (Sandbox Code Playgroud)

选项包括:

  1. 将存储库注入实体
  2. 将存储库注入工厂
  3. 在域服务上创建操作
  4. ???

每个选项更详细:

1.将存储库注入实体

我可以在实体构造函数/属性中查询存储库.但我认为在实体中保持对存储库的引用是一种难闻的气味.

public User(IUserRepository repository)
{
    _repository = repository;
}

public string Name
{
    get { return _name; }
    set 
    {
       if (_repository.FindByName(value) != null)
          throw new UserAlreadyExistsException(); …
Run Code Online (Sandbox Code Playgroud)

c# java domain-driven-design

62
推荐指数
3
解决办法
2万
查看次数

DDD和实现持久性

我第一次尝试使用DDD(在.Net中),因为我正在重新设计遗留企业应用程序的一些核心组件.

我想要澄清的是,我们如何在适当的DDD架构中实现持久性?

我意识到域名本身是持久性无知的,应该使用"普遍存在的语言"进行设计,当然不会强制进入本月DAC甚至物理数据库的约束.

我是否认为存储库接口存在于域程序集中,但存储库实现是否存在于持久层中?持久层包含对Domain层的引用,反之亦然?

我的实际存储库方法(CRUD)从哪里调用?

domain-driven-design repository

19
推荐指数
2
解决办法
5989
查看次数

我应该总是使用服务,还是可以直接使用存储库?

当我尝试关注DDD时,我是否应该经常使用这些服务?

或者我可以直接使用存储库来获取域对象吗?

domain-driven-design

9
推荐指数
1
解决办法
1895
查看次数

标签 统计

domain-driven-design ×3

c# ×1

java ×1

repository ×1