Как моделировать домен, если у вас есть базовый класс и 2 класса, расширяющие этот базовый класс, и только один из производных классов имеет связь с другим объектом.
Пример:
public abstract class Base
{
public abstract void method();
}
public class1 extends Base
{
public void method()
{
do some stuff
}
}
public class2 extends Base
{
private Class3 class3;
public void method()
{
do other stuff
}
public Class3 getClass3(){...}
public void setClass3(Class3 class3){...}
}
Эта модель нарушает принцип Лискова? Я так думаю из-за этого отношения с class3, поэтому мы должны выяснить, как моделировать без этого отношения или переместить это отношение в Base. Если у меня есть часть программы, которая работает с Class2 для обработки отношения с Class3, я не могу работать с базовым классом без приведения к class2.
Это правильная мысль?
Разъяснение ...
Давайте подумаем в модели обучения. У нас есть курсы и курсы. У нас также могут быть онлайн-курсы и специальные курсы. В учебных курсах мы можем столкнуться со стоимостью этого обучения. Таким образом, затраты имеют смысл только для презентационной среды. У CourseClasses могут быть даты диапазона или количественные даты.
Сегодня у меня есть эта модель:
Course
{
...
}
public abstract class CourseClass
{
private Course course;
// getter and setter to course
public abstract Enrollment enroll(Person student);
}
public class QuantitativeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for quantitative
}
}
public class RangeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for range
}
}
Теперь мне приходится иметь дело с расходами, и до этого момента курс обучения для меня не важен, но сейчас стоимость имеет смысл только для презентации.
Моя проблема заключается в следующем: мне нужно иметь дело с объектом CourseClass в модуле затрат, потому что мне нужны некоторые вещи, конечно, CourseClass, но соотношение затрат с RangeCourseClass, потому что QuantitativeCourseClass не имеет смысла для предварительной среды.
Вопрос о Лискове о том, как заставить мою команду внести некоторые изменения в эту модель.