Допустим, у меня есть служба и я публикую контракт, например
public class MyObject
{
public int Foo { get; }
public string Bar { set; }
}
. Я полагаю, что неправильно иметь «поведение» в контракте данных, например,
public class MyObject
{
public int Foo { get; }
public string Bar { set; }
public void DoSomeAlgorithmWithMyProperties() { … }
}
Другими словами, контракты на данные должны быть просто сумками стоимости.
Так что мой вопрос в том, как мне создать поведение для такого объекта.Один способ, который я вижу, - это просто создать отдельный объект зеркального отображения, например
public class MyObjectInternal
{
public int Foo { get; }
public string Bar { set; }
public class MyObjectInternal(int foo, string bar)
{
this.Foo = foo;
this.Bar = bar;
}
public void DoSomeAlgorithmWithMyProperties() { … }
}
Другой способ - наследование
public class MyObjectInternal : MyObject
{
public class MyObjectInternal(int foo, string bar)
{
this.Foo = foo;
this.Bar = bar;
}
public void DoSomeAlgorithmWithMyProperties() { … }
}
, а другой возможностью может быть просто полное разделение поведения и данных с помощьюс отдельными классами, которые работают со значениями, например
public static class MyObjectAlgorithmDoer
{
public static void DoSomeAlgorithmWithMyProperties(MyObject myObject) { … }
}