Лучшая практика PHP MVC Вопрос - PullRequest
1 голос
/ 05 августа 2009

Я создаю приложение календаря на PHP с CodeIgniter. На главной странице календаря Моя модель в настоящее время создает массив с каждым индексом, равным одному дню в текущем месяце. Этот день представляет собой массив, содержащий любые события, которые пользователь может иметь в этот день. Теперь я должен сконструировать массив календаря в контроллере FIRST, а затем передать его модели, чтобы модель могла получить доступ к базе данных и заполнить все события, или мне просто создать массив календаря и заполнить события ALL в модели

$ month = массив («пусто», «пусто», «день1» => массив (событие 1, событие2), «день2» => ...);

Ответы [ 2 ]

1 голос
/ 05 августа 2009

Это сложный вопрос, и я не уверен, что все будут делать то же самое ... Но вот что, я думаю, следует принять во внимание:

  • Если метод вашей Модели должен использоваться из нескольких частей вашего приложения (скажем, контроллер, который уже вызывает его, пакетная программа и интерфейс веб-службы SOAP) , что может означать При вызове из нескольких методов Controller возникает вопрос: что вы хотите, чтобы массив был похож?
    • Если он должен всегда содержать одно и то же ("полный массив") каждый раз, тогда, чтобы избежать копирования и вставки, вы должны поместить свой код в модель
    • Если он должен содержать «полную вещь» только в одном случае, тогда ваш «специальный код» может быть в контроллере - или в другом методе модели, который будет вызываться в контроллере, в этом особом случае и вызовите существующий, чтобы получить данные.
    • Другим способом было бы добавить один слой между Контроллером и Моделью ... В конце концов, это не такая плохая идея ...
  • Если массив считается «целым» только тогда, когда код, о котором вы говорите, выполнен, то, я полагаю, имеет смысл поместить этот код в модель
  • Если этот код является частью некоторого правила бизнес-логики, он имеет свое место на уровне модели; с другой стороны, если это связано только с представлением, его место будет в представлении.
  • Если ваш метод Model называется "getData", он должен возвращать только массив, содержащий "реальные" данные, а не тот, который содержит "пустые" дни; с другой стороны, если он называется "getEventsByDay", имеет смысл заставить его возвращать что-то за каждый день, даже пустые
  • Вам следует попытаться создать согласованный интерфейс для методов модели: если для сохранения данных требуется какой-либо массив, то тот, который загружает данные из вашей БД, должен возвращать массив того же типа; что-то вроде $model->save($model->load()) должно работать, я имею в виду

В конце концов, нет «хорошего ответа»: «это зависит» ^^

Я действительно не знаю, что бы я делал в вашем случае; Я полагаю, это в некоторой степени зависит от остальной части приложения ... Вопрос, который я задаю себе: «Имеет ли смысл пустой день смысл для моей Модели или это просто вопрос презентации?»

0 голосов
/ 05 августа 2009

Я бы, наверное, спроектировал его так, чтобы он мог работать "в обе стороны". Выходные данные модели должны быть стандартизированным массивом, вероятно, в соответствии с:

array('2009-08-05' => array('event' => ..., ...), '2009-08-06' => array(...));

т.е. только чистые данные.

По умолчанию он может выплевывать текущий месяц или все, что находится сейчас, и +1 месяц. Также следует принять аргумент, чтобы изменить это поведение по умолчанию. Либо взять массив дат или диапазон.

Я не знаю, почему первые две записи в вашем примере «пустые». Если ваш массив уже представляет месяц, как показано на листе календаря, то это пошло бы против MVC. Такие вопросы презентации должны быть рассмотрены в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...