エンタープライズアプリケーションを開発しようとしているが、アジャイルプロセスから理解できる限り、機能を小さなチャンクに分割し、それらを繰り返し開発します。データベースとアプリケーションのコアを最初に作成してから、これらを繰り返し拡張していました。
問題は、以前に使用していたことを維持する必要がありますか(コアを最初に開発する必要がありますか)、ストーリーの開発にコア開発を分配する必要がありますか?後で、私はコードが将来の拡張のために十分に柔軟であるかどうか確信がありません!
何か案が?
エンタープライズアプリケーションを開発しようとしているが、アジャイルプロセスから理解できる限り、機能を小さなチャンクに分割し、それらを繰り返し開発します。データベースとアプリケーションのコアを最初に作成してから、これらを繰り返し拡張していました。
問題は、以前に使用していたことを維持する必要がありますか(コアを最初に開発する必要がありますか)、ストーリーの開発にコア開発を分配する必要がありますか?後で、私はコードが将来の拡張のために十分に柔軟であるかどうか確信がありません!
何か案が?
回答:
最初にコアを開発しないでください。アジャイル開発の重要な原則は、完成した機能に必要な最小限のコードを記述することです。そうすれば、いつでも配達できます。重複を排除するために継続的にリファクタリングするため、コードは柔軟なままです。リファクタリングは、作成した各機能に対して作成した自動テストによってサポートされています。上位レベルのコードから重複を除外すると、コアは自動的に増加します。
基本的に、通常の無駄な試みで柔軟性を組み込んで将来の高価なコード変更を最小限に抑えるのではなく、Agileはリファクタリングをサポートする自動テストを構築するため、コード変更は比較的安価です。
マーティン・ファウラーのリファクタリングは、効果的なリファクタリング手法に関する私のお気に入りの本です。使用可能なコアを事前に定義するよりも、使用可能なコアを分解する方がはるかに簡単です。既存のAPIを単に再実装する場合を除いて、機能を実装する前に使用可能なコアを定義することはほぼ不可能です。そして、それに価値はありません。
アジャイル開発への私のアプローチは、「垂直スライス」を構築することです。UIからストレージにストーリーを取り入れて実装します。このプロセスを支援するために使用するいくつかの軽量ツールがあります(メモリ内(通常はテスト用)のアダプターを備えた単純なIRepository / UnitOfWorkフレームワーク、Entity Framework、およびNHibernateのようなものです。現時点では、 O / RMを使用する必要があるかどうかではなく、どちらを使用するかという議論であり、私にとっては環境に依存します。
コアを作成するために多くの時間を前もって費やすよりも、動作するソフトウェアをすぐに確認できるため、このアプローチはアジャイル開発に関する否定論者よりも優れていることがわかりました。ドメインドリブンデザインと私が使用する他のいくつかの手法と組み合わせると、通常、ユーザーの前で多くの機能を非常に迅速に得ることができます。
アプリケーションの成長に合わせて速度を維持することの一部は、包括的な単体テストスイートが提供するそのセーフティネットを備えているため、TDDまたは事後の単体テストも重要です。「このクラスに変更を加える必要があります。何も壊していないことを確認するにはどうすればよいですか?」優れた単体テストスイートがあれば、そのテストスイートを実行するのと同じくらい簡単です。そうしないと、アプリを手動で実行して確認する必要があります。まったく面白くない。
機能の垂直スライスをサポートする最小限の水平フレームワークを作成します。フレームワークは拡張可能であるように作成されており、ほとんどの努力が最初に集中される場所です。機能の垂直方向のスライスは、フレームワークが実際の価値をサポートすることを実証することです。以降のイテレーションでは、フレームワークが実現するにつれて労力を費やすことなく、フレームワークを使用して機能を構築することに多くの労力を費やします。イテレーションで開発されたフレームワークを使用する機能に大部分の労力が集中するまで、この方法を続けます。