Автор Тема: MVC + OOP - психология - питане  (Прочетена 3134 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

newdev

  • Newbie
  • *
  • Благодарности
  • -Казани: 2
  • -Получени: 0
  • Публикации: 16
MVC + OOP - психология - питане
« -: 03 Април 2014, 10:24:04 »
Здравейте,

Почвам да се чудя като пиша на MVC модела обектно.

Най-вероятно това чудена идва от факта че не съм писал много код обектно - особено MVC.

Примерно ако искам да създам системи за обяви:

1. В класа на модела трябва да се намират всички методи свързани с обявите. След това трябва с различните методи да се достигне ефекта които се изисква.
Така в Controller-a се задава САМО вход с данни и се взима обработеният резултат - буквално на 2 реда код. В това число обекта може да се казва OffertsModel.php
2. Модел файл се прави по разчупен - може да се работи директно с него от контролера така че да се достигне по-разчупена структура. Но по този начин контролера става по-голям като код и затруднява някой път четенето ако в модела не са използвани по-ясни имена на методите които се ползват или няма някои др. коментар.

Освен това трябва ли Метода да извиква нови класове - или това задължение е на контролера?

Спомням си думите на Иван че трябва да се пишат така че като се вземе едното да може да се пренесе на др. място и да работи отново - това означава ли че трябва да се използва 1-вият вариант от по-отгоре?

Най-вероятно съм Ви обърквал и вас но и при мен е така :)

Има ли някъде където мога да видя работещ такъв модел където е показано как се прави на практика - така че колегите да не те замерват с разни предмети като почнеш работа - някой ден - дай боже :)

Мерси предварително за разяснението и помощта!

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1003
  • Кибик
Re: MVC + OOP - психология - питане
« Отговор #1 -: 03 Април 2014, 13:31:47 »
При мен е така:
-Модел: набор от инструменти - Аутолоудър, Входящи данни(GET, POST, курабии), Сесии(нативна или БД), Рутери, БД и т.н.

-Вю: клас или класове, който се грижат за темплейтната ми система и пращаt към браузера.

-Контролер: това са класовете, които се викат в зависимост от URL-то, например http://sajt.haha/обяви/нови/ при мен ще извика контролера Obqvi.php и метода _new(), защото в конфига съм обявил, че 'обяви' е 'obqvi', a 'нови' е '_new' (new е запазена дума в php)
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: MVC + OOP - психология - питане
« Отговор #2 -: 03 Април 2014, 20:05:58 »
Идеята на модела е да олекоти контролера и трябва да съдържа логиката свързана с информацията (най-често БД) и "бизнес логика". Аз лично си признавам че не съм стигнал такова ниво да използвам само модела да пускам заявки и често го правя директно от контролера (ако е някаква малка заявка разбира се).
Предполагам че зависи от случая, но досега не съм срещнал някъде да пише че е забранено да се викат други класове в модел.

За някакъв пример, ами не ме бива много в това, но ще се опитам да ти помогна. Да приемем че имаш модел, който отговаря за обявите и изглежда така:
Код: PHP
  1. class ObiyavaModel {
  2.  
  3.         public function getAllObiyavi() {
  4.                 $query = $this->db->query('SELECT * FROM `obiyavi`');
  5.                 return $query->fetchObj($query);
  6.         }
  7.  
  8.         public function getObiyava($id) {
  9.                 $query = $this->db->query('SELECT * FROM `obiyavi` WHERE `id` = ' . $id);
  10.                 return $query->fetchObj($query);
  11.         }
  12.  
  13.         public function addObiyava($data = array()) {
  14.                 try {
  15.                         $query = $this->db->query('INSERT INTO `obiyavi`(`fields`) VALUES(' . $data . ')');    
  16.                 } catch (Exception $e) {
  17.                         return false;
  18.                 }
  19.                 return true;
  20.         }
  21.  
  22.         // Delete, Update, etc
  23. }

Понеже единственото нещо което правят тия методи е да се занимават с обявите, може да ги викаш където ти е кеф за да работиш с обявите. За разграничение нека разгледаме метода, който взима всички обяви. Ако в него имаше други дейстия, примерно да взима всички обяви и нещо друго с тях, което не ти трябва навсякъде, то тогава този метод не би ти свършир работа в даден момент щото ти просто искаш да вземеш всички обяви.

Надявам се че си ми разбрал мисълта, питай за пояснения. :)

