Каков путь наименьшего зла при работе с полиморфизмом и наследованием типов сущностей в сервис-ориентированной архитектуре?
Принцип SOA (насколько я понимаю) состоит в том, чтобы иметь классы сущностей в виде простых конструкций данных, в которых отсутствует какая-либо бизнес-логика. Вся бизнес-логика содержится в узко ограниченных, слабосвязанных сервисах. Это означает, что реализации служб настолько малы, насколько это возможно, что способствует слабой связи, и означает, что сущности избегают знать о каждом поведении, которое система может выполнять с ними.
Из-за довольно странного решения Java использовать объявленный тип 1009 * при решении, какой перегруженный метод использовать , любое полиморфное поведение в реализациях службы вместо этого заменяется серией условных проверок. object.getClass()
или используя instanceof
. Это кажется довольно отсталым в OOPL.
Является ли использование условных обозначений принятой нормой в SOA? Следует ли отказаться от наследования в сущностях?
UPDATE
Я определенно имею в виду перегрузку, а не переопределение.
Я определяю SOA как означающее, что поведение системы по сценариям использования группируется в интерфейсы, а затем логика для них, как правило, реализуется в одном классе на интерфейс. Таким образом, класс сущностей (скажем, Product
) становится не чем иным, как POJO с геттерами и сеттерами. Он абсолютно не должен содержать какой-либо бизнес-логики, связанной с сервисом, потому что тогда вы вводите одну точку привязки, посредством которой класс сущности должен знать обо всех бизнес-процессах, которые могут когда-либо работать на нем, полностью отрицая цель слабо связанной SOA .
Таким образом, поскольку не следует встраивать поведение, специфичное для бизнес-процессов, в класс сущностей, нельзя использовать полиморфизм с этими классами сущностей - нет поведения, которое можно переопределить.
ОБНОВЛЕНИЕ 2
Вышеупомянутое поведение более просто объясняется как перегруженный путь, выбранный в время компиляции , и переопределенный путь в время выполнения .
Было бы плохой практикой иметь подкласс реализации вашей службы для каждого подтипа класса модели домена, на который он действует, так как же люди справляются с проблемой перегрузки во время компиляции?