Фронт-контроллер против фасада - PullRequest
12 голосов
/ 08 мая 2009

Хорошо, я немного поискал в Интернете и нашел эту ветку, но она все еще не совсем прояснила ее для меня.

В чем конкретно разница между шаблоном переднего контроллера и шаблоном фасада?

Насколько я понимаю, пока: Шаблон Façade не содержит никакой бизнес-логики, а просто централизует доступ к нескольким объектам.

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

Чтобы понять это, означает ли следующий упрощенный фрагмент псевдокода, что drawLine - это Фасад для упрощения преобразования координат в точки и последующей реализации метода рисования, который фактически выполняет эту работу?

    private void drawLine(Int32 StartX, Int32 StartY, Int32 EndX, Int32 EndY)
    {
        Point Start = new Point(StartX, StartY);
        Point End = new Point(EndX, EndY);

        Draw(Start, End);
    }

Может ли Фасад вызывать нижние уровни вашего приложения или это просто централизованный доступ ко многим компонентам на одном уровне?

Насколько я понимаю, фронт-контроллер координирует весь процесс вызова функции.

Пример. Фронт-контроллер проверяет данные и затем решает, какое действие предпринять. Затем он будет компилировать данные для каждого последующего вызова классов более низкого уровня, пока не получит подходящий ответ, который может быть предоставлен вызывающей системе.

Я думаю, что мое понимание шаблона Фасада неверно или слишком упрощенно. Пожалуйста, поправьте меня, если я ошибаюсь.

Если мое понимание этого правильное, то не имеет ли смысла изменять фасад приложения в Front Controller в Microsoft Application Architecture Guide 2.0 ? Я специально смотрю на архитектуру сервиса в главе 18. (хотя у меня есть бета-версия 2)

Обновление: Спасибо за отличный ответ Руна. Почему вы говорите, что неправильно менять Фасад на Фронт-контроллер? Я большой поклонник Front-контроллера, потому что он держит все вещи более низкого уровня чуть более под контролем. Так что, хотя это может не иметь БОЛЬШЕ смысла, было бы совершенно неправильно делать это? Если да: почему?

Ответы [ 2 ]

15 голосов
/ 08 мая 2009

Шаблон Front Controller определяет один компонент, который отвечает за обработку запросов приложений. Часто используется как «узкое место» для (например) передачи запросов через каналы для консолидации стандартного поведения, которое необходимо выполнять каждый раз.

См. Эти ссылки для кратких объяснений:

Фасад, с другой стороны, скорее используется для обёртывания других методов / сервисов, чтобы обеспечить унифицированный интерфейс, скрыть сложность или уменьшить зависимость от внешних систем (Пример на уровне защиты от коррупции DDD: http://www.goeleven.com/blog/entryDetail.aspx?entry=168), и т. Д.

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

См. Например: http://en.wikipedia.org/wiki/Facade_pattern

И ответить на ваши вопросы, касающиеся AppArchGuide: Нет, это не правильно.

7 голосов
/ 13 декабря 2010

Шаблон Front Controller - это архитектурный шаблон (он накладывает архитектурную структуру на ваше приложение).

Шаблон Façade, напротив, представляет собой шаблон проектирования (он используется для структурирования определенной части функциональности вашего приложения [модуля] и не навязывает структуру всему вашему приложению).

...