Перспектива, которую вы имеете, может быть искажена личным опытом. Это скользкий наклон фактов, которые по отдельности верны, но в результате этого нет, хотя на первый взгляд это выглядит правильно.
- Рамки больше по объему, чем небольшие проекты.
- С плохой практикой значительно сложнее справиться в больших кодовых базах.
- Создание фреймворка (в среднем) требует более опытного разработчика, чем создание небольшого проекта.
- Лучшие разработчики больше следуют хорошей практике (SOLID).
- В результате фреймворки имеют более высокую потребность в хорошей практике и, как правило, создаются разработчиками, которые более тесно знакомы с хорошей практикой.
Это означает, что когда вы взаимодействуете с фреймворками и небольшими библиотеками, код хорошей практики, с которым вы будете взаимодействовать, будет чаще встречаться в более крупных фреймворках.
Это заблуждение очень часто, например , каждый врач я лечились был высокомерен. Поэтому я делаю вывод, что все врачи высокомерны. Эти ошибки всегда страдают от общего вывода, основанного на личном опыте.
В вашем случае возможно, что вы в основном испытали хорошую практику в больших средах, а не в меньших библиотеках. Ваше личное наблюдение не является ошибочным, но это неподтвержденное свидетельство и не всегда применимо.
2 режима программирования - создание более или менее точно того, что задают с помощью требований и KISS (типичное программирование), или создание очень общей и многократно используемой логики, сервисов и т. Д., Которые обеспечивают гибкость, которая может понадобиться другим разработчикам (программирование фреймворка)
Вы несколько подтверждаете это здесь. Подумайте, что такое основа. Это не приложение. Это обобщенный «шаблон», который другие могут использовать для создания всевозможных приложений. По логике это означает, что фреймворк построен в гораздо более абстрактной логике, чтобы его могли использовать все.
Разработчики фреймворков не могут использовать ярлыки, потому что они даже не знают, каковы требования последующих приложений. Создание фреймворка по своей сути стимулирует их сделать свой код пригодным для использования другими.
Однако разработчики приложений могут пойти на компромисс в отношении логической эффективности, поскольку они сосредоточены на предоставлении продукта. Их главная цель - не работа кода, а опыт пользователя.
Для фреймворка конечный пользователь - это другой разработчик, который будет взаимодействовать с вашим кодом. Качество вашего кода важно для вашего конечного пользователя.
Для приложения конечный пользователь не является разработчиком и не будет взаимодействовать с вашим кодом. Качество вашего кода не имеет для них значения.
Именно поэтому архитекторы команды разработчиков часто выступают в качестве навязчиков передовой практики. Они находятся в одном шаге от доставки продукта, что означает, что они склонны смотреть на код объективно, а не фокусироваться на доставке самого приложения.
Если вы добавляете эти точки входа абстракции, действительно ли вы удовлетворяете требованиям пользователей, или вы создаете инфраструктуру поверх существующей инфраструктуры и стека технологий, чтобы облегчить будущие добавления? В каком случае вы служите интересам заказчика или разработчика?
Это интересный момент, и это (по моему опыту) главная причина, почему люди все еще пытаются оправдать отказ от хорошей практики.
Подводя итог следующим пунктам: Пропуск надлежащей практики может быть оправдан только в том случае, если ваши требования (как известно в настоящее время) являются неизменными, и никогда не будет каких-либо изменений / дополнений в кодовой базе. Оповещение спойлера: это редко случается.
Например, когда я пишу 5-минутное консольное приложение для обработки определенного файла, я не пользуюсь хорошей практикой. Потому что я собираюсь использовать приложение только сегодня, и его не нужно обновлять в будущем (было бы проще написать другое приложение, если оно мне понадобится снова).
Допустим, вы можете создать приложение за 4 недели, а за 6 недель - правильно. С первого взгляда, к сожалению, здание кажется лучше. Заказчик получает свое приложение быстрее, и компании приходится тратить меньше времени на заработную плату разработчика. Победа / победа, верно?
Однако это решение принято, не задумываясь. Из-за качества кодовой базы внесение основных изменений в плохо построенную версию займет 2 недели, в то время как внесение таких же изменений в правильно построенную версию займет 1 неделю. В будущем может произойти много таких изменений.
Более того, существует тенденция к неожиданным изменениям, требующим больше работы, чем вы изначально думали, в плохо построенных кодовых базах, что, вероятно, сокращает время разработки до трех недель вместо двух.
А также есть тенденция тратить время на охоту за ошибками. Это часто имеет место в проектах, где ведение журнала было проигнорировано из-за нехватки времени или явного нежелания его реализовать, потому что вы рассеянно работаете в предположении, что конечный продукт будет работать так, как ожидалось.
Это даже не должно быть серьезным обновлением. У моего нынешнего работодателя я видел несколько проектов, которые были построены быстро и грязно, и когда нужно было сделать крошечную ошибку / изменение из-за неправильного представления требований, что привело к цепной реакции необходимости рефакторинга модуля за модулем , Некоторые из этих проектов рухнули (и оставили после себя неразбериху), прежде чем они выпустили свою первую версию.
Быстрые решения (быстрое и грязное программирование) полезны только в том случае, если вы можете окончательно гарантировать, что требования в точности верны и их не нужно менять. По моему опыту, я никогда не сталкивался с проектом, где это правда.
Вложение дополнительного времени в хорошую практику - это инвестирование в будущее. Будущие ошибки и изменения будут намного проще, если существующая кодовая база будет построена на основе хорошей практики. Он будет выплачивать дивиденды только после двух или трех изменений.