Чем больше деталей я добавляю в интерфейс, тем меньше он пригоден для повторного использования. С другой стороны, чем меньше деталей, тем более бесполезным и бесполезным кажется это. Есть ли стандартный набор рекомендаций, как это взвешивать в различных ситуациях?
Определите, насколько детализированным должен быть интерфейс?
Ответы (3)
Я только что стал соавтором статьи о детализации (размере) компонентов, и один из наших выводов состоит в том, что не существует простого способа определить, «что правильно». Так что нет стандартного набора рекомендаций.
Я могу дать вам несколько академических справок по этой теме, если вам интересно:
- Дженеро, М., Пиаттини, М., Калеро, К. (ред.): Метрики для концептуальных моделей программного обеспечения. Imperial College Press, Лондон, Великобритания (2005)
- Шеховцов В.А. О концептуализации качества. доклад, представленный на семинаре по концептуальному моделированию в Дагштуле 27-30 апреля 2008 г. (препринт на веб-сайте конференции) (2008 г.)
Я большой поклонник твердых принципов. «Я» в SOLID наводит меня на мысль, что клиентов не следует заставлять реализовывать интерфейсы, которые им не нужны или которые они не используют. Другими словами, если у вас есть абстрактный класс или интерфейс, то разработчика не следует заставлять реализовывать части, которые им не важны.
Рэй Хьюстон написал об этом хорошую статью (глядя на поставщика членства) здесь.
Рассмотрим геном человека как класс.
Каждому экземпляру (объекту клетки) доступны все функции генома. (Хотя не все клеточные объекты имеют доступ ко всем функциям; кроме, возможно, стволовых клеток).
Я поднимаю этот вопрос, потому что видел много экземпляров отдельных классов, пытающихся выполнять множество функций, вместо того, чтобы иметь несколько классов, каждый из которых выполняет одну функцию.
Это эквивалентно песчинке с закодированными в ней инструкциями по строительству замка. Эволюция потратила миллиарды лет на исправление ошибок. У инженеров просто нет ни возможностей, ни времени для этого.