nhibernate - 处理 NHibernate 父子集合的最佳实践

标签 nhibernate domain-driven-design

因此,在一个典型的模型中,您的父级可以有多个子级,而子级只能有一个父级,您如何管理子级的添加。我一直在使用这种方法;

public class Parent
{
    public Parent()
    {
        Children = new List<Child>();
    }

    public IList<Child> Children
    {
        get;
        private set;
    }
}

public class Child
{
    public Parent Parent
    {
        get;
        set;
    }
}

var child = new Child();
var parent = new Parent();
parent.Children.Add(child);
child.Parent = parent;

问题是,无论在哪里我想添加一个新的 child ,我都必须记住添加对 child 和 parent 的引用,这有点痛苦。我可以向父类添加一个 AddChild 方法,并使其负责添加子级 - 现在的问题是有 2 种方法可以添加子级,即通过 Children 属性和方法。那么这是一个更好的解决方案吗?

public class Parent
{
    public Parent()
    {
        children = new List<Child>();
    }

    private IList<Child> children
    {
        get;
        private set;
    }

    public IEnumerable<Child> Children
    {
        get
        {
            return children;
        }
    }

    public void AddChild(Child child)
    {
        children.Add(child);
        child.Parent = this;
    }
}

是否有关于这方面最佳实践的指南?您会做什么?

最佳答案

这根本不是 NHibernate 问题。

您应该实现 AddChild 方法。这些类负责其一致性,因此它们不应该公开任何不应该可用的内容。例如,(可变的)子列表应该被隐藏。公开 IEnumerable 是个好主意。

您的第二个代码是一个很好的起点。您可能需要更多方法,例如RemoveChild或CoundChildren。

关于nhibernate - 处理 NHibernate 父子集合的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944045/

相关文章:

c# - 等效于 NHibernate IStatelessSession 的 Load 方法

c# - 保存时的 NHibernate FlushMode

c# - 推荐哪种方法 : aggregateRoot. Items.Add(...) or aggregateRoot.AddItem(...)

asp.net-mvc - Spring.Net,Nhibernate,ASP.NET MVC3 CannotLoadObjectTypeException

c# - NHibernate:如何使用 CreateSQLQuery 返回标量值列表(从一列)?

SQL Server Compact Edition 中的 NHibernate futures

domain-driven-design - 为什么Sagas无法查询读取端?

design-patterns - 如何从现有的写入数据库生成 CQRS 中的读取数据?

java - 事件溯源中的乐观锁机制 "UNDO"流程

database - 如何正确实现存储库模式?