Должна ли быть реализована реализация объекта значения? - PullRequest
0 голосов
/ 08 мая 2018

Следуя методам DDD, должна ли быть реализована реализация объекта значения? Представьте себе что-то абстрактное ValueObject<T> и конкретную реализацию, заданную как Money : ValueObject<Money>. Должен ли я запечатать Money?

public class Money : ValueObject<Money>
{
    private Money()
    {
    }

    private Money(decimal value, string currency)
    {
        Requires.NotEmpty(currency, nameof(currency));
        Requires.That(value >= 0, $"{nameof(value)} must be greater or equals to 0.");

        Value = value;
        Currency = currency.ToUpper();
    }

    public decimal Value { get; private set; }

    /// <summary>
    /// <a href="http://currencysystem.com/codes/">ISO 4217</a> currency code 
    /// </summary>
    public string Currency { get; private set; }

    public static Money Dkk(decimal value) => new Money(value, "DKK");
    public static Money Usd(decimal value) => new Money(value, "USD");
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Для меня Value Object по сравнению с другими типами объектов не имеет большого значения при рассмотрении вопроса о герметизации.За эти годы было выдвинуто множество аргументов как за, так и против, с достаточно сложными соображениями, что вы не хотите добавлять в уравнение еще одну переменную.

Я едва вижу, чтобы все VO в доменной модели были запечатаны, но все остальные классы не запечатаны.Если вы собираетесь запечатать, это будет в первую очередь по целому ряду причин (организационные, производительность), которые не имеют ничего общего с типом объекта в номенклатуре DDD.

0 голосов
/ 08 мая 2018

Как правило, рекомендуется избегать полиморфизма из-за композиции по сравнению с рекомендациями по наследованию. В контексте DDD в некоторых случаях полезно разрешить будущий полиморфизм, но обычно это включает сущности.

Объект-значение в определении должен быть неизменным, и во избежание его неправильного использования закройте его.

Полезная ссылка: http://thepaulrayner.com/value-objects-and-immutability/

...