domain-driven-design – 聚合根,它们应该负责删除子对象吗?

关于聚合根,我有一个问题,他们是否应该负责删除子对象,还是应该归到存储库?如果我想通过其Id查询一个文件,我应该在我的存储库中为此创建一个特定方法,该怎么办?

我的聚合根的代码片段:

public class Folder {

   #region Properties

   public Guid Id { get;set; }
   public Name { get;set; }
   public virtual ICollection<File> Files { get;set; }

   #endregion

   #region Methods

   public File AddFile(string type,string title,bool share = false)
   {
     ///
   }

   #endregion
}

文件类:

public class File
{
    #region Properties

    public virtual Folder Folder { get; set; }
    public string Title { get; set; }
    public string Type { get; set; }
    public bool Shared { get; set; }

    #endregion

    #region Constructor

    public File(Folder folder,string type,bool share = false)
    {
        ///
    }

    #endregion
}

谢谢

解决方法

聚合根负责域不变量(参见 http://dddcommunity.org/library/vernon_2011/).

所以答案是肯定的,聚合根应该是唯一可以访问它聚合的对象的对象.这意味着没有其他对象应该获取对File的引用,并且该File不应该公开任何更改其自身状态的方法.

所有更改子对象状态的方法都应该由聚合根本身公开,因为它必须确保聚合不变量.

至于持久删除,我通常将域事件建模为.NET事件:在返回实体之前,这些事件由存储库订阅.因此,在事件处理程序中发生持久性逻辑(有关详细信息,请参阅http://epic.tesio.it/doc/manual/observable_entities.html)

相关文章

HTML代码中要想改变字体颜色,常常需要使用CSS样式表。CSS是...
HTML代码如何让字体盖住图片呢?需要使用CSS的position属性及...
HTML代码字体设置 在HTML中,我们可以使用标签来设置网页中的...
在网页设计中,HTML代码的字体和字号选择是非常重要的一个环...
HTML(Hypertext Markup Language,超文本标记语言)是一种用...
外链是指在一个网页中添加一个指向其他网站的链接,用户可以...