Тема: MVC архітектура.

Вітаю.
Досить часто на форумі, я зустрічав поняття MVC архітектура.
Пробував розібратися, що то таке і з чим його подають, але якось вийшло не дуже.
Чи можете пояснити на "хлопський розум" та/або показати якийсь простенький приклад по реалізації цієї архітектури ?

2

Re: MVC архітектура.

Якщо спрощено - це концепція, що дозволяє відокремити одне від одного "мозок" (Controller), інтерфейс (View) та модель даних (Model).

Емпіричний приклад - деякий веб-сервіс. Контент сторінок, які бачить користувач у браузері, генерується деяким рушієм (Controller), що бере дані, наприклад, з БД (Model) і відображає у певному вигляді/шаблоні (View).

I belong to the Dead Generation.
Подякували: miroslav.chandler1

Re: MVC архітектура.

Наскільки я зрозумів, це типу відділення логіки від зовнішнього вигляду ?

4

Re: MVC архітектура.

Hanter написав:

Наскільки я зрозумів, це типу відділення логіки від зовнішнього вигляду ?

Неа)) В зовнішнього вигляду також є своя логіка)

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

5

Re: MVC архітектура.

Hanter написав:

Наскільки я зрозумів, це типу відділення логіки від зовнішнього вигляду ?

Слово "алгоритмів" тут ліпше пояснить ситуацію, ніж "логіки".
Але, думаю, суть ви вловили вірно, тільки додайте ще "даних": "Відокремлення первинних даних, алгоритмів програми та зовнішнього вигляду". :)

I belong to the Dead Generation.

6 Востаннє редагувалося funivan (15.12.2012 12:22:57)

Re: MVC архітектура.

Це відокремлення логіки роботи - моделей (класів сутностей) - відображення

Як приклад суть мвц така:
Не можна наприклад писати витягнення моделей в шаблоні. Ось наступний код у view недопустимий

$user = $db->find($id)->current()

Вищевказаний код можна писати в контроллері.

А ось цей код який є представленням даних не можна писати в контроллері а необхідно писати у view

if ($user) {
  echo '<a href="/logout">logout</a>';
} else {
  echo '<a href="/login">login</a>';
}

Це вся затія полягає в тому що якщо ви кодите сайт ви завжди знаєте де може бути витягнення моделей, обробка даних, і зразу знаєте де є відображення) Тому мвц хороший шаблон)

Неа)) В зовнішнього вигляду також є своя логіка)

Всюди є логіка)) І у моделях теж) але ми інше мали на увазі;)

7 Востаннє редагувалося Bartash (15.12.2012 13:10:57)

Re: MVC архітектура.

Важливий практичний аспект MVC - це потреба відокремити функціонально відмінні модулі (шкіра, шлунок та харчі - дещо різні за призначенням для людини, правда ж? :) ) та зробити їх максимально незалежними, щоб у подальшому виникало менше проблем у процесі рефакторингу (колір шкіри має залежати від кислотності, але не від форми шлунку), перебудови структури блоків проекту (видалення аппендикса не має призвести до раку шкіри), тощо. Одним словом, - щоб ваш проект не був приставлений до Ордена за чистоту, ефективність та ясність коду.

I belong to the Dead Generation.

8

Re: MVC архітектура.

Неа)) В зовнішнього вигляду також є своя логіка)

Всюди є логіка)) І у моделях теж) але ми інше мали на увазі;)

Пане Іване, ви знову мене не зрозуміли? Чому ви кажете що я вас не зрозумів? Хто ми? Я ж вас не цитував і не відповідав на ваше повідомлення. А тепер по темі, MVC - це не відокремлення логіки від нелогіки!!! Це відокремлення однієї логіки від іншої логіки!

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: funivan1

9

Re: MVC архітектура.

Автору теми рекомендую попрактикуватись написати 3 прості класи і якщо ще будуть питання пишіть

10

Re: MVC архітектура.

2funivan при чому тут класи?

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

11 Востаннє редагувалося funivan (15.12.2012 22:01:00)

Re: MVC архітектура.

Patron написав:

2funivan при чому тут класи?

Класи при тому що можна багато читати тексту але нічого не зрозуміти а трохи почитавши а потім написати пару прикладів стане набагато простіше розуміти ідею. Якщо зразу вивчати МВЦ на основі класів буде простіше ніж просто ф-ціями)
Чи ви пропонуєте вивчати MVC на основі функціонального програмування, якщо пропонуєте то пропонуйте автору ;)

Ось до речі для автора посилання тут досить непогано розписано
http://uk.wikipedia.org/wiki/%D0%9C%D0% … 0%B5%D1%80


http://php-html.net/tutorials/model-vie … er-in-php/

