アジャイルでアプリケーションのアーキテクチャ/デザインを作成する方法は?


8

エンタープライズアプリケーションを開発しようとしているが、アジャイルプロセスから理解できる限り、機能を小さなチャンクに分割し、それらを繰り返し開発します。データベースとアプリケーションのコアを最初に作成してから、これらを繰り返し拡張していました。

問題は、以前に使用していたことを維持する必要がありますか(コアを最初に開発する必要がありますか)、ストーリーの開発にコア開発を分配する必要がありますか?後で、私はコードが将来の拡張のために十分に柔軟であるかどうか確信がありません!

何か案が?


2
オッズは、「十分に柔軟」であると前もって考えれば、柔軟性が足りないか、柔軟性が高すぎると考えられます。

最初にコアを開発せずに繰り返し開発しながら、優れたデザイン/アーキテクチャを提供するためのテクニックはありますか?申し訳ありませんが、私はアジャイルの
初心者

回答:


11

最初にコアを開発しないでください。アジャイル開発の重要な原則は、完成した機能に必要な最小限のコードを記述することです。そうすれば、いつでも配達できます。重複を排除するために継続的にリファクタリングするため、コードは柔軟なままです。リファクタリングは、作成した各機能に対して作成した自動テストによってサポートされています。上位レベルのコードから重複を除外すると、コアは自動的に増加します。

基本的に、通常の無駄な試みで柔軟性を組み込んで将来の高価なコード変更を最小限に抑えるのではなく、Agileはリファクタリングをサポートする自動テストを構築するため、コード変更は比較的安価です。

マーティン・ファウラーのリファクタリングは、効果的なリファクタリング手法に関する私のお気に入りの本です。使用可能なコアを事前に定義するよりも、使用可能なコアを分解する方がはるかに簡単です。既存のAPIを単に再実装する場合を除いて、機能を実装する前に使用可能なコアを定義することはほぼ不可能です。そして、それに価値はありません。


次に重要なのは、継続的なリファクタリング+自動テストです。ありがとうございました!
Sameh Deabes 2012

1
@Girgio:申し訳ありませんが、不明確です。多くの既存の選択肢の1つを採用するだけではなく、独自のロギングフレームワークやORMなどを作成する価値はないということです。当たり前のように思えますが、複数の企業がそれを行うのを見てきました。
ケビンクライン

1
@kevin:場合によっては、独自のソリューションを使用することに価値があると思います。範囲が比較的小さいLoggingのようなものは、おそらく既存のソリューションを使用するでしょう。ORMのようなものは、あなた自身のロールに価値を見出すことができます。Doctrineのようなものには、さまざまなユースケースと機能を処理するコードがありますが、25〜30%が必要な場合はどうでしょうか。必要な機能の25〜30%を自分で手に入れれば、結局は小さく、使いやすく、おそらくパフォーマンスが向上することになります。
ライアンゼク2012

2
システムのアーキテクチャを単純に存在にリファクタリングすることはできません。これは、アジャイルとアーキテクチャの一般的な神話です。
Michael

1
@SamehSerag、「コアはあなたが[リファクタリングするにつれて自動的に成長します...」は、アーキテクチャがアクティブに選択されておらず、下位レベル(システムレベルではない)の決定に関する偶然の選択によって「自動的に」出現することが許可されていることを意味します。これが、リファクタリングを通じてアーキテクチャを有機的に「拡張」しようとする場合の問題です。
マイケル

1

アジャイル開発への私のアプローチは、「垂直スライス」を構築することです。UIからストレージにストーリーを取り入れて実装します。このプロセスを支援するために使用するいくつかの軽量ツールがあります(メモリ内(通常はテスト用)のアダプターを備えた単純なIRepository / UnitOfWorkフレームワーク、Entity Framework、およびNHibernateのようなものです。現時点では、 O / RMを使用する必要があるかどうかではなく、どちらを使用するかという議論であり、私にとっては環境に依存します。

コアを作成するために多くの時間を前もって費やすよりも、動作するソフトウェアをすぐに確認できるため、このアプローチはアジャイル開発に関する否定論者よりも優れていることがわかりました。ドメインドリブンデザインと私が使用する他のいくつかの手法と組み合わせると、通常、ユーザーの前で多くの機能を非常に迅速に得ることができます。

アプリケーションの成長に合わせて速度を維持することの一部は、包括的な単体テストスイートが提供するそのセーフティネットを備えているため、TDDまたは事後の単体テストも重要です。「このクラスに変更を加える必要があります。何も壊していないことを確認するにはどうすればよいですか?」優れた単体テストスイートがあれば、そのテストスイートを実行するのと同じくらい簡単です。そうしないと、アプリを手動で実行して確認する必要があります。まったく面白くない。


-1

機能の垂直スライスをサポートする最小限の水平フレームワークを作成します。フレームワークは拡張可能であるように作成されており、ほとんどの努力が最初に集中される場所です。機能の垂直方向のスライスは、フレームワークが実際の価値をサポートすることを実証することです。以降のイテレーションでは、フレームワークが実現するにつれて労力を費やすことなく、フレームワークを使用して機能を構築することに多くの労力を費やします。イテレーションで開発されたフレームワークを使用する機能に大部分の労力が集中するまで、この方法を続けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.