Шаблоны проектирования. Facade.

Поговорим еще об одном шаблоне, который обеспечивает гибкую структуру классов, Facade. В целом ничего нового он из себя не представляет, и он весьма и весьма понятен, но стоит упомянуть и его.

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

Обычно разработчики прячут детали внутреннего содержания системы, но возможна такая ситуация, когда трудно понять какие части использовать и какие последствия это может повлечь.

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

Но давайте возьмем упрощенный пример. Пусть есть задача получения данных о компьютерах из текстового файла, и дальнейшее создание объектов техники. Пусть выглядит так:

 

Очевидно что пользователю сложно будет пользоваться таким кодом. Ему нужно будет самостоятельно открыть документ, получить линию с записью о единице техники, парсинг этой строки на предмет извлечения характеристик, ну и далее создание объекта.

А что если мы задумаем изменить наш код и раздать новую версию всем пользователям? Пользователям это не понравится. Им придется переписывать свои клиентские приложения. А все потому что наш код и код пользователя очень жестко связан и граница практически смыта.

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

 

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

Одним словом, Facade с одной стороны прост в понимании, но с другой невероятно важен, так как в проектировании сложных систем, ориентированных на активное развитие, его роль чрезвычайно важна. Нужно помнить о разделении уровней в коде и стараться сводить к нулю смешение.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">