Должен ли ValueObject объединяться статическим методом внутри класса или классом утилит?Использование C # и DDD - PullRequest
0 голосов
/ 25 мая 2018

Недавно я увидел код, подобный следующему, для слияния двух объектов ValueObject с новым объектом ValueObject:

public class SomeValueObject
{
    public readonly string A;
    public readonly string B;

    public SomeValueObject(string a, string b)
    {
        A = a;
        B = b;
    }

    public static SomeValueObject Merge(SomeValueObject preferred, SomeValueObject fallback)
    {
        return new SomeValueObject(
            preferred.A ?? fallback.A,
            preferred.B ?? fallback.B);
    }
}

Затем был вызван код внутри уровня приложения.

Мои вопросы:

  1. Является ли это хорошей практикой для объединения объектов ValueObject, как в примере, или поэтому следует использовать класс Util?

  2. Когда я думаю, что тогдаМогут быть и другие статические методы, например, для создания некоторого ValueObject из свойств двух или более других ValueObject, я бы предпочел создать класс Util для этой функциональности.Или это хорошая практика делать это в статическом методе возвращаемого ValueObject?

    public class SomeValueObject
    {
        public readonly string A;
        public readonly string B;
    
        public SomeValueObject(string a, string b)
        {
            A = a;
            B = b;
        }
    
        public static SomeValueObject Merge(SomeValueObject preferred, SomeValueObject fallback)
        {
            return new SomeValueObject(
                preferred.A ?? fallback.A,
                preferred.B ?? fallback.B);
        }
    
        public static SomeValueObject FromOtherObjects(SomeOtherValueObject  someOtherValueObject, SomeSecondOtherValueObject someSecondOtherValueObject)
        {
            return new SomeValueObject(someOtherValueObject.Foo, someSecondOtherValueObject.bar);
        }
    }
    
  3. В соответствии с вопросом 2 у меня была бы зависимость от других классов внутри моего класса,но они на самом деле не являются частью моего класса (свойства).Когда у одного из других классов также был бы метод с SomeValueObject, тогда у меня были бы классы, которые взаимозависимы друг от друга.

Лично я предпочел бы класс Util, но я незнать, если это накладные расходы ...

1 Ответ

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

Является ли это хорошей практикой для слияния объектов ValueObject, как в примере, или, следовательно, должен использоваться класс Util?

Общий случай - функции для манипулирования значениями являются частьюопределения значения и т. д., упакованного вместе с ним, а не в каком-то отдельном служебном классе.

Ожидается, что объекты ValueObject в конце концов будут объектами - и функции, и данные вместе.

У меня была бы зависимость от других классов внутри моего класса, но они на самом деле не являются частью моего класса (свойств).Когда у одного из других классов также будет метод с SomeValueObject, тогда у меня будут классы, которые взаимно зависят друг от друга.

Круговые зависимости (а) часто указывают на то, что есть улучшениясделано в вашей модели и (б) не обязательно является критической проблемой, если эти два значения в любом случае тесно связаны.

...