Маршрутизатор — это образец фасада?

У меня есть этот класс маршрутизатора, но я не уверен, к какому шаблону он должен принадлежать. Кажется, это фасад или образец посредника для меня. Как вы думаете?

class Router
{
...
}

использование,

$router = new Router();

$router->get('/', function() { ... });
$router->get('foo/', function() { ... });
$router->post('foo/', function() { ... });

Но затем, кажется, говорится, что маршрутизатор является анти-паттерном, как предлагают некоторые комментаторы в этом вопрос. если маршрутизатор нарушает шаблоны, то каковы решения?

1

Решение

Маршрутизатор не сам шаблон, это всего лишь инструмент, который просто сопоставляет строку URI с известным регулярные образцы. И как только совпадение найдено, создание экземпляра контроллера должно быть обработано другим инструментом, который называется диспетчер. Таким образом, существует четкое разделение между обязанностями, таким образом придерживаясь Принцип единой ответственности.

Сам роутер не нарушает ни одного известного паттерна. Только вы можете нарушать их при написании класса маршрутизатора.

Чтобы запустить ваше приложение, вам также необходимо реализовать такие вещи, как Front Controller, Dispatcher и автозагрузчик класса PSR-0.

Что касается фасадов, то реализация вашего роутера не имеет к этому никакого отношения. Потому что фасады не предназначены для таких вещей. Тейлор называет классы фасадов, которые предоставляют услуги, это не реализация шаблона фасада.

Фасад сам по себе является просто оберткой, которая должна иметь один интерфейс для разных сред. Например, очень популярный пример реализации Facade в JavaScript

function click(elem, event, callback){
if (elem.addEventListener != undefined){
return elem.addEventListener(..);
} else if (elem.attachEvent != undefined) {
return elem.attachEvent(..);
} else {
return elem.onclick = callback;
}
}

Или может быть что-то вроде этого:

// For old PHP versions
if (!function_exists('file_get_contents')){
function file_get_contents(){
// ...
}
}

Вот что такое фасады.

И, наконец, ответить на ваш вопрос,
Я бы сказал, что вам следует перестать думать о том, как написать идеальный код, если вы не знаете, как должен работать маршрутизатор. Вам лучше начать писать то, что работает, а затем начать думать об улучшениях. В результате вы можете получить хороший и рабочий код.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]