![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Работая с Catalyst, обнаружил, что очень многие вещи (в том числе и те, что к модели не отноятся) удобно реализовывать через наследование класса строки таблицы DBIx.
Например есть таблица, содержащая статьи, публикуемые на сайте. Удобно добавить к классу строки таблицы методы, возращающие url статьи и url страници админки для редактирования статьи . Но это, если я правильно понимаю MVC, это задача для контроллера. Или есть таблица с пользователями, у которых есть логин, имя и фамлия, а на имя пользователя часто выводится в формате "username (Имя Фамилия)", имя и фамилия не обязательны. Т. е.
Удобнее один раз добавить метод обьекту строки таблицы. Эта задача для view. Но добавляя методы одному классу строки таблицы, получим смешение model, view, controller в одном файле. Как быть? Это сообщение отредактировал(а) Logo - 14.10.2010, 18:18 |
|||
|
||||
| ming |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
отдавайте во View не объект типа User, который представляет строку таблицы, а заводите промежуточный класс ну например DisplayedUser и отдавайте его экземпляр.
в Model
а во View:
|
||||
|
|||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Собственно, в том и загвоздка, что код помещается в model. А представление данных должно быть во view.
|
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Logo, представление - очень растянутая вещь..
Нет смысла строго придерживаться MVC, если при этом страдает простота и понятность. У вас есть данные - класс Человек. Данные тоже могут обладать методами, возможно отличными от get/set. Например, у вас хранится полное имя - Иван Иваны Анонимкин, а вы хотите получать сокращенное - И.И.Анонимкин, эта логика настролько сильно привязана к данным, что ее правильно помещать в модель. В вашем случае
так же можно поместить в модель. Главное, что бы он не был в перемешку с html. А вот в случае с URL на страничку статьи - не нужно помещать ее в модель. URL вообще имеют свойство меняться. Их желательно никуда не харкодить. |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Ну, до html там не далеко, возможен вариант username (Фамлия Имя). Url-ы тоже просто в схему записывать? Ведь это удобно - генерация урла только в одном месте. |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
да, только этим местом не должна быть модель. Посмотрите Django - там вообще предполагается, что приложение не должно знать полную структуру URLов, т.к. маппинг URLов на обработчики осущесвтляется программистом в момент установки приложения. Просто представьте себе, что кто-то захочет использовать ваше приложение как часть своего сайта. Что потом делать с вашими URLами? |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Есть тип данных/класс, К примеру App::Schema::Article. У статьи должен быть генератор урла, который должен генерировать url самой статьи и url статьи в админке. Тоесть, фактически, метод в ООП. Я и добаляю генерацию урла как методы App::Schema::Article. Но т. к. эти методы я определяю там же, где и чисто "модельные" методы, получается смешение. Добавлено через 9 минут и 39 секунд Делать url hardcode, или нет, другой вопрос. URL можно делать через uri for action. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |