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

В чем разница между неприемлемой близостью и завистью к объекту?

Оба запаха описаны в книге Фаулера "Рефакторинг".

Я знаю значения этих запахов, кратко:

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

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

Может ли кто-нибудь объяснить основное различие между этими двумя запахами?

4b9b3361

Ответ 1

Вы описали его довольно хорошо.

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

Особенность Envy - это когда метод использует больше публичных функций другого класса, чем сам по себе. Не так уж плохо, потому что (предполагая, что общедоступные функции другого класса безопасны в использовании), это не приведет к ошибкам. Но это приводит к запутыванию дизайна между двумя классами. Исправить, добавив публичные функции более высокого уровня (лучше абстрагированные) к завистному классу или переместив методы из завистливого класса в завитый класс, чтобы у завистливого класса было меньше методов для вызова.