Уровень косвенности решает каждую проблему - PullRequest
35 голосов
/ 14 ноября 2008

Что означает выражение «Уровень косвенности решает каждую проблему» в информатике?

Ответы [ 7 ]

58 голосов
/ 14 ноября 2008

Обычно это означает, что, увеличив уровень абстракции, можно упростить понимание / решение проблемы.

Будьте осторожны со своими абстракциями, хотя, как я слышал, полная цитата: «Вы можете решить любую проблему с другим уровнем косвенности, за исключением проблемы слишком большого количества уровней косвенности».

10 голосов
/ 07 июля 2009

Из книги Красивый код :

Все проблемы в информатике могут быть решены с помощью другого уровня косвенности ", - известная цитата, приписываемая Батлеру Лэмпсону, ученому, который в 1972 году представил современный персональный компьютер.

Хотя это противоречит Википедии , которая приписывает фразу Дэвиду Уилеру.

4 голосов
/ 20 апреля 2017

Сначала мы должны понять, что означает Добавление уровня косвенности .

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

Например, если бизнес нуждается в следующем: «Мы должны решить, какой размер IP-блока приобрести, чтобы обеспечить IP-адресацию для всех наших сайтов».

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

Сегодня IP-адрес означает, кто вы есть, когда вы входите в систему и где вы находитесь.

LISP использует уровень косвенности для решения указанной выше проблемы маршрутизации.

Это происходит с некоторыми затратами:

  • Теперь должен существовать новый сервер с поддержкой LISP для сопоставления адресов с сайтами

  • Требуются два пространства имен (одно для Location, другое для ID)

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

  • Устранить нумерацию сайтов при добавлении нового блока

  • Уменьшение размера таблиц маршрутизации

  • Интернет-провайдер может вносить изменения (перемещение сайтов с одного хоста на другой)

  • Сохраняет адресное пространство IPV4 (адресное пространство локатора не назначено хостам)

  • С LISP интернет-провайдер может выделять меньше адресов на сайт

На рисунке ниже показан новый слой косвенности:

enter image description here

LISP решает проблему, добавляя новый слой с косвенностью и упрощает некоторые вещи, но не совсем проще. Это отличается и во многих отношениях лучше.

4 голосов
/ 19 марта 2014

Следствие Кевлина Хенни звучит так: «... за исключением проблемы слишком большого количества слоев косвенности».

3 голосов
/ 14 ноября 2008

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

Вы разбиваете проблему на несколько слоев:

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

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

2 голосов
/ 31 октября 2009

Такая очень важная концепция и так мало ответов здесь. Как правило, каждая представленная проблема может быть решена не обязательно путем прямой корректировки кода, а путем применения некоторого прокси (забудьте определение шаблона) в некоторой форме. Перехват & | инструментарий событий сильно недооценен.

0 голосов
/ 14 декабря 2016

Эта цитата очень широка в своем значении. Ключ к пониманию - сосредоточиться на слове «проблема». Проблемой может быть проблема программирования / ошибка, переводящая мировую сущность в ее эквивалентный вычислительный компонент, связанный с затратами на вычислительное решение. Допустим, вы пытаетесь решить проблему с затратами на разработку чего-то самостоятельно, возможно, вы захотите обратиться к другим специалистам, которые сделают эту работу для вас намного дешевле во времени и деньгах. Это еще одно использование косвенного обращения

...