В настройке MVC, где текст должен быть отформатирован? - PullRequest
4 голосов
/ 10 декабря 2011

Скажем, я хочу получить и отобразить список дат для пользователя для данного ввода.Контроллер принимает входные данные, запрашивает у модели даты (возвращаемые в формате отметок времени Unix из БД), а затем передает даты в представление для отображения.

Мой вопрос: где в этой цепочке я долженбудет переформатировать дату в нечто понятное человеку?то есть «1323473367» переформатирован в «9 декабря 2011».

С одной стороны, для меня имеет смысл сделать это в Модели, чтобы Контроллер был как можно более «легким» и сохранял Виднастолько чистый шаблон, насколько это возможно.С другой стороны, формат даты является своего рода деталями презентации ... так что, возможно, он принадлежит представлению.Или, может быть, он принадлежит Контроллеру, поскольку на самом деле он не является частью ни Модели, ни Представления.

Ответы [ 3 ]

1 голос
/ 10 декабря 2011

Вы можете добавить служебный класс для форматирования дат. Поэтому перед передачей значений в представление (после извлечения из модели) вы можете отформатировать временные метки по своему усмотрению, сохраняя при этом функциональность централизованным, модульным способом.

0 голосов
/ 10 декабря 2011

Отличный концептуальный вопрос.

В идеале это должно быть сделано в представлении. В моих приложениях я использую JavaScript для создания интерфейса. Пользователь взаимодействует с интерфейсом, и интерфейс отображает эти взаимодействия на запросы Ajax. Сервер возвращает временные метки (вместо отформатированных дат), и интерфейс отображает эти временные метки в отформатированные временные строки. Модель только «понимает» временные метки и безразлична к тому, как люди понимают время. Контроллер ничего не «понимает».

Однако CodeIgniter не работает таким образом. Вместо этого контроллер запрашивает информацию из модели, использует представление для отображения этой информации и возвращает представление клиенту. Представление - это просто шаблон для отображения информации. Он не может переводить информацию в другую форму так же, как JavaScript.

Важный принцип: контроллер должен относиться к бизнес-логике безразлично. Значение времени является частью бизнес-логики. Следовательно, контроллер не должен «понимать», что означает «временная метка», что необходимо для того, чтобы контроллер преобразовал временную метку в читаемую человеком строку. Это оставляет вид и модель.

Как уже говорилось, представление не "понимает" информацию; вокруг него размещаются только HTML-теги.

Осталось только модель. Когда клиент запрашивает ресурс, он должен сообщить серверу его локаль. Контроллер должен передать языковой стандарт модели, а модель должна «понять» языковой стандарт и соответствующим образом отформатировать строку времени.

0 голосов
/ 10 декабря 2011

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

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