あなたが持っている視点は、個人的な経験によって歪められます。これは、個別に正しい事実の滑りやすい勾配ですが、一見正しいように見えても、結果の推論は正しくありません。
- フレームワークは、小規模プロジェクトよりも範囲が広いです。
- 悪い習慣は、より大きなコードベースで対処するのがかなり難しくなります。
- フレームワークの構築(平均)には、小規模なプロジェクトを構築するよりも熟練した開発者が必要です。
- より良い開発者は、より良い実践(SOLID)に従います。
- その結果、フレームワークは優れた実践に対するニーズが高くなり、優れた実践に精通した開発者によって構築される傾向があります。
これは、フレームワークや小さなライブラリとやり取りするとき、やり取りするグッドプラクティスコードはより大きなフレームワークでより一般的に見つかることを意味します。
この誤acyは非常に一般的です。たとえば、私が治療を受けたすべての医師は慢でした。したがって、私はすべての医師が慢であると結論付けます。これらの誤aは、常に個人的な経験に基づいた包括的な推論を行うことに苦しんでいます。
あなたの場合、小さなライブラリではなく、大きなフレームワークで優良なプラクティスを主に経験している可能性があります。あなたの個人的な観察は間違っていませんが、それは事例証拠であり、普遍的に適用可能ではありません。
プログラミングの2つのモード-要件とKISS(通常のプログラミング)で要求される内容を多少正確に作成するか、他の開発者が必要とする柔軟性を提供する非常に汎用的で再利用可能なロジック、サービスなどを作成します(フレームワークプログラミング)
ここでこれをいくらか確認しています。フレームワークとは何かを考えてください。それはアプリケーションではありません。他の人があらゆる種類のアプリケーションを作成するために使用できる一般化された「テンプレート」です。論理的には、フレームワークは、誰でも使用できるように、より抽象化されたロジックで構築されていることを意味します。
フレームワークビルダーは、後続のアプリケーションの要件がわからないため、ショートカットを取得できません。フレームワークを構築することで、コードを他の人が使用できるようになります。
ただし、アプリケーションビルダーは、製品の提供に重点を置いているため、論理的な効率を損なう可能性があります。彼らの主な目標は、コードの仕組みではなく、ユーザーのエクスペリエンスです。
フレームワークの場合、エンドユーザーはコードとやり取りする別の開発者です。コードの品質はエンドユーザーにとって重要です。
アプリケーションの場合、エンドユーザーは開発者ではなく、コードを操作しません。コードの品質は重要ではありません。
開発チームのアーキテクトがグッドプラクティスのエンフォーサーとしてしばしば行動するのはまさにこのためです。それらは、製品の配信から削除された1つのステップです。つまり、アプリケーション自体の配信に焦点を当てるのではなく、コードを客観的に見る傾向があります。
これらの抽象化のエントリポイントを追加する場合、ユーザーの要件を本当に満たしていますか、それとも既存のフレームワークと技術スタックの上にフレームワークを作成して将来の追加を容易にしますか?どちらの場合、顧客または開発者の利益に貢献していますか?
これは興味深い点であり、それは(私の経験では)人々が依然として優れた実践を避けることを正当化しようとする主な理由です。
以下のポイントを要約すると:(現在知られている)要件が不変であり、コードベースに変更/追加が加えられない場合にのみ、優れたプラクティスをスキップすることを正当化できます。 ネタバレ注意:それはめったにありません。
たとえば、特定のファイルを処理するために5分間のコンソールアプリケーションを作成するときは、良い方法を使用しません。今日はアプリケーションを使用するだけであり、将来更新する必要がないため(別のアプリケーションが必要になった場合は、別のアプリケーションを作成する方が簡単です)。
4週間で見事にアプリケーションをビルドでき、6週間で適切にビルドできるとしましょう。一見したところ、見苦しくそれを構築する方が良いようです。顧客はアプリケーションを迅速に入手でき、開発者の賃金に費やす時間を短縮する必要があります。勝ち勝ちですよね?
ただし、これは先を考えずに行われた決定です。コードベースの品質のため、見苦しく構築されたものに大きな変更を加えるには2週間かかりますが、適切に構築されたものに同じ変更を加えるには1週間かかります。将来これらの変更の多くが発生する可能性があります。
さらに、変更が予期せず構築されたコードベースで当初考えていたよりも多くの作業を必要とする傾向があるため、開発時間が2週間ではなく3週間になる可能性があります。
そして、バグを探すのに時間を浪費する傾向もあります。これは多くの場合、最終製品が期待どおりに機能するという仮定の下でぼんやりと作業をしているため、時間の制約やログの実装をまったく望まないためにロギングが無視されているプロジェクトの場合です。
メジャーアップデートである必要さえありません。私の現在の雇用主では、迅速かつ汚いビルドされたいくつかのプロジェクトを見てきました。また、要件の誤解のために最も小さなバグ/変更を行う必要があり、モジュールの後にモジュールをリファクタリングする必要があるという連鎖反応につながりました。これらのプロジェクトのいくつかは、最初のバージョンをリリースする前に崩壊しました(そして、維持できない混乱を残しました)。
ショートカットの決定(迅速で汚いプログラミング)は、要件が正確であり、変更する必要がないことを最終的に保証できる場合にのみ有益です。私の経験では、それが当てはまるプロジェクトに出会ったことはありません。
余分な時間をグッドプラクティスに投資することは、将来への投資です。既存のコードベースが優れたプラクティスに基づいて構築されている場合、将来のバグと変更は非常に簡単になります。変更が2、3回行われただけで既に配当を支払っています。