Когда включать вспомогательные методы в модель (MVC)?


Я думаю, что проще всего задать этот вопрос в реальной ситуации, с которой я сталкиваюсь.

В нашей системе у нас есть модель сайта (классическая структура MVC здесь), которая представляет строку в нашей таблице сайта. Одним из полей таблицы сайта , хранящейся в модели сайта, является часовой пояс сайта. Мы используем это для настройки времени в формате UTC из базы данных в соответствии с отображаемым часовым поясом сайта. Есть несколько вспомогательных методов, которые помогают в этом: utcDatetimeToSiteTimestamp(), utcTimeStampToSiteDatetime() и т.д.

Поскольку эти вспомогательные методы используют часовой пояс сайта, который содержится в модели сайта, можно ли включить эти методы в модель? Или их следует поместить в отдельный вспомогательный класс или что-то в этом роде?

Я знаю, что модели должны делать больше, чем просто хранить строку данных из базы данных, но где грань между вспомогательными методами, которые воздействуют на эти данные, и вспомогательными методами, которые используют эти данные для воздействия на внешние ввод?

Спасибо за любую информацию!

Author: Justin Stayton, 2009-09-10

4 answers

Это вопрос для некоторого суждения. Если вспомогательные методы являются общими и могут быть полезны в других классах, создайте вспомогательный класс, так как это делает код пригодным для повторного использования. Если вспомогательные методы очень специфичны для данного класса, оставьте их прямо там.

 6
Author: Vincent Ramdhanie, 2009-09-09 21:58:51

Ответ лежит в области ответственности. Класс модели отвечает за знание того, как добавлять в него материалы, изменять в нем материалы, удалять из него материалы, а также когда и как изменять его внутреннее состояние.
Там ничего не говорится об обращении. Преобразователи принадлежат к внешнему классу. Так же как и объекты форматирования или что-либо, отвечающее за то, как модель будет представлена клиенту.

 3
Author: Jim Barrows, 2009-09-09 21:58:09

Я бы создал вспомогательный класс, так как эти методы на самом деле не принадлежат одной модели. Это были бы статические методы, что, на мой взгляд, является плюсом для отдельного вспомогательного класса.

 1
Author: janoliver, 2009-09-09 21:57:00

Я согласен с Винсентом Рамдани в том, что это вопрос суждения. Лично мне не нравится определять вспомогательные функции из моих классов моделей - я думаю, что это слишком грязно, и что им просто там не место (плюс я часто обнаруживаю, что едва ли какая-либо вспомогательная функция используется только один раз). Однако это не значит, что я не использую вспомогательные функции из своих моделей. Например, если у меня есть класс модели BlogPost, мой метод getOneCompiled() будет использовать вспомогательные функции для соберите несколько ссылок, прежде чем возвращать массив, представляющий строку таблицы.

Важно, чтобы вы рассмотрели свои варианты и увидели, что приведет к созданию кода, который будет легко читать и поддерживать. Написание вспомогательной функции в собственном файле может потребовать дополнительной предварительной работы, но если это упростит управление вашим кодом, это, безусловно, того стоит.

 1
Author: Steven Mercatante, 2009-09-09 23:44:56