Интерфейс контроллера. Ваше ИМХО.

Интерфейс контроллера. Ваше ИМХО.

Если на минутку забыть о dependency lookup инверсии, какой вид, по вашему мнению, должен иметь максимально унифицированный и гибкий, но в то же время лаконичный интерфейс контроллера? Хочется услышать много мнений, разных и не заплесневелых :).
 

AmdY

Пью пиво
Команда форума
Zend_Controller_*, только немного упрощённый
 
Нельзя ли сразу приводить примеры этих интерфейсов, хотя бы в псевдо-коде? Не охота копошится в незнакомых фреймворках.

-~{}~ 06.08.07 10:55:

Zend_Controller уже посмотрел, но неужели больше мнений нет :D?
 

syfisher

TDD infected!!
mishco Дело в том, что Контролле - это роль, а не класс. То что люди реализуют эту роль в рамках одного класса - это их выбор, а правильно это или неправильно - сказать сложно.

У нас в Limb3 Front Controller реализован через цепочку фильтров, поэтому у него есть только метод process(), а у фильтров run($chain).

А PageController, который в принципе - лишь команда, содержит метод perform(). Все зависимости контроллера в целом управляются через Toolkit (тот касамый dependency lookup). Остальные методы PageController (в различных классах) - это syntax sugar, которые делают жизнь приятнее. ;)
 
syfisher
FrontController вообще не рассматриваем. Вобщем что такое "роль" не совсем но понятно :), тоесть вы кроме "точки входа" ничего в контроллере не предусматриваете?.
 

syfisher

TDD infected!!
mishco Роль - в данном случае это набор ответственностей. Что должен сделать контроллер - инициализировать среду, разобрать запрос, проверить на кеш, изменить Модель, отрендерить Отображение - это и есть роль Контроллера.

Исходя из опыта, мы пришли к выводу, что Контроллер нельзя делать монолитным, иначе в каждом нестандартном случае придется пилить его напильником. Не могу сказать, что сейчас мы на 100% довольны, то расложение монолитного контроллера на составляющие дало больше плюсов, чем минусов.

Кстати, почему это FrontController не рассматриваем? Я подразумеваю под ним набор операций, характерных для большинства запросов к приложению: старт сессии, полностраничное кеширование, система прав доступа, разбор запроса и т.д.
 
syfisher
Не рассматриваем в этом топике, потому что это тема для отдельного :).

-~{}~ 06.08.07 11:47:

syfisher
Ок, спасибо за детальное изложение. Становится очевидным, что ничего лучше lookup'а не придумаешь..

-~{}~ 06.08.07 13:32:

Mr_Max
Я хочу что-бы желающие поделились _своими_ соображениями. Если бы мне нужны были немые исходники чего-то большого (но не значит хорошего), я бы сразу туда и пошел. Кроме того меня интересует мнение аудитории именно этого форума :p
 

dark-demon

d(^-^)b
$registry= array(
'db'=>'mysql://log:pass@localhost/db/',
'post'=>$_POST,
...
);

$obj_controller= new Obj_Controller ($registry);
$obj_controller->go ();
func_controller ($registry);
inc ('controller.inc', $registry);

и т п
 

AmdY

Пью пиво
Команда форума
а про цепочки фильтров стоит задуматься, очень полезная штука, только уровень входа в такой фреймворк выше.
 
AmdY
Я не совсем понимаю как вы их используете в фронт контроллерах? Я использую цепочку фильтров например для url реврайтера и т.п. Может мы про разные цепочки говорим :)?
PHP:
	class ChainFilter
	{
		public function __construct($instanceof = 'Filter')
		{
			$this->filterCollection = new SplObjectStorage();
			$this->instanceOf = $instanceof;
		}
		public function attachFilter(Filter $object)
		{
			if ($object instanceof $this->instanceOf)
			{
				$this->filterCollection->attach($object);
			}
			else
			{
				throw new InvalidArgumentException();
			}
		}
		public function detachFilter(Filter $object)
		{
			if ($object instanceof $this->instanceOf)
			{
				$this->filterCollection->detach($object);
			}
			else
			{
				throw new InvalidArgumentException();
			}
		}
		public function applyChain($mixed)
		{
			foreach ($this->filterCollection as $filter)
				$mixed = $filter->apply($mixed);
			return $mixed;
		}
		private $filterCollection;
		private $instanceOf;
	}
Что дальше?. Расскажите, если не лень. Просто интересно ^^...

-~{}~ 07.08.07 15:45:

Ну давайте еще побеседуем, почему все молчат :'(.
 

HraKK

Мудак
Команда форума
Потому что все прониклись истинным Дао, и перешли на мой контролер
 

HraKK

Мудак
Команда форума
Куда мне с вами, тягаться... Я в сторонке покурю.
Exeption... abstract ... instanceOf...
Это сьедает мой моск. Я как то по старинке switch там..
 
HraKK
Ну как-то подробнее можно изложить? Мы тут чтоли "тягаемся"? Мы ищем варианты, старая школа тоже хороша :).
 

AP

Новичок
mishco, посмотри как реализован ChainFilter в том же Limb'e...
ЗЫ а этот ChainFilter ты сам придумал?
 
AP
Гггг... Ну я же спрашиваю...
Посмотрел я limb'овский, возникло еще больше вопросов чем было до этого. В общем стало ясно, что йа криветко :D.
 
Сверху