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