p.s. І не заплутуйте автора своїми повідомленнями типу "Це відокремлення однієї логіки від іншої логіки!"  Автор старається розібратись не знаю людей як зрозуміють мвц якщо їм сказати таке речення)))

12

Re: MVC архітектура.

Я вважаю що ви заплутуєте коли посилаєтесь на те що не стосується розуміння MVC. При чому тут функції і класи? А якщо мова програмування не підтримує ООП то як людина зробить там класи? Ви про це не задумувалися?
п.с. я не буду нічого пропонувати бо на цю тему і так вже дуже багато усього написано по вікіпедіях, хабрах, блогах і т.д.

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

13 Востаннє редагувалося Bartash (15.12.2012 22:21:50)

Re: MVC архітектура.

Імовірно, Іван мав на увазі дещо, пов'язане з фреймворками типу CodeIgniter.

I belong to the Dead Generation.

14

Re: MVC архітектура.

Автор старається розібратись не знаю людей як зрозуміють мвц якщо їм сказати таке речення)))

Оо, це мені дуже цікаво, я б хотів поговрити про цих людей.) А чому вони не розуміють? MVC - це відокремлення логіки формування даних (M), бізнес логіки (С), і логіки відображення даних (V). Можете будь-ласка тикнути пальцем на те місце яке ваші знайомі "люди" не змогли б зрозуміти.
От наприклад:

class myClass { 

      function doSomething() { 
            // code fore doSomething() 
     } 

}  
//як Хантер от з цього зможе зрозуміти що таке MVC?
Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

15

Re: MVC архітектура.

А якщо мова програмування не підтримує ООП

LOL )))) А де сторена тема? Як це не підтримує. Тема в рнр значить автор на цій мові старається розібартисьу мвц))) Ну у вас і увага))

2Patron погодьтесь сказати "MVC - це відокремлення логіки формування даних (M), бізнес логіки (С), і логіки відображення даних (V)" - це одне а сказати "Це відокремлення однієї логіки від іншої логіки!" це зовсім інше. Ну можливо це тільки для мене так. для вас це одне і те саме :) Але за принципом " відокремлення однієї логіки від іншої логіки" можна пояснити пояснити коріше всього паттерни у РНР :D

як Хантер от з цього зможе зрозуміти що таке MVC?

Я мав на увазі що хатенру треба написати клас контроллера, клас моделі і клас вюхи, вибачте якщо детально не пояснив (Хоча Bartash догадався про що іде річ)

16 Востаннє редагувалося Bartash (16.12.2012 11:18:32)

Re: MVC архітектура.

Hanter, як у вас там просунулося з розумінням MVC?
Завітайте до нас у ці теплі місцини, бо тут, здс, скоро розмова перейде на капс. :).
(хоча учасники просто дивляться на проблему з різних боків)

I belong to the Dead Generation.

17

Re: MVC архітектура.

Bartash написав:

Імовірно, Іван мав на увазі дещо, пов'язане з фреймворками типу CodeIgniter.

As for me -  coding in CodeIgniter is the best way for understand MVC.
This is simple but VERY powerful tool for create php-applications in MVC pattern.

Other simplest framework is kissMVC

18

Re: MVC архітектура.

Bartash написав:

Hanter, як у вас там просунулося з розумінням MVC?
Завітайте до нас у ці теплі місцини, бо тут, здс, скоро розмова перейде на капс. :).
(хоча учасники просто дивляться на проблему з різних боків)

Та ще якось сирувато з розумінням mvc.

19

Re: MVC архітектура.

Начитавшись різних матеріалів по mvc, попробував уявити собі наступну картину:
припустімо є якийсь сайт/блог, на ньому є відображення публікацій.
Наскільки я розуміє це можна реалізувати використовуючи mvc так:
Припустімо користувач звертається до index.php?article=4 тоді у хід іде контролер, який обробляє змінну
article і передає її у модель, яка у свою чергу витягує з бд дані і передає її у вюшку, яка формує html докумет і віддає користувачеві.
Я правильно розумію?

20

Re: MVC архітектура.

2Patron погодьтесь сказати "MVC - це відокремлення логіки формування даних (M), бізнес логіки (С), і логіки відображення даних (V)" - це одне а сказати "Це відокремлення однієї логіки від іншої логіки!" це зовсім інше.

- не погоджуся. Я просто намагався не зациклювати людину на конкретній мові та реалізації. Я бачу ви цього не зрозуміли то пробуйте і далі радити людині створювати ООП класи котроллера, вюшки і моделі. Ви або впертий і упереджений (як молодий когут) або справді вважає і вірите що можна вашим способом пояснити MVC.
2Hanter не читайте те що я пишу. Створюйте класи моделі, вюшки і контроллера і скажіть нам що у вас вийшло (ви створюйте побільше класів, штук так з 25-30, чим більше класів ти краще зрозумієте MVC).

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: Адріян Ігорович1