Выполняет следующие зацепка для написания рамки на вершине стека технологий?

Мне нравится твердый, и я стараюсь использовать и применять его, когда я'м развивается. Но я могу'т помочь, но чувствую, как будто сплошная подход превращает ваш код в 'базы' код - код, т. е. вы бы дизайн при создании фреймворка или библиотеки для других разработчиков, чтобы использовать.

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

Если пользователь просто хочет, чтобы приложение, чтобы сделать X и y вещи, есть ли смысл следовать твердым и добавить в целую кучу точек входа абстракции, когда вы Don't даже знаю, если это даже действительную проблему для начала? Если вы добавляете эти точки входа абстракции, вы на самом деле выполняют все требования пользователей, или создавая основу поверх существующей базы и технологий стека, чтобы сделать будущие дополнения легче? В этом случае вы служите интересам заказчика или застройщика?

Это то, что кажется распространенным в Java-мире предприятия, где он чувствует себя, как будто вы'вновь проектировании своего собственного фреймворка на J2EE или весна так, что она'ы лучший интерфейс для разработчика, вместо того чтобы сосредоточиться на интерфейс для пользователя?

Комментарии к вопросу (7)

Ваши наблюдения правильные, твердые принципы ИМХО сделано с библиотеки или базы кода в уме. Когда вы просто следите за всеми их слепо, не спрашивая, имеет ли смысл или нет, вы рискуете overgeneralize и вкладывать намного больше усилий в системе, чем, вероятно, необходимо.

Это компромисс, и он должен какой-то опыт, чтобы принимать правильные решения о том, когда обобщают, а когда нет. Возможный подход к этому должен придерживаться принципа YAGNI - не сделать код твердое "просто в случае с" - или, выражаясь вашими словами: не

обеспечить гибкость других разработчиков мая нужно

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

Поэтому, когда у вас есть одна функция или класс в своем коде вы не уверены, если он может быть повторно использованы, Дон'т положить его в основу сейчас. Подождите, пока у вас есть актуальное дело В использовать и рефакторинг чтобы "достаточно солидный для этого дела" по. Дон'т реализовать более настраиваемость (в соответствии с ОКП), или запись точек водозабора (с помощью DIP) в такой класс, как вам действительно нужно для реальной переработка делу. Добавьте следующий гибкость при следующей требование использовать на самом деле нет.

Конечно, такой способ работы всегда будет требовать некоторое количество рефакторинга в существующей рабочей базой кода. Именно поэтому автоматические тесты важны здесь. Так что ваш код будет достаточно прочной, с самого начала это блок-тестируемые-это не пустая трата времени, и это не противоречит YAGNI. Автоматические тесты-это веские аргументы в пользу "и код использовать то, что", так как код в Коле используется с производства код а также из тестов. Но имейте в виду, просто добавить гибкость вам действительно нужно для контрольной работы, не меньше, не больше.

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

Комментарии (9)

Из моего опыта, при написании приложения, у вас есть три варианта:

  1. Писать код исключительно для выполнения требований,
  2. Писать обобщенный код, который предвосхищает будущие требования, а также выполняет текущие требования,
  3. Код пишут, что только удовлетворяет текущие потребности, но таким образом, что's легкий для того чтобы изменить для удовлетворения других потребностей.

В первом случае, это'ы общем в итоге тесно связан код, что нет модульных тестов. Уверен, что это's быстро писать, но это's жесткий, чтобы проверить. И это'ы прямо заноза в дальнейшем меняться при изменении требований.

Во втором случае, огромное количество времени тратится на попытки предвосхитить будущие потребности. И слишком часто эти предполагаемые будущие потребности никогда не материализоваться. Это похоже на сценарий, который вы описываете. Это'ы пустая трата усилий и результатов в сложных кодекс излишне, что's по-прежнему трудно изменить, когда требование это было'т ожидается, появится.

