Это перевод
Code in the Language of the Domain. Автор: Dan North.
Из "
97-ми вещей, которые должен знать каждый программист".
Представьте себе два исходных кода. В первом вы видите что-то подобное:
if (portfolioIdsByTraderId.get(trader.getId())
.containsKey(portfolio.getId())) {...}
Вы чешете затылок, пытаясь догадаться, что может делать этот код. Выглядит как взятие ID из объекта trader и использование его для получения другого ID, после чего – поиск еще одного ID из объекта portfolio... Почесывание затылка почему-то не помогает. Вы ищете определение portfolioIdsByTraderId и находите следующее:
Map<int, Map<int, int>> portfolioIdsByTraderId;
Постепенно вы выясняете, что этот код делает что-то похожее на выяснение того, имеет ли трейдер доступ к портфелю акций. И конечно же, этот (или похожий на него) фрагмент кода будет повторяться везде, где будет требоваться выяснить, есть ли у трейдера доступ к портфелю.
А в другом исходном коде вы находите вот такую строчку:
if (trader.canView(portfolio)) {...}
И никакого почесывания затылка не требуется. Вам не нужно знать подробности, что у этой функции внутри. Вероятнее всего, там будет подобное приведенному выше фрагменту, но это уже дело trader, а не ваше.
А теперь скажите, с каким кодом вы бы предпочли работать?