Я хочу изучить шаблон архитектуры MVC, но пока я не хочу входить в рамки, такие как Rails или Django. Сначала я хочу понять концепцию и написать простой код в моей знакомой среде, которая, как представляется, является PHP/HTML/CSS/MySQL. Мне не обязательно нужен учебник, основанный на PHP, поскольку я понимаю много разных языков. И я не хочу устанавливать какие-либо фреймворки или API или библиотеки. Я просто хочу научиться думать в MVC и применять его к своим проектам. Любые предложения?
Учебник MVC, который не полагается на структуру?
Ответ 1
Почти каждая структура делает MVC по-другому, поэтому вы можете стать еще более запутанными. Общие принципы MVC очень просты: "Модель - состояние, вид реагирует на модель, контроллер реагирует на просмотр, контроллер меняет модель". Модель, представление и контроллер - это понятия - они все, что вы чувствуете. Классы, группы классов, экземпляры классов с файлами конфигурации XML, вы называете это.
На самом деле я думаю, что об основных принципах. Без рамки вы бы не стали намного дальше. Важно то, как определенная структура определяет модель, представление и контроллер и их взаимодействия.
Ответ 2
MVC в основном просто разбивает ваш код на модель, которая обрабатывает данные, вид, который отображает данные, и контроллер, который передает данные из модели в представление.
Для этого вам не нужен API или фреймворк, это просто способ разбить ваш код. Причина, по которой многие фреймворки используют это, состоит в том, что это очень простая концепция, она хорошо работает для многих вещей (идеально подходит для веб-страниц) и довольно гибкая (например, с Rails, вы можете делать все в своем представлении или модель/контроллер, если вы так желали..)
Быстрый пример в python примера MVC с структурированным Python script. Не обязательно "лучшие практики", но он работает и довольно прост:
class Model:
def get_post(self, id):
# Would query database, perhaps
return {"title": "A test", "body": "An example.."}
class Controller:
def __init__(self):
self.model = Model()
self.view = View()
def main(self):
post = self.model.get_post(1)
self.view.display(post)
class View:
def display(self, item):
print "<h1>%(title)s</h1>\n%(body)s" % item
c = Controller()
c.main()
Ответ 3
Одним из наиболее интересных ресурсов являются оригинальные статьи Трюгве Реенскауга. Wikipedia также содержит много агностической информации о языке MVC.
Ответ 4
В дополнение к ответу Sander, я бы сказал, что большинство фреймворков путают фронт-контроллер и MVC. Это действительно две совершенно разные концепции, но они часто присутствуют в рамках. Поэтому следите за этим.
Ответ 5
Посмотрите это описание, пример и диаграмма, которые охватывают основы MVC.
MVC - отличная настройка для простых конструкций, но часто она путается с PAC, которая похожа и развивается на MVC. Обе настройки великолепны, эти две ссылки предоставляют информацию, чтобы помочь им быть понятными.
Ответ 6
Не спрашивайте меня, как, но я наткнулся на эту запись из превосходной вики по теме шаблонов дизайна:
http://www.c2.com/cgi-bin/wiki?ModelViewController
Много интересных обсуждений и указателей на различные ресурсы.
И мне потребовалось всего шесть дней, чтобы найти его!
Ответ 7
Попробуйте эту замечательную статью: Нетрамовая инфраструктура PHP MVC. Это не заменяет введение в шаблон MVC, но предоставляет простые и практические примеры.
Ответ 8
Вы можете попробовать этот PHP MVC Tutorial. Он хорошо написан, очень светлый, содержит только основные сведения, и вы можете найти код на sourceforge.
Ответ 9
Я не понял шаблон MCV, пока не попробовал. Если вы знакомы с PHP, вы можете попробовать http://cakephp.org, его фреймворк PHP, в котором используется большинство парадигм RoR.
Ответ 10
Основным преимуществом MVC является разделение проблем. Когда вы пишете код, и если вы не будете осторожны, это может стать большим беспорядком. Поэтому знание того, как ставить Модели, Виды и Контроллеры в разных "силосах", экономит ваше время в долгосрочной перспективе. Любая стратегия хороша.
Итак, вот моя:
- модели - это файлы, найденные в /lib в дереве проекта
- представления - это файлы, заканчивающиеся на .html в дереве проекта Контроллеры
- - это URL-адреса в <form> атрибуты действия
Ответ 11
Знай, что поздно, но я уверен, что люди придут позже с тем же вопросом.
Я думаю, что очень хороший пример кода выше, лучше, чем YMMV:
#!/usr/bin/python
class Model:
def get_post(self):
return {"title":"A test","body":"An example.."}
class View:
def display(self,items):
print 'Title:',items['title'],'\n'+'Body:',items['body']
class Controller:
def __init__(self):
self.model=Model()
self.view=View()
def main(self):
post=self.model.get_post()
self.view.display(post)
mvc=Controller()
mvc.main()
Вот еще один пример использования наследования, который может быть очень полезен в python/php.....
#!/usr/bin/python3
class Control:
def find(self,user):
return self._look(user)
def _look(self,user):
if user in self.users:
return self.users[user]
else:
return 'The data class ({}) has no {}'.format(self.userName(),user)
def userName(self):
return self.__class__.__name__.lower()
class Model(Control):
users=dict(one='Bob',two='Michael',three='Dave')
class View():
def user(self,users):
print(users.find('two'))
def main():
users=Model()
find=View()
print('--> The user two\ "real name" is:\n')
find.user(users)
if __name__=="__main__":
main()
Если это имеет смысл, пойдите в django теперь, когда вы готовы. Просто прочитайте бесплатную книгу если это имеет смысл, вы быстро ее пройдете. Ваше право, хотя вы должны быть в состоянии знать о парадигмах ООП и MVC перед использованием django, поскольку оно построено и используется через эти парадигмы.
Как вы видите, это не сложно, это всего лишь один из многих способов сохранить код в порядке.
Ответ 12
Вот несколько руководств, которые не относятся к рамкам:
- Принципы MVC для разработчиков PHP
- Шаблон проектирования MVC
- Оптимизированная презентация содержимого XML
- Шаблон проектирования Model-View-Controller (MVC) для PHP
- XSLT в MVC
- Когда MVC становится обузой для XForms
- Перемещение вперед - betterFORM 6 aka 'Fore born | betterFORM
- Coldfusion MX и Fusebox
- Стивен Нельсон на Fusionbox с CFC-интерфейсом
- Разработка трех уровней с PHP 5
- Как использовать Python в Интернете
- Использование MySQL для остановки редактирования веб-страниц
- Нетрадиционная инфраструктура PHP MVC
- Beyond MVC
- Эволюция MVC
- Разница между моделью-view-viewmodel и другими разделенными шаблонами представления
- Внутренние интерфейсы Firebug
- Firebug Internals II. - Унифицированный рендеринг объектов
Ответ 13
Проверьте Non-OO MVC на пушистый сайт кошки
Ответ 14
Этот учебник позволит вам начало и конец строительства MVC. Объект не soley для создания готовой структуры MVC, хотя это произойдет, но продемонстрировать, как работает MVC, и некоторые из концепции, лежащие за ним.
Ответ 15
На сегодняшний день лучший учебник MVC, который я когда-либо видел: http://www.youtube.com/watch?v=Aw28-krO7ZM (часть 1, не пропустите другие части!), код можно найти здесь: http://jream.com/lab/open-source
Очень симпатичный парень с чувством к чему-то-чему-то научиться.
Ответ 16
Для тех, кто сталкивается с этим в поиске, есть большой учебник для начинающих по PHP MVC на SitePoint.