Чем больше деталей я вставляю в интерфейс, тем меньше он используется повторно. С другой стороны, чем меньше деталей, тем более эфирным и бесполезным оно становится. Есть ли стандартный набор рекомендаций о том, как взвесить это для различных ситуаций?Определите, каким должен быть мелкозернистый интерфейс?
ответ
Я только что стал соавтором статьи о детализации компонентов (размер) компонентов, и один из наших выводов заключается в том, что нет простого способа определить «что правильно». Нет, нет стандартного набора рекомендаций.
Я могу дать вам несколько академических ссылок на эту тему только в случае, если вы заинтересованы: (ред.)
- Genero, М., Piattini, М., Калеро, С.: Metrics для концептуальных моделей программного обеспечения. Императорский колледж-пресс, Лондон, Великобритания (2005)
- Шеховцов В.А. О концептуализации качества. документ, представленный на Dagstuhl семинара по концептуальному моделированию, 27-30 апреля 2008 (препринт на сайте конференции) (2008)
Рассмотрит человеческий геном как класс.
Каждый экземпляр (объект ячейки) имеет для него все функции генома. (Хотя не все объекты ячейки имеют доступ ко всем функциям, за исключением, возможно, стволовых клеток).
Я воспитываю этот момент, потому что видел много экземпляров одиночных классов, пытающихся выполнить множество функций, вместо того, чтобы иметь несколько классов, каждый из которых выполняет одну функцию.
Это эквивалентно песчинке с инструкциями, закодированными в нем, чтобы построить замок. Для разработки ошибок эволюция принесла пользу миллиардам лет. У инженеров просто нет возможности или времени для этого.
Ну, мы * не * "в конце" эволюции , :-) Есть еще «ошибки», и эволюция все еще работает ... Я хочу сказать ... что вы имеете в виду? – CesarGon
Дело в том, что многие дизайнеры решают налить кухонную раковину в свои классы, и в итоге они становятся слишком зернистыми. IE, grain_of_sand.build_castle() – dar7yl
Я никогда не утверждал, что все ошибки были вне генетики. У Natural Selection было много времени, чтобы отсеять вредные ошибки и маскировать не очень критические. – dar7yl
Я большой поклонник принципов SOLID. «Я» в SOLID приводит меня к убеждению, что клиенты не должны принуждать к реализации интерфейсов, которые им не нужны или не используют. Другими словами, если у вас есть абстрактный класс или интерфейс, то разработчику не следует принуждать к реализации частей, которые им не нужны.
Рэй Хьюстон написал хорошую статью об этом (глядя на поставщика членства) here.
- 1. Каким должен быть интерфейс для наблюдения Фаулера?
- 2. Каким должен быть ключ?
- 3. Каким должен быть ex.class здесь?
- 4. Каким должен быть тип переменной?
- 5. Каким должен быть мой UUID?
- 6. backbone.js: Каким должен быть вид?
- 7. Каким должен быть мой объектив Objective-C?
- 8. Каким должен быть тип данных удаленных полей?
- 9. Каким должен быть тип возврата clone()?
- 10. Каким должен быть размер MPMediaItemPropertyArtwork в MPNowPlayingInfoCenter?
- 11. Каким должен быть этот байт-код ActionScript?
- 12. Каким должен быть второй параметр CreateProcess?
- 13. Каким должен быть эта необъявленная переменная?
- 14. Как мы решаем, каким должен быть объект
- 15. Каким должен быть путь к файлу .gitconfig?
- 16. Каким должен быть собственно форматир jqgrid?
- 17. Каким должен быть охват теста поставщика пакта?
- 18. Каким должен быть тип результата этой функции?
- 19. Каким должен быть алгоритм приведенного ниже оператора?
- 20. Каким должен быть тип возврата следующего метода?
- 21. Каким должен быть правильный XML xpath?
- 22. Каким должен быть баланс загрузки Docker Swarm?
- 23. Каким должен быть файл порта Postgres?
- 24. Каким должен быть тип данных для этого?
- 25. Каким должен быть динамический веб-сайт?
- 26. Каким должен быть мой новый язык кодирования?
- 27. Каким должен быть мой LESS @import путь?
- 28. , каким должен быть переход в CSS3
- 29. Каким должен быть шаблон регулярного выражения
- 30. Каким должен быть «блок» при модульном тестировании?
+1 См. Также http://stackoverflow.com/questions/427659/going-bananas-with-loose-coupling-and-dependency-injection –