@HanKrum, Хане, не мисля че модела трябва да се занимава с аутолоудъри, рутери и подобни - тия неща са си библиотеки и е уместно да се викат отделно.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1003
  • Кибик
Re: MVC + OOP - психология - питане
« Отговор #3 -: 04 Април 2014, 09:38:31 »
Ами и Светата Книга е една, но има католици, протестанти, амиши, евангелисти, православни и т.н всеки си я тълкува както му е угодно.
Правилното е като работи и като се бачка лесно с него, при мен работи, бачка се страшно лесно, а и никой не може да ми каже как да си кръстя коня ;)
МВЦ е като американската експедицията "Аполон" до луната, уж е станало, а не баш.
И пак повтарям: при мен е така. Модела го ползвам на 9-10 сайта едновременно, само конфига, контролерите и вю-то се различават.
Видими за апача са само index.php, css и js, всичко друго е някъде из файловата система.

п.п. И ако това не е MVC, значи Иван много добре заблуждава! :)
« Последна редакция: 04 Април 2014, 09:45:22 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: MVC + OOP - психология - питане
« Отговор #4 -: 07 Април 2014, 15:26:14 »
впрочем МВС-то е една голяма простотия и не е даже нещо стабилно като идея. Има поне 5 имплементации в зависимост от езика и фрейма. Както и че МВЦ не е задължително ООП. Фирмата за която работя до сега има над 200 хиляди php реда процедурен код и ползва МВЦ (нямаме класове). Аз ползвам например ангулар.жс който има идея за МВЦ ама негова си дето не може да ползваш в РНР.
според мен прекомерното вкарване в патърните и опита за "изчистване" на кода по еди къвси шаблон е пагубно за програмиста. Колкото и стриктно да пишеш МВЦ, една голяма реорганизация на кода (или пренаписване) ще те вкара в голям филм който ще е главоболие като цяло. Единствената правилна идея според мен която трябва да се следва е: кода от самото начало без значение колко ще е голям проекта трябва да се мисли с лесен метод за разширяване и надграждане, с в момента наличните инструменти на езика (не става дума че на фейсбука рнр им е станал тесен технически). Да се пише така че лесно и друг може да го вземе и препише, донапише, или влезе в употреба.
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: MVC + OOP - психология - питане
« Отговор #5 -: 07 Април 2014, 17:31:20 »
То в интерес на истината, форумът в който пишем в момента, Simple Machines, е MVC и е напълно процедурен. :)
Както виждаме, всеки го разбира по различен начин и има разминавания, но не забравяйте какво точно моли питащия:
Има ли някъде където мога да видя работещ такъв модел където е показано как се прави на практика - така че колегите да не те замерват с разни предмети като почнеш работа - някой ден - дай боже :)
Тука май най-точно е последното изказване на Еч, важно е кодът да е добре измислен, така че ако някои те пита, "що си го направил това така, не следва еди-кой си модел", да можеш да се обосновеш и да докажеш че всъщност си избрал по-удачния вариант.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 5
  • Публикации: 341
Re: MVC + OOP - психология - питане
« Отговор #6 -: 07 Април 2014, 21:58:01 »
Аз не смея да коментирам ама я да си изкарам една пс...ня от някой старши. MVC не се базира върху определен език за програмиране! Жалко, че не съм гледал уроците на Иван за MVC, но ще го направя при първа възможност. Обаче MVF (FRAME) има доста информация. Всичко се базира на стандарти. Това не означава, че някой е казал тук се пише А тук Б ! Повечето като мен се чудят защо е толкова сложен света на MVC и OOP . Първо за да правиш MVC задължително трябва да си запознат с OOP като цяло. Хане за думата _new +1 ще се опитвам да си създам практики за напред. Та за MVC след като човек е добре запознат с OOP не би трябвало да има проблеми при правене на проект който ползва MVC. Също така не се притеснявай ако работиш екипно нещата са подредени! Тук искам да спомена, че и аз преди няколко години направих грешката да разбера какво е $variable и да чета между редовете! Имам в предвид, че добре подготвения проект има много   инфо. В една книга ме съветваха първо да си направя рамката на тефтер, но аз чак след време разбрах колко ще ми бъде удобно това! Всъщност ако работиш в качествена фирма дори при стартиране на проект ще ти кажат как да пишеш методите, класовете, дори самите променливи! 
Пример:
Всички класове да започват с главна Буква
Всички променливи да започват с символ _$variable
Всички методи да започват с малка буква public function variable()
Само, че ти ще получиш доста солидна документация за това как трябва да бъде написан проекта и кое какво трябва да съдържа. Ако си решил да бачкаш във фирма супер! Само, че там нещата не са на това ниво и никой няма да разгледа неподреден или неправилно написан код след като един път вече ти е казано как трябва да го пишеш на хартия!
Демек повечето правят количество, а добрите сайтове търсят качество! Представи си ако един екип от програмисти прави каквото си иска какъв ще бъде проекта ;) Това е от мен.
« Последна редакция: 07 Април 2014, 22:10:45 от howto »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: MVC + OOP - психология - питане
« Отговор #7 -: 08 Април 2014, 00:45:49 »
Цитат
Първо за да правиш MVC задължително трябва да си запознат с OOP като цяло.
Пълни глупости! В тоя патърн няма нищо от строго специфичните за ооп неща.
Абстракция - не е нещо силно специфично само за ооп и няма връска с конкретния шаблон;
Капсулиране - не е необходим за МВЦ.
Полиморфизъм - Помага, но също опционално.
Наследяване  - не е необходим за МВЦ в смисъла на ооп.

