Программирование шаблонов проектирования: фасад или нет? - PullRequest
4 голосов
/ 10 декабря 2010

Другой парень из нашей команды предоставил мне библиотеку в качестве баночки для своего веб-фреймворка.Давайте назовем этот фреймворк «фреймворк моего друга».

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

Итак, я создал класс фасада для этого класса.Моя собственная структура обращается к свойствам через мой класс фасадов.Если «Структура моего друга» изменилась, мне просто нужно изменить один класс фасада, а остальное остается прежним.Кроме того, манипулирование String выполняется внутри класса фасадов.Кроме того, класс фасадов предоставляет только необходимые свойства.Так что мой собственный фреймворк просто обращается к свойствам как обычный getter / setter.

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

Я не прав?Хотя я верю, что я прав.

Ответы [ 3 ]

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

Вы не ошибаетесь в принципе.

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

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

Обратите внимание, я просто указываю на семантическую проблему, на практике то, что вы делаете, является хорошей практикой проектирования.будущее, вам не нужно идти через неприятности.Может быть, ЯГНИ - тебе это не понадобится.

1 голос
/ 10 декабря 2010

Ваш подход звучит хорошо для меня.

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

Попробуйте ответить на вопрос: какие секреты должен скрывать этот фасад? Попробуйте опубликовать некоторые методы, которые вы хотите раскрыть, чтобы мы могли обсудить.

1 голос
/ 10 декабря 2010

Звучит как хороший дизайн для меня.

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

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

Если ваш фасад проще в использовании, возможно, вы могли бы заставить его добавить это в свою структуру, чтобы предоставить его всем остальным тоже.

...