Определите, насколько детализированным должен быть интерфейс? - PullRequest
4 голосов
/ 27 февраля 2010

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

Ответы [ 3 ]

2 голосов
/ 27 февраля 2010

Я большой поклонник принципов SOLID. «Я» в SOLID заставляет меня поверить, что клиенты не должны принуждаться к реализации интерфейсов, которые им не нужны или не используются. Другими словами, если у вас есть абстрактный класс или интерфейс, то реализации не следует заставлять реализовывать части, которые им не нужны.

Рэй Хьюстон написал хорошую статью об этом (глядя на поставщика членства) здесь .

0 голосов
/ 27 февраля 2010

Рассматривайте геном человека как класс.

Каждый экземпляр (клеточный объект) имеет в своем распоряжении все функции генома. (Хотя не все клеточные объекты имеют доступ ко всем функциям; кроме, возможно, стволовых клеток).

Я поднимаю этот вопрос, потому что я видел много случаев, когда отдельные классы пытались выполнять много функций вместо нескольких классов, каждый из которых выполнял одну функцию.

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

0 голосов
/ 27 февраля 2010

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

Я могу дать вам пару академических рекомендаций по этому вопросу на случай, если вам интересно:

  • Genero, M., Piattini, M., Calero, C. (eds.): Метрики для концептуальных моделей программного обеспечения. Imperial College Press, Лондон, Великобритания (2005)
  • Шеховцов В.А .: О концептуализации качества. документ, представленный в Dagstuhl Семинар по концептуальному моделированию, 27-30 апреля 2008 г. (препринт на сайте конференции) (2008)
...