Разделение логики и представления(не MVC)

Strelockk

Новичок
Начитался я всего, что только можно на тему MVC, сделал для себя некоторые выводы, например, что MVC как паттерн лучше использовать для больших проектов. Я занимаюсь мелкими проектами и не хочу применять громоздкую архитектуру MVC паттерна для разделения логики и представления. Поделитесь способами реализации сабжа без использования таких паттернов как MVC и ему подобных.

Заранее спасибо!
 

С.

Продвинутый новичок
MVC не паттерн, а доктрина. У нее нет четко определенной архитектуры и ее можно использовать где угодно и как угодно. Поэтому отделение представления от логики и при этом не MVC -- это нонсенс.
 

Strelockk

Новичок
wiki диктует обратное, что MVC как раз таки шаблон проектирования. Я имею ввиду не то как она(?) трактуется в общем варианте, а в классическом, который используется во многих фреймворках, где архитектура достаточно похожа.

Забыл добавить, что в вариантах не ограничиваюсь рамками ООП. Интересуют и процедурные подходы
 

Strelockk

Новичок
Да, прошу прощения :)

По теме: неужели сабж так тесно зажат в рамки MVC и ООП ?
 

С.

Продвинутый новичок
Никуда он не зажат. Это ты сам его зажал своими представлениями.

Шаблон проектирования и шаблон программирования -- это совсем разные вещи. Проектирование оставляет гораздо больше свободы действий даже в рамках шаблона.
 

Strelockk

Новичок
Ну скажем не я его зажал, а обилие информации, которая представляет это в подобных "рамках", из-за чего и создается стереотип. Да и я не говорил ничего про программирование. Ответ получился не менее абстрактнее самого вопроса, ладно спасибо за внимание, пойду дальше думать :)
 

AmdY

Пью пиво
Команда форума
что за сексуальная фантазия о громоздком MVC
PHP:
<?php
// модель
function news_get_list() {
    return $GLOBALS['db']->fetchAll('SELELECT * FROM news');
}
// контроллер
$news = news_get_list();
//вид
foreach($news AS $v) { 
    echo '<p>', $v['title'],'</p>';
} ?>
 

Strelockk

Новичок
:)) эта фантазия навязана наверное раздутыми до безобразия фреймворками и построенными на их основе проектами =)) видимо я не с того конца начал вникать в тему.... спасибо
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
сначала изучи какие-то современные фреймворки, сделай пару проектов, потом говори об их раздутости

изначально концепция называлась N-Tier, потом для унификации ее стали называть mvc, по аналогии с приложениями gui
сколько выделить слоев и какие - сугубо индивидуальное решение
никакого жесткого MVC нигде нет
сейчас у меня такие слои: база, ActiveRecord, модель, контроллер, view, js, веб-сервер
 

manyrus

Новичок
Существуют, конечно, и другие паттерны. Их называют шаблонами корпоративных приложений. Один из самых лёгких паттернов - Page Controller. Заимствован они из java и первым был описан Мартином Фаулером в его известной книжке. Хоть немножко и стирается грань между контроллером и представлением, но она есть :).
Описание паттерна: http://read-php.ru/shablony-korporativnyx-prilozhenij-php/realizaciya-shablona-page-controlle.php .
 

AmdY

Пью пиво
Команда форума
manyrus
если бы вы давали ссылку на оригинал. то нашли бы там же в паттернах оба: фронт контроллер и мвц. но фронт контроллер решает другую задачу - определяет какой контроллер и с какой цеплчкой должен быть вызван, собственно эта часть самая неприятная в большинстве фреймворков.
 

manyrus

Новичок
AmdY, этот паттерн взят из книги М. Зандстры "PHP: объекты, шаблоны и методики программирования". А вот причём здесь front controller? Он обеспечивает одну точку входа, а тут, как видите, их множество. Но если вы говорите про паттерн Мартина Фаулера, то то что вы написали это да.
P.s.: м.б. мы запутались, т.к. у Фаулера одна реализация, а у Зандстры другая :).
 

AmdY

Пью пиво
Команда форума
manyrus
ой, я лопухнулся с горизонтальным чтением и действительно попутал паттерны, прочёл ваше как Front Controller.
Причём у Зантры Page Controller делает 1 в 1 то, что я описал в примере MVC, а задачу Front Controllera выполняет веб сервер, это и есть наш php-ный MVC.
PHP:
<?php
// модель
function news_get_list() {
    return $GLOBALS['db']->fetchAll('SELELECT * FROM news');
}
// контроллер
$news = news_get_list();
//вид
foreach($news AS $v) { 
    echo '<p>', $v['title'],'</p>';
} ?>
---------------------------------
<?php
try {
    $venues = woo_domain_Venue::findAll();
} catch (Exception $e) {
    include( ‘error.php’ );
    exit(0);
}
// Стандартная страница расположена ниже
?>
<?php foreach ($venues as $venue) { ?>
    <?php print $venue->getName(); ?> <br />
<?php } ?>
p.s. Прочитав главу до конца, я понял, почему новички так боятся ООП, автор начал хорошо, а закончил так что паттерн превратился в монстра, я даже с трудом улавливаю что он делает. Но точно вижу, что стало хуже чем было в минимальном варианте.
 

manyrus

Новичок
AmdY, вот, я-то думаю, что со мной что-то не то. Да, можно сказать и php"шный mvc, Вы правы :).
Strelockk, используй его чисто в маленьких проектах, т.к. расширять его будет тяжко.
 

Strelockk

Новичок
Спасибо большое за советы, кстати начал вчера читать Зандстра, для общего развития :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
> закончил так что паттерн превратился в монстра, я даже с трудом улавливаю что он делает
в примерах бесцельно используются необъявленные классы - или плохая статья, или вырвана из контекста

меня забавляет, как все статьи про mvc в php "забывают" про веб-сервер, который и контроллер, и отображение, и чем серьезней сайт - тем серьезней связь с кодом, это не прозрачный инструмент вроде tcp-драйвера ОС
никто так и не сделал адекватную теоретическую концепцию для веб
 

AmdY

Пью пиво
Команда форума
grigori
там глава из книги. автор этакий "говорок", говорит и описывает хорошо, а вот когда доходит до кода, то катастрофная катастрофа. даже именования из разряда фиг пойми как woo_domain_Venue::findAll();
 

fixxxer

К.О.
Партнер клуба
Для проектов, не переросших хотя бы 10000 LOC, можно спокойно сделать терминологическую подмену Page Controller -> View Controller, забыть про MVC, и все делать в рамках
(Front Contoller)
^
View Controller <-> Model
^
Template.
 
Сверху