Подтвердить что ты не робот

В чем заключается принцип принципа разделения сегрегации?

Принцип разделения сегментов (ISP) говорит, что многие клиентские интерфейсы лучше, чем один интерфейс общего назначения. Почему это важно?

4b9b3361

Ответ 1

ISP заявляет, что:

Клиенты не должны заставлять зависеть о методах, которые они не используют.

ISP относится к важным характеристикам - cohesion и coupling.
В идеале ваши компоненты должны быть тщательно адаптированы. Это улучшает надежность кода и удобство обслуживания.

Принудительный ISP дает вам следующие бонусы:

  • Высокий cohesion - более понятная, надежная
  • Низкий coupling - улучшенная ремонтопригодность, высокая устойчивость к изменениям

Если вы хотите узнать больше о принципах разработки программного обеспечения, получите копию книга по разработке, принципам, шаблонам и практике.

Ответ 2

Сегрегация интерфейса - это "я" по принципу SOLID, прежде чем копать слишком глубоко с первым, позволяет объяснить, что означает последнее.

SOLID можно рассматривать как набор лучших практик и рекомендаций, сделанных экспертами (что было доказано ранее), чтобы обеспечить надежную основу для разработки приложений. Эти методы направлены на упрощение поддержки, расширения, адаптации и масштабирования наших приложений.

Почему мне нужно заботиться о программировании SOLID?

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

Принцип сегрегации интерфейса.

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

"Клиенты не должны принудительно внедрять ненужные методы, которые они не будут использовать"

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

enter image description here

С другой стороны, если вы должным образом применяете сегрегацию интерфейса и разделяете свой интерфейс на более мелкие подмножества, вы можете наверняка реализовать те, которые вам нужны:

enter image description here

См! Лучше! Приведение в действие этого принципа позволит вам иметь низкое сцепление, которое помогает улучшить ремонтопригодность и высокую устойчивость к изменениям. Таким образом, вы действительно можете использовать использование интерфейсов и реализовать методы, когда вам действительно нужно. Теперь рассмотрим менее абстрактный пример, скажем, вы объявили интерфейс под названием Reportable

public interface Reportable {

        void printPDF();
        void printWord();
        void printExcel();
        void printPPT();
        void printHTML();


}

И у вас есть клиент, который будет экспортировать только некоторые данные в формате Excel, вы можете реализовать интерфейс, но вам нужно будет только реализовать метод excel? Ответ отрицательный, вам придется кодировать реализацию для всех методов, даже если вы не собираетесь их использовать, это может привести к большому нежелательному коду, что затрудняет сохранение кода.

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

Ответ 3

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

Ответ 4

Одна из причин заключается в том, что наличие большого количества интерфейсов с минимальным количеством методов для каждого из них упрощает реализацию каждого интерфейса и правильное его внедрение. Большой интерфейс может быть непоколебимым. Кроме того, использование сфокусированного интерфейса в сценарии делает код более универсальным, потому что вы можете видеть, какая грань объекта используется (например, интерфейс IComparable позволяет узнать, что объект используется только для сравнения в данном сценарии).

Ответ 5

Этот принцип в основном служит близнецам.

  • Чтобы сделать код более читаемым и управляемым.

  • Способствует единой ответственности за занятия (высокая сплоченность). Конечно, почему класс должен иметь метод, который не влияет на поведение? Почему бы просто не удалить его. То, о чем идет ISP

Есть несколько вопросов, которые разработчик должен задать с проблемами ISP

  • Что достигается с помощью ISP
  • Как проанализировать уже существующий код для любых нарушений ISP.

Чтобы продолжить обсуждение, я должен добавить, что этот принцип не является "принципом" в строгом смысле, потому что при определенных обстоятельствах применение ISP к дизайну вместо повышения удобочитаемости может сделать структуру объекта нечитаемой и загромождали ненужным кодом. Вы можете заметить это в пакете java.awt.event

Больше в моем блоге: http://design-principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html

Ответ 6

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

Более подробное объяснение см. в Статья принципа сегрегации интерфейса

Ответ 7

поставщик услуг Интернета.

Основная идея ISP: Клиент не должен зависеть от методов, которые он не использует.

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

Ниже приведен пример SE для примера кода:

Принцип разделения сегрегации - программа для интерфейса

Преимущества:

  • Гибкость. В отсутствие ISP у вас есть один общий интерфейс FAT и многие его классы. Предположим, что у вас есть 1 интерфейс и 50 классов. Если есть изменение в интерфейсе, все 50 классов должны изменить свою реализацию.

    С ISP вы разделите общий интерфейс FAT на мелкие мелкие мелкие интерфейсы. Если произойдет изменение в малом гранулярном интерфейсе, будут затронуты только классы, реализующие этот интерфейс.

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