Я бы сказал, что это компромисс. В плане дизайна лучше всего выбрать ленивый маршрут погрузки. Вы не действительно хотите, чтобы искусственно различные типы учеников плавали вокруг, засоряя модель вашего домена. Конечно, это не конец света, если у вас есть простой Student
и StudentWithCourses
в качестве быстрого взлома, но он может быстро запутаться. Вы можете получить StudentWithContacts
или StudentWithCoursesButNotContacts
и т. Д. ... вы понимаете, моя точка зрения - это не совсем объектно-ориентированный дизайн. При ленивой загрузке в вашей модели будет только один объект Student, который ближе к реальному домену.
Тем не менее, реализовать ленивую загрузку будет не совсем тривиально. Так что, если время имеет важное значение, пойти с двумя классами. Когда у вас будет время на рефакторинг, вы можете добавить отложенную загрузку
(или, конечно, вы можете использовать существующий ORM для отображения данных, например Doctrine .)