@Entity (get/set) @Repository (CRUD) @Service (сделай все бизнес-проверки ну и все остальное) @RestController (вызови сервисы и репозитории в транзакции и отдай JSON) Мало логики Много логики 5 18
со сложной структурой и своим жизненным циклом | Все манипуляции со связанными объектами – только через API корневого объекта | Соблюдение инвариантов в корневом объекте 9 18
JsonTypeInfo.As.PROPERTY, property = "@type") @JsonSubTypes({ @JsonSubTypes.Type(value = LessonClassroomRequirement.class, name = LessonRequirementType.TYPE_CLASSROOM), @JsonSubTypes.Type(value = LessonProvisionRequirement.class, name = LessonRequirementType.TYPE_LESSON_PROVISION), @JsonSubTypes.Type(value = LessonTeacherRoleRequirement.class, name = LessonRequirementType.TYPE_TEACHER_ROLE), @JsonSubTypes.Type(value = LessonSchedulingIntervalFromPrevLessonRequirement.class, name = LessonRequirementType.TYPE_SCHEDULING_INTERVAL_FROM_PREV_LESSON), @JsonSubTypes.Type(value = LessonTimeRequirement.class, name = LessonRequirementType.TYPE_TIME), @JsonSubTypes.Type(value = LessonPreparationRequirement.class, name = LessonRequirementType.TYPE_PREP), }) public abstract class LessonRequirement implements Serializable { public void initFromLesson(Lesson lesson) { // для установки данных из родительской УВ } public abstract LessonRequirement copy(); }