У меня есть иерархия объектов, которые будут иметь одинаковое поведение.Я хочу отделить поведение от определений POCO.Поскольку поведение представляет собой перемещение объектов в различные состояния, мне кажется, что это работа для шаблона состояний.Но это не так просто, как наличие отдельного определения для каждой функции, поскольку каждый объект может иметь немного различное поведение.
Например, допустим, у меня есть следующие классы, основанные на абстрактном базовом классе:
public abstract BaseClass
{
public int Property1 { get; set; }
public int Property2 { get; set; }
}
public Class1 : BaseClass
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
}
public Class2 : BaseClass
{
public string PropertyC { get; set; }
public string PropertyD { get; set; }
}
Иерархия представляет различные типы объектов.Давайте также скажем, что все объекты следуют одному и тому же основному рабочему процессу: отправлено, одобрено, выполнено, закрыто.
Теперь поведение каждой функции также является иерархическим, то есть вызов функции Approve () для Class1 должен бытьтак же, как вызов унаследованного поведения из BaseClass, но Class2 переопределяет функцию Approve (), поскольку этот тип следует за другим процессом утверждения.
Я теряюсь, пытаясь применить шаблон состояния к этим объектам.Я мог бы поставить функции на сами объекты и наследовать их таким образом, и это прекрасно работает, но это нарушает дизайн POCO.Я также мог бы реализовать функцию Approve () с оператором switch для каждого типа объекта, но это нарушает мой полиморфный дизайн.
Как я могу применить шаблон состояния к определению многослойного полиморфного объекта и оставаться в соответствии спринципы проектирования.
Обновление : Позвольте мне уточнить, я думаю, что функции, которые выполняют другие функции, помимо действия над объектом, не принадлежат POCO.Пример: функция Approve собирается отправлять электронные письма и инициировать события в других системах, а не только изменять состояние объекта.Может быть, это только я.