Фронтальный контроллер против фасадного рисунка

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

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

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

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

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

    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 2.0? Я специально рассматриваю архитектуру обслуживания в главе 18. (У меня есть версия Beta 2)

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

Ответ 1

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

См. эти ссылки для кратких пояснений:

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

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

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

И чтобы ответить на ваши вопросы относительно AppArchGuide: Нет, это не правильно.

Ответ 2

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

Образец шаблона, напротив, представляет собой шаблон дизайна (он используется для структурирования определенной функциональности вашего приложения [модуля], и не создает структуру для всего вашего приложения).