Внутренний и защищенный в частном api - PullRequest
1 голос
/ 14 декабря 2010

Я работаю в команде разработчиков из 12 человек, и мы создаем разумный набор API-интерфейсов, которые мы используем исключительно на собственной основе.Обычно все классы и интерфейсы общедоступны, потому что так они и делают.Я часто рассматривал ценность создания некоторых конструкторов внутренними, чтобы потребители API (хотя и внутренние) использовали фабрику или какую-то другую причину, о которой я сейчас не могу думать.что вы и ваша команда практикуете?

Как это влияет на ваши юнит-тесты?Считаете ли вы, что это нормально для модульного тестирования класса через его фабрику, или вы получаете доступ к конструктору через что-то вроде PrivateObject?

1 Ответ

6 голосов
/ 14 декабря 2010

Ответ - да;над моим текущим проектом работает ровно один разработчик - я - и все же я по-прежнему использую видимость и другие модификаторы доступа, а также, при необходимости, более сложные шаблоны проектирования.И вот почему:

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

  • Код должен быть самодокументированным.Класс или член класса, помеченный как внутренний, означает, что это, вероятно, должно быть;если все общедоступно, вы не знаете, есть ли что-то, чего вы не должны касаться при взаимодействии с объектом.Опять же, ваш пациент сидит на операционном столе, и неожиданно появляется новый парень, хватает печень и говорит: «Эй, что это делает?».Объекты должны пожать друг другу руки, получить указание сделать что-то и отпустить, чтобы сделать это, и функция их печени никого не волнует, кроме них.

  • Код должен поддерживатьсявашим потомством.Это связано с первыми двумя правилами, но, по сути, кто-то должен иметь возможность открыть вашу кодовую базу, найти точку входа и проследить через базовый поток выполнения, при этом все время глядя на объекты, используемые по пути, и определяя их общую форму и функцию.,Вернемся к нашему пациенту на операционном столе, скажем, через пять лет кто-то входит в эту сцену;парень раскололся на столе с 50 парнями в его кишках.Это не будет похоже на любой вежливый социальный обычай, который он когда-либо видел;это, вероятно, больше всего будет похоже на ритуальную человеческую жертву, и первым инстинктом большинства людей при столкновении с такой ситуацией является бег.

Однако оборотная сторона медали заключается в том, что дизайнШаблон, реализованный ради самого себя, как правило, очень плохая вещь.После того, как вы закончили колледж и получили свою первую работу, никого на самом деле не волнует, что вы знаете, как реализовать шаблон Стратегии, и вам не следует делать это при первой возможности просто сказать, что вы это сделали.Каждый шаблон имеет ряд обстоятельств, в которых он применяется.Если бы вы были врачом, выполнили бы вы ангиопластику следующему пациенту, который вошел, просто чтобы сказать, что вы смогли это сделать?

...