Последний случай один стремиться на мой взгляд. Использовать TDD или аналогичные методы, чтобы проверить код, как вы идете и вы'll итоге с слабосвязанных код, что's легкий для того чтобы изменить, но все равно быстро писать. И дело в том, что делая это, вы, естественно, следуют многие твердые принципы: маленькие классы и функции; интерфейсы и вводят зависимостей. И миссис Лисков в целом тоже устраивают как простые классы с одиночным обязанности редко ссориться ее принцип замещения.

Единственный аспект твердым, что не'т реально применить здесь открыто/закрыто принципе. Для библиотек и фреймворков, это важно. Для автономных приложений, не так много. На самом деле это's в случае написания кода и"сползто": легко писать (и читать), легко проверить и легко для поддержания.

Комментарии (5)

Перспективы у вас могут быть искажены в результате личного опыта. Это скользкая дорожка фактов, которые по отдельности правильные, но в результате вывод-Это'т, кажется правильным на первый взгляд.

  • Каркасы являются более масштабными, чем небольшие проекты.
  • Плохая практика значительно сложнее в больших кодовых баз.
  • Создание основы (в среднем) требует более квалифицированных разработчиков, чем создание небольшого проекта.
  • Лучше разработчиков следовать хорошей практике (сплошной) более.
  • Как результат, механизмы имеют более высокую потребность в эффективной практике и, как правило, построены разработчиками, кто более тесно сталкивался с хорошей практикой. Это означает, что когда вы взаимодействуете с базы и небольших библиотек, в Кодексе практики вы'МР взаимодействовать с будет чаще быть найден в больших рамках. Это заблуждение очень распространено, электронная.г доктор every я'вэ лечили был заносчив. Поэтому я делаю вывод, что все врачи высокомерно. Эти заблуждения всегда страдают от вывода blanket, основанные на личном опыте. В вашем случае, это's возможно, что вы'вэ преимущественно опытные передовой практики в более широком контексте, а не в небольших библиотеках. Ваши личные наблюдения-это'т ошибаться, но это'ы anecdotal доказательств и не универсально.

    2 режима программирования - создание более или менее точно то, что просят через требования и поцелуй (в обычном программировании), или создание очень универсальный логике, услуги и т. д., которые обеспечивают гибкость и другие разработчики могут понадобиться (основы программирования) Вы'вновь несколько подтверждающих это здесь. Думаю, что основа. Это не приложение. Это'ы обобщенный и"шаблон", которую другие могут использовать для всевозможных приложений. Логически, это означает, что база строится в гораздо более абстрагировать логику для того, чтобы быть полезной для всех. Рамки строители не способны принимать ярлыки, потому что они Дон'т даже знаю, что требования последующего применения. Построение основы по своей сути стимулирует их, чтобы сделать их код полезной для других. Строители, однако, обладают способностью к компромиссу на логических эффективность, поскольку они ориентированы на создание продукта. Их главная цель-не работа кода, но скорее опыт пользователя. Для системы, конечным пользователем является другой разработчик, который будет взаимодействовать с вашим кодом. Качество кода имеет значение для конечного пользователя. Для приложения, конечный пользователь-не разработчик, который выиграл'т будет взаимодействовать с вашим кодом. Качество кода не имеет никакого значения для них. это именно поэтому архитекторы из команды разработчиков часто выступают в качестве исполнителей хорошей практики. Они на один шаг удалены от поставки товара, что означает, что они, как правило, объективно смотреть на код, а не сосредотачиваться на поставку само приложение.

    если вы добавляете эти точки входа абстракции, вы на самом деле выполняют требования пользователей, или создавая основу поверх существующей базы и технологий стека, чтобы сделать будущие дополнения легче? В этом случае вы служите интересам заказчика или застройщика? Это интересный момент, и он'ы (по моему опыту) основная причина, почему люди до сих пор пытаются оправдать избегая хорошая практика. Для обобщения ниже пунктов: пропуск хорошая практика может быть оправдано только в том случае, если ваши требования (как сейчас известно) являются неизменными, и никогда не будет любое изменение/дополнение к код. Spoiler предупреждение: это редко когда-либо случае. Например, когда я пишу в 5 минутах консольное приложение для обработки конкретного файла, я не'т использовать хорошие практики. Потому что я'м только собирается использовать приложение сегодня, и это вовсе'т должны быть обновлены в будущем (он'd быть проще написать другую программу, которая мне нужна один раз). Позвольте'говорят, что вы можете некачественно создать приложение в 4 недели, и вы можете правильно построить его в 6 недель. На первый взгляд, здание некачественно кажется лучше. Клиент получает их более быстрое применение, и компания вынуждена тратить меньше времени на разработчика заработной платы. Выиграть/выиграть, верно? Однако, это решение не думая о будущем. Из-за качеством кодовой базы, внеся значительные изменения в некачественно построенные займет 2 недели, при этом изменения в правильно построенный занимает 1 неделю. Возможно, многие из этих изменений в будущем. Кроме того, есть тенденция к изменениям в неожиданно требует больше работы, чем вы думали изначально в некачественно построенные базы кода, таким образом, скорее всего, отодвигая свое время развитие на три недели вместо двух. А потом там's также склонность к охота тратить время на ошибки. Это часто бывает в проектах, где рубки были проигнорированы из-за нехватки времени или просто нежелании его выполнять, потому что вы по рассеянности исходим из того, что конечный продукт будет работать, как ожидалось. Это вовсе'т даже нужно серьезное обновление. На мой нынешний работодатель, я'вэ видел несколько проектов, которые были построены на скорую руку, и, когда мельчайшие ошибки/изменения необходимы из-за недопонимания требований, которые приводят к цепной реакции, требующие рефакторинг модуля после модуля. Некоторые из этих проектов в итоге рушится (и оставляя за собой unmaintainable бардак), прежде чем они даже выпустили свою первую версию. Ярлык решений (быстрая и грязная программирования) это только полезно, если вы можете убедительно гарантия, что требования абсолютно правильны и никогда не придется его менять. По моему опыту, я'вэ never встретить проект, где это правда. Инвестирование в дополнительное время в хорошей практике-это инвестиции в будущее. Будущих ошибок и изменений будет намного проще, когда существующая кодовая база построена на хорошей практике. Он уже будет выплачивать дивиденды после того, делаются только два или три изменения.

Комментарии (5)

Как твердый превратить простой код в код платформы? Я'м не стан для твердых любыми средствами но это's действительно не очевидно, что вы подразумеваете здесь.

  • Поцелуй-это суть овпринцип инглишь ответственности.
  • Нет ничего в часовручка/закрытые принцип (по крайней мере как я его понимаю—см. Джон Скит), что идет против написания кода, чтобы сделать одну вещь хорошо. (На самом деле более плотно сосредоточены код, тем важнее “закрытую” часть становится.)
  • С Лисков принцип замещения не говорю, что вы должны позволить людям подкласс классы. Он говорит, что если вы подкласс классы, подклассы должны выполнить контракт их суперклассов. Это просто хороший дизайн ОО. (И если вы Don'Т есть какие-либо подклассы, это вовсе'т применять.)
  • Поцелуй тоже суть яминимальная подписка на принципе сегрегации.
  • В гependency инверсии принцип-единственный, кому я могу посмотреть удаленно применения, но я думаю, это'С широко неправильно и раздуто. Это не'Т означает, что вам придется вводить все с Guice или весной. Это просто означает, что вы должны аннотация, где это уместно и не зависят от деталей реализации.

Я признаю, что я Дон'т думаю, что в твердом выражении себя, потому что я пришел через Банда четырех и Джош Bloch школ программирования, а не в школе Боб Мартин. Но я действительно думаю, что если вы думаете, что “твердый” = “добавляя больше слоев к тек стек”, вы ошибаетесь.


П. С. Дон'т продавать преимущества “лучше UX для разработчика” короткие. Код проводит большую часть своей жизни в обслуживании. Разработчик вы.

Комментарии (4)