Я бы сказал, что описанный вами случай (по крайней мере, как я его понял) не будет хорошим кандидатом для создания подклассов.
По сути, вы хотите ограничить форму изменением только некоторых полей / ассоциаций сущности, верно? Кроме того, я предполагаю, что вы не доверяете разработчику формы, что изменяются только те поля, которые должны быть редактируемыми, поэтому необходимо ограничить это.
В этом случае одним из вариантов может быть использование шаблона DTO (объект передачи данных): создайте DTO для данных формы и дайте пользователю заполнить его поля. Затем передайте DTO службе, которая обновляет объект соответствующим образом. Таким образом, вы можете контролировать, какие поля являются редактируемыми и как выполняется обновление.
Другим способом может быть создание оболочки для сущности, которая генерирует исключения, когда вызывается установщик для не редактируемого поля. Однако это было бы решение во время выполнения, и я бы предпочел подход DTO здесь.
Редактировать :
некоторые причины, по которым наследование может оказаться проблематичным в этом случае:
- Подклассы не представляют сущности, однако вам все равно придется представлять подклассы в базе данных (либо через дискриминаторы, либо через дополнительные таблицы)
- Сущность, созданная этой формой, всегда будет иметь подкласс и, следовательно, не будет редактируемой в других местах (если вы не возитесь с базой данных и т. Д.)
- Объекты являются контейнерами данных и не должны зависеть от представления. Следовательно, наличие специального объекта (подкласса) для одного варианта использования пользовательского интерфейса (форма в вашем случае) нарушит принцип единой ответственности и абстракцию между моделью / данными и уровнем представления / представления.