JS  не е ооп а се води прототипно базиран и кво - нямали MVC?!
« Последна редакция: 08 Април 2014, 00:48:41 от echeveria »
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 5
  • Публикации: 341
Re: MVC + OOP - психология - питане
« Отговор #8 -: 08 Април 2014, 02:37:13 »
Аз ще копирам нещо. Между другото не е взето от друг сайт...
"
Преди време компютърните програми са имали съвсем ограничени потребителски и клиентски интерфейси. През 1975 софтуерът е взаймодействал с потребителя единствено посредством команден ред. Днес, програмите притежават богати графични интерфейси с прозоречен режим, реагират на мишка клав ... и т.н . Това богатство на потребителския интерфейс носи със себе си нови предизвикателства и шаблонът Модел Изглед Контролер (Model View Controller) се занимава именно с тях и спомага за създаването на по-гъвкави приложения!
Приложенията се състоят от потребителски интерфейс, бизнес-логика и модел от данни . Когато при сложни потребителски интерфейси  данните са събрани на едно място в един обект, това може да доведе до някои от следните проблеми.

Трудно е данните да се използват извън обекта.
Ако например един обект дефинира форма за въвеждане на данни от потребителя, а също и пази въведените данни от потребителя, а също и пази въведените данни, е трудно тези данни да бъдат изпратени на сървъра. Възможностите в този случай са:
или комуникацията клиент-сървър да бъде възложена на същия клас, или обектът да получи методи, които са единствената възможност за достъп до данните.

Постигането на две или повече едновременни  визуализации на един и същи данни е трудно! Може например да искате да наречете две различни графики за даден модел данни.

Ако данните са заключени във визуализацията, ще се наложи да правите тяхно копие за всяка от графиките!

Пропускам част от текста, че е много.....

ЕЛЕМЕНТИТЕ НА MVC
Шаблонът MVC, както подсказва и неговото име, е съставен от три подсистеми: модел, изглед и контролер.

МОДЕЛ

