// codeart.ru / Вопрос/Ответ / Шаблон MVC. Мысли про «состояние» модели Форум

Шаблон MVC. Мысли про «состояние» модели rss подписка

Автор: Evgeniy Sergeev

В связи с комментариями Andy к посту про MVC я невольно задумался: а правильно ли я понимаю концепцию MVC? Начал разбираться, и вот к каким мыслям пришел.

  1. Немного про State тестирование в TDD
  1. В шаблоне Active Record модель это одна запись из таблицы. Моя любимая реализация модели, поэтому, расскажу про нее.
    Там есть понятие «грязный» и «чистый объект».
    Грязный объект, это тот объект, данные которого не хранятся в БД. Т.е., например, мы получили эти данные из формы и передали объекту модели. В этом случае мы можем проверить, «грязный» ли объект примерно так (ruby):

    user = User.new
    user.name = ‘Innokentiy’
    user.email = ‘kesha@mail.ru’
    user.new_record? # => true

    Вызвали метод new_record? и получили true, т.к. объект «грязный». Дальше:

    user.save! # Сохраняем объект
    user.new_record? # => false

    Мы сохранили объект и снова проверили его на «грязность». Объект успешно сохранился и синхронизирован с БД, значит, теперь он «чистый».

    Кажется, именно это подразумевается под понятием «состояние» для модели в AR. Ну и конечно, я до сих пор убежден, что модель это не только методы работы над данными, но и сами даные.

  2. А Я вот еще больше запутался в этом паттерне. Сейчас предстоит разрабатывать и подымать проект довольно объемный по коду. Понял — без ООП и паттернов проектирования не обойтись. Сам Я люблю раскладывать всё по полочкам. До селе это решалось include(some_functions.php). Но с течением времени, Я как и все столкнулся с проблемой сопровождения и развития.

    и наверное Я туп….

    Мозг рвут в клочья различные книги по проектированию объектно ориентированных приложений и паттернов проектирования. Авторам настолько все это проело мозг, что чёткого определения, что именно должна содержать в себе модель нет нигде. Одна вода или в основе лежит какой-нибудь фреймворк, где «всё как вам уже надо, господа не парьтесь используйте». >. авторизуется
    1) Контроллер отправил запрос Модели — «Пробей человечка плиз».
    2) Модель подключилась к базе и взяла оттуда данные. Вот тут вопрос — кто должен проверять данные и делать дальнейшие действия? Контроллер или модель? Если следовать логике и товарищу, который говорит что не надо делать ТТУК, то модель. Она же описывает бизнес-логику (а бизнес-логика это реализация предметной области приложения. А что такое ПО и так понятно).
    3) Модель передала своё состояние контроллеру — «проверяю данные, погоди пять сек».
    4) Контроллер принял к сведению состояние модели и передал вьюверу — «покажи пользователю часики и попроси подождать».
    5) Модель проверила данные и передала контроллеру: «Это наш Великий Создатель. У меня прописано его пускать».
    6) Контроллер получил от модели подтверждение, проверил по какому маршруту подключить шаблон главной панели управления, нашел необходимый шаблон и передал всю это вьюверу.
    7) Вьювер отобразил необходимую страничку и Автор остался доволен, приступая к написанию поста.

    Это правильный MVC, как Я его понимаю или Я иду не в том направлении.

  3. Arconas, мне Ваше объяснение очень даже нравится. Полностью совпадает с моим пониманием MVC шаблона.

  4. Evgeny Sergeev, спасибо за ответ.
    Значится Я иду верным путем, ну или по крайней мере верно ступаю по минному полю.

  5. Здравствуйте, уважаемые разработчики.
    Я тоже интересуюсь данной темой. Сейчас пишу игру похожую на тетрис на Java. Использую принцип MVC, тоже ломал голову что к чему…

    Спасибо за ваши комментарии — я Вас поддерживаю!

  6. Arconas, как Вам данная статья?
    http://hexlet.ru/blog/112.html

  7. Arthur, если честно, то не ахти. Во-первых, это выдержки из учебного курса, который по своему определению напихан кучей умных слов и нет ничего по делу. Единственное полезное — это графики и конечный абзац. Но это всё теория.

    Всё самое интересное начинается, когда программист делает над собой неимоверное усилие и начинает с нуля писать, ну… допустим, CMS для блога. И делает он это с применением MVC (ну или там MVC2, 3,4… без разницы… это всего-лишь один из способов «нарисовать круг») и в процессе работы наглядно показывает почему он сделал выбор именно в пользу этого паттерна. И самое главное он пишет систему полностью, а не «кустисто» типа статей на Хабре: «Вот тут мы забабахаем class bla_bla_bla extend tru_lia_lia, а вот тут жахнем контролер ошибок, а здесь прикрутим шаблонизатор, и вот у нас готовая система». Старые матерые прогеры почешут заросший щетиной подбородок и кивнут типа: «да чел ты крут, но в топку ваше говнище, надо использовать ZEND(можно заменить на любой сейчас дико модный фрейм) ибо он тащит, а еще накрутить Yii, добавить jQuery». Интернет подобным просто кишит. Это просто ужас и нежелание помочь подрастающему поколению. А ответы типа «открой код любой CMS и разберись» вымораживают. Хочется ответить — открой капот автомобиля и разберись как двигатель работает. И да поставь мне туда турбину. Если не рванет — ты справился с заданием.

    Я немного сейчас отошел от программирования и учусь рисунку. И вот преподаватель с которым Я занимаюсь рисует вместе со мной показывая как это обычно делается. Сидим рисуем зерна кофе, не получается. Преподаватель садиться и рисует, а я наблюдаю. Потом сажусь и повторяю. За крайне короткий промежуток времени по её словам Я рисую на уровне студента конца первого курса. То же самое должно быть и в программировании с немного правда другим подходом, но не в этом суть.

    Еще ни разу мне не попадалась статья или цикл статей, где бы обучали не теории и заумным словам аля БИЗНЕС МАТЬ ЕЁ ЛОГИКА или КОНТРОЛЕРРР, состояние модели, а пошагово, с нуля, без использования «супер фраймов» (для некоторых программистов это как серпом по яйцам) и адски навороченных шаблонизаторов писали бы… там тот же блог или гостевую книгу. Что-то простое, но на чём можно обучится. Раньше это было. Серии книг Кузнецова и Симдянова, множество орейлевской литературы. Но они не позволяют двигаться дальше, предел знаний есть. Сейчас как-то всё «быстро-быстро-быстро и вуаля». А потом мы удивляемся — почему ломают вроде бы неприступные сайты, почему они падают при высокой посещаемости и почему вокруг того же php крутится огромное количество быдлокодеров.

    Я давно уже хочу начать в своем блоге цикл статей типа: «пишем с нуля без купюр и теоретической мутатени», но пока что уровень моих знаний оцениваю на троечку и продолжаю собирать грабли. Как вот набью тучу шишек, как только моя CMS будет написана и возьмет порог в 30 000 пользователей, обязательно примусь за написание развернутых статей или может даже скринкастов.

    Arthur, ой, кстати. Вы меня извините, но не принимайте это всё как критику или еще что-то. Просто наболело =D, такой выплеск графоманства.

  8. В любом случае Модель не должна знать о существовании Контроллера и Вьювера. На то она и есть Модель.

Leave a Reply

« »