小编Maj*_*kel的帖子

DDD(领域驱动设计)我可以使用继承吗?

考虑以下示例:

  • 我们有订单,任何订单都可以有不同的类型。
  • 订单有交易,每种订单可以分配n笔交易。

例如:

OrderA 必须有一笔交易。

OrderB 必须有两笔交易。

OrderC 可以有 n 笔交易。

当我们更新订单的价值时,我们需要根据算法特定的订单类型来计算交易的价值。

我们如何为这种情况设计模型?我们可以在aggregateRoot中使用继承还是我们应该使用组合?例如 ?

 /// <summary>
///     AggregateRoot
/// </summary>
public abstract class Order
{
    protected ISet<Transaction> _transactions;

    public IEnumerable<Transaction> Transactions
    {
        get { return _transactions; }
    }

    public abstract OrderType OrderType { get; }
    public decimal? Value { get; protected set; }

    public void SetValue(decimal? value)
    {
        Value = value;
        UpdateReleatedTransaction();
    }

    protected abstract void UpdateReleatedTransaction();
}

public class OrderA : Order
{
    public OrderA()
    {
        _transactions.Add(new Transaction(this)); …
Run Code Online (Sandbox Code Playgroud)

inheritance domain-driven-design composition aggregateroot

3
推荐指数
1
解决办法
2415
查看次数