You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DDD模式下父聚合根中子对象的封装与创建权限控制方案咨询

DDD模式下父聚合根中子对象的封装与创建权限控制方案咨询

我正在用DDD的方式实现两个类——一个父类和一个子类,核心需求是只能通过父类来创建新的子类实例。

我的初步思路是:把父类中添加子类的AddChild方法设为public,但想把子类的创建方法Create设为internal,以此避免绕过父类直接创建子类。

目前我的代码实现如下:

public class MyParent
{
    public long Id { get; private set; }
    string Name { get; private set; }
    // other properties

    public Child AddChild(Child paramChildWithDataToCreateChild)
    {
        Child.Create(paramChildWithDataToCreateChild);
    }
}

internal class Child
{
    internal long Id { get; private set; }
    internal string Name { get; private set; }
    // other properties

    internal Child Create(Child paramChild)
    {
        // Code to create the child
    }
}

但这里遇到了两难的问题:

  • 如果把父类的AddChild设为internal,其他程序集就无法创建子类了,不符合业务使用需求;
  • 如果把Child类设为public,其他程序集又能直接创建子类实例,违背了我想通过父类管控子类创建的初衷。

我还想到另一种可能:把Child类设为public,但把Create方法设为internal——这样其他程序集不能直接创建子类,必须通过父类的方法。不过我有点纠结:其他程序集能直接访问Child类,从DDD的封装角度来看,这是不是一个合适的设计呢?

总的来说,我希望尽可能地封装父聚合根,有没有更合理的实现方案?谢谢!

备注:内容来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:18:15