2016-08-22 7 views
1

Я прошу себя, если шаблон фасада нарушает принципы SOLID, и если сам шаблон является Anti-Pattern.Нарушает ли шаблон фасада принципы SOLID?

ОБНОВЛЕНО

Мои мнения:

  • SRP нарушается, когда вы не просто вызывать методы непосредственно, но делать такие вещи, как сделок, лесозаготовительной, обработка ошибок (Что видели много раз). Даже при вызове других методов я сомневаюсь.
  • OCP нарушается, потому что вы будете добавлять больше методов фасада

  • LSP/ISP нарушается, потому что потребитель/клиент имеет зависимость, которая будет иметь слишком много способов, которыми клиент не нуждается.

  • DIP, по моему мнению, не нарушается, если сам интерфейс только раскрывает абстракцию или DTO.

SOLID в целом, на мой взгляд, о маленьких, стабильной и тем самым компонуемых интерфейсов.

фасад имеет тенденцию быть противоположным большой и не стабильно.

+0

Вы имеете в виду все SOLID принципы ?? или какой-то конкретной? –

+0

Я бы сказал, SRP, Liskovk и интерфейс сегрегации. – Rookian

+1

В общем, я сам вижу нарушение OCP. И вы можете отнестись к классу Facade, как к нарушению SRP. Остальная часть вашего вопроса может быть в значительной степени специфичной для реализации. Не могли бы вы, например, рассказать, где это нарушает эти принципы? или ссылку определенной реализации, которую вы нашли? –

ответ

1

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

Пример:

public class Bulb{ 

    public void on(){ 
     //logic to turn on the bulb. 
    } 

} 

public class Room{ 

    private Bulb bulb; 

    public void lightUp(){ 
     this.bulb.on(); 
    } 
} 

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

Итак, вернитесь к своему вопросу, если мы возьмем СОЛИДНЫЕ принципы один за другим.

  1. SRP: Вы должны думать, что класс обертки нарушает этот принцип, потому что он выполняет больше, чем один долг. Но, с другой стороны, он просто призывает некоторых других сделать их, а не выполнять реализацию с помощью обертки. В любом случае эта мысль может быть очень личной.
  2. OCP: Определенно да, если вы добавляете еще несколько подсистем/функций.Тем временем вы можете использовать некоторые современные рамки привязки к реализации, чтобы избежать нарушения OCP в этой ситуации.
  3. LSP: В общем, я не нашел. Но могут быть ситуации, специфичные для реализации, а не шаблон.
  4. ISP: То же, что и LSP.
  5. DIP: То же, что и LSP, ISP.

И о рассмотрении Фасад как анти-шаблон (Cons фасада),

  1. Можно видеть, это увеличивает затраты на техническое обслуживание. Для некоторых изменений вам необходимо изменить реализацию подсистем (ы) + соответствующие вызовы обертки.
  2. Подсистемы плотно соединены с Wrapper.
  3. Это какой-то процедурный и немного от объектной ориентации.

Все еще выбор использования фасада (многие образцы) был бы индивидуальным вкусом.