Това е елементът, съхраняващ данните, използвани от MVC.
Той може да пази само една обикновена стойност, например низ от символи, но също и данни с исключително комплексна структура. Определящите аспекти на този елемент са, че той функционира като склад за данни и, че съществува независимо от изгледа и контролера. Моделът не бива никога да съдържа референция към изгледа или към контролера.
Това е абсолютно наложително за правилно функциониране на MVC, тъй като независимостта на модела е това, което обуславя гъвкавостта на този шаблон. Ако обаче м-ла може да комуникира без да разчита на референции към някакви конкретни контролери и изгледи, той би могъл да взаймодества с всеки възможен елемент.
ИЗГЛЕД
Това е визуалната подсистема на потребителския интерфейс. Тя използва данните от модела, за да се начертае върху екрана. Изгледът може да се състои от анимация, форма за въвеждане на данни, графика, бутони и д.р, от които се нуждае конкретното приложение.
За цялостното схващане на изгледа е важно да разберете, че той се състои единствено от визуални елементи и логика, необходима за извличане на данните от модела, както и за използването на тези данни според изискванията на потребителския интерфейс .
КОНТРОЛЕР
Това е подсистемата, отговаряща за обработване на входящите данни и команди и актуализиране на модела и изгледа според нуждите. Ако моделът трябва да актализира данните си, то това действие се извършва от контролера.
ОТНОШЕНИЯТА МЕЖДУ ПОДСИСТЕМИТЕ
Всеки от елементите има свой специфичен тип отношения с останалите. Моделът трябва винаги да остава независим от изгледа и контролера. Това означава, че той не може да знае нищо за който и да било от останалите елементи, но не значи, че той не трябва да комуникира с тях. Моделът може да изпраща съобщения, когато данните му претърпят промяна, но е важно тези съобщения да бъдат изпращани без да е нужно да се знае кой ги получава. Употребата на събития позволява моделът да остане необвързан с другите подсистеми и по този наччин да увеличи степента на гъвкавост на системата като цяло.
Изгледът винаги има информация за модела. Той си комуникира с него по два начина: слуша за съобщения, известяващи за промени в данните, и извлича тези нови данни.  Изгледът никога не трябва да прави промени по модела. Всеки изглед пази референция към своя модел, но тъй като последният не притежава информация за изгледите, един-единствен модел може да партнира с два или повече изгледа.
Контролерът също има информация за модела. Тя отговаря за неговото актуализиране, когато поради действия на потребителя или възникнали системни събития това стане необходимо.
Контролерът и изгледът са много здраво обвързани в отношенията си. Въпреки, че е възможно да имате контролер, който да използва няколко изгледа, много по-често се случва те да са в съотношение "едно към едно". Изгледът съдържа всички елемени от потребителския интерфейс, чрез които потребителят взаимодества с програмата, но контролерът е този, реагира на действията на потребителя. В повечето, ако не и във всички  приложения, изгледът и контролерът са в един и същи клас. Този вариант на МVC често бива наричан имплементация Документен изглед (Doc View) на MVC.
Ключовото изискване в MVC е моделът да бъде независим обект, който не съдържа референции към изгледа или контролера. Изгледът се актуализира и преначертава върху екрана на базата на промените в модела .
"

Това мисля, че описва MVC шаблона набързо. Хората правещи 3 папки model view controller и блъскат някаква информация без правила да знаят, че си правят някаква разновидност на MVC, но това не значи, че са спазили правилата за правилно направен MVC ;) . Също така успех на хората мислещи, че могат да правят MVC шаблона с процедурен код и да навържат цялата система да работи. Тези който пишат hello world MVC естествено, че няма да срещнат никакви проблеми.
« Последна редакция: 08 Април 2014, 02:47:59 от howto »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: MVC + OOP - психология - питане
« Отговор #9 -: 08 Април 2014, 14:49:48 »
Варата в шаблони, вещици и дядо коледе не е навредил на никой. МВЦ е един от най спортите шаблони като цяло, и идеята да се смята че има ортодоксална интерпретация е смешна.
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 5
  • Публикации: 341
Re: MVC + OOP - психология - питане
« Отговор #10 -: 08 Април 2014, 15:04:50 »
Цитат
МВЦ е един от най спортите шаблони като цяло
Еч имаш много голяма база данни в главата си за това може би игнорираш детайлите. Съгласен съм като цяло с теб. Обаче не мислиш ли, че е уместно първо да се научи основата и после да се тръгне напред? При php може да се направи с процедури. Обаче след като се хвърли на някой друг език ще трябва да прочете какво представлява този шаблон на ново за да разбере силата на шаблона. Има езици, които въобще няма да му позволят да пише процедурен код. Да вземем едно CI дори. Няма как да го направи без ООП-то. Нека хората създават добри практики при правенето на шаблони защото идеята на самите шаблони е да улесни работата като цяло. Не е нужно според мен нещата да се учат по 2 пъти. Все пак ако го напише процедурно след време ще се нервира защото не го е базирал на ООП. Все пак този шаблон трябва да предложи на dev-a гъвкавост на кода.

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: MVC + OOP - психология - питане
« Отговор #11 -: 08 Април 2014, 16:36:27 »
Абе аз не точно споря с теб. Споря с идеята за имплементация на шаблоните. Според мен не трябва да се учат шаблони само по себе си и имплементацията им в даден език. Трябва да се учат проблемите и решенията им като абстрактна идея и нито грам частна имплементация, щото МВЦ ако идваш от РНР няма как да го ползваш буквално в JS. Аз например съм виждал идиотщини от сорта рнр програмист да се опитва да направи заобикаляне на асинхронната работа в node.js което е абсурд. трябва да се мисли за проблема който решава МВЦ или друг шаблон а не имплементацията според някой си.
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width: