Один вид для двух моделей: использовать класс базовой модели, чтобы упростить его? - PullRequest
2 голосов
/ 09 мая 2011

У меня такой сценарий:

  • Веб-сайт для управления отелями.
  • В ходе проекта был добавлен еще один вид гостиничной модели, поэтому теперь их два..
  • Теперь босс хочет, чтобы список отелей включал оба типа отелей.

Я думал о следующих возможных решениях:

  1. Изобретитесуперкласс, содержащий общие свойства, необходимые для отображения в списке отелей и соответствующего переопределения.
  2. Взломайте мой способ просмотра.Теперь у него есть один цикл, который производит HTML-код (очевидно).Если это сработает, будет две петли.

Проблема, которую я вижу в подходе № 1, заключается в следующем: «Отель1 расширяет BaseHotel1», «Отель2 расширяет BaseHotel2».Итак, я создам суперкласс, тогда что?

Проблема с подходом № 2 заключается в следующем: я все еще далек от "профессионального" разработчика Symfony и не уверен, что у рассматриваемого представления будет доступк более чем одной модели методов вообще.Может быть, будет работать render-partials из другого модуля?

Итак, как мне это сделать?Как вы думаете, проблемы, которые я перечислил, легко решить?Видите ли вы другие подходы?

Если это так, пожалуйста, поделитесь своими мыслями.Спасибо!

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Я знаю, что вы пометили свой вопрос Propel, но я бы хотел использовать Доктрина наследования здесь - если есть эквивалент Propel, который является - "конкретным" или "агрегацией столбцов" в зависимости от того, как вы хотите хранить ваши данные). По сути, вы получите базовый класс Hotel, который, например, будет иметь классы Hotel1 и Hotel2, начиная с.

Таким образом, вы можете иметь методы, общие для обеих моделей в классах Hotel и Table, а также методы, специфичные для отелей, в классах Hotel1 и Hotel2.

Редактировать: Только что найдено эквивалент Propel , хотя эта ссылка для Propel 1.5. Похоже, что Propel 1.3 поддерживает только «простой» тип наследования.

0 голосов
/ 09 мая 2011

Doctrine предлагает хорошее решение здесь.Взгляните на наследование совокупности столбцов .Может быть, Propel предлагает нечто подобное, но я не знаком с propel…

...