Недавно я увидел код, подобный следующему, для слияния двух объектов 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);
}
}
Затем был вызван код внутри уровня приложения.
Мои вопросы:
Является ли это хорошей практикой для объединения объектов ValueObject, как в примере, или поэтому следует использовать класс Util?
Когда я думаю, что тогдаМогут быть и другие статические методы, например, для создания некоторого 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);
}
}
В соответствии с вопросом 2 у меня была бы зависимость от других классов внутри моего класса,но они на самом деле не являются частью моего класса (свойства).Когда у одного из других классов также был бы метод с SomeValueObject, тогда у меня были бы классы, которые взаимозависимы друг от друга.
Лично я предпочел бы класс Util, но я незнать, если это накладные расходы ...