Обертывание реализации более абстрактным методом - PullRequest
0 голосов
/ 19 июня 2020

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

Итак, в настоящее время я немного читаю (Чистый код Роберта C Мартина) , и я наткнулся на то, чего не понимаю.

Эта цитата была написана Роном Джеффрисом, автором книги «Экстремальное программирование»

«После многих лет выполнения этой работы (кодирования) мне кажется что все программы состоят из очень похожих элементов. Одним из примеров является «поиск вещей в коллекции». Мы часто обнаруживаем, что нам нужен конкретный элемент из этой коллекции, когда я обнаруживаю, что это происходит, Я часто оборачиваю реализацию в более абстрактный метод или класс.

Что Джеффри имеет в виду, выделив жирным шрифтом раздел

1 Ответ

1 голос
/ 19 июня 2020

Скажем, например, у вас есть метод, который просматривает коллекцию Object X и возвращает один на основе ключевого поля.

В другом месте вашего кода у вас есть другой метод, который просматривает коллекцию Object Y и возвращает единицу на основе ключевого поля.

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

В качестве альтернативы вы можете ввести абстрактный базовый класс как в класс X, так и в класс Y. Теперь они оба реализуют метод поиска, как определено в абстрактном базовом классе. Вызов поиска теперь имеет общий c и может использоваться во всем вашем коде. Найти в коллекции теперь является общим c в вашем коде.

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

Это дает несколько преимуществ:

  • Код более читабелен
  • Изменения в поведении, которые распространяются по всему вашему коду, нужно делать только в одном месте
  • Использование кода упрощено, так как общие операции выполняются одинаково.
...