«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как провести рефакторинг декларации зависимостей «друга»: пошаговое руководство по устранению чрезмерной взаимозависимости?

Как провести рефакторинг декларации зависимостей «друга»: пошаговое руководство по устранению чрезмерной взаимозависимости?

Опубликовано 21 ноября 2024 г.
Просматривать:176

How to Refactor a \

Как провести рефакторинг декларации зависимостей «друг»

Справочная информация

Можно столкнуться со сценарием, при котором удаление зависимости «друг» между двумя классами желательно, особенно из-за опасений по поводу чрезмерной взаимозависимости, проблем с обслуживанием и устаревших стандартов UML.

Шаг 1: Представьте аннотацию Интерфейс

Извлеките методы, предоставляемые классом «Friend», и создайте новый абстрактный интерфейс. Установите отношение зависимости от класса «друг» к интерфейсу и зависимость «вызов» от другого класса к интерфейсу.

Шаг 2. Перенесите операции в интерфейс

Переместите операции которые составляют зависимость «вызова» от зависимого класса к абстрактному интерфейсу. Сделайте интерфейс расширяющим защищенный конструктор в целях наследования и скройте ассоциацию защищенного обобщения между зависимым классом и интерфейсом.

Шаг 3. Склеиваем реализацию вместе

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

Реализация

ClassA (поставщик):

class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};

ClassAAccessor (друг):

class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};

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

  • Удаляет ненужную зависимость между классами
  • Соответствует современным стандартам UML
  • Усиливает контроль доступа, скрывая внутренние операции от общественности

Ограничения

  • Может увеличиться код сложность
  • Требуются абстрактные интерфейсы, что влияет на производительность и объем памяти
  • Представление защищенных отношений обобщения в формате UML может оказаться сложной задачей
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3