6.1 分解

基準はさまざまですが、大規模システムの開発における主なタスクは、システムの複雑さを軽減することです。複雑さを軽減するためには、パーツに分割すること以外はまだ発明されていません。

わかりやすくするために、これを「分割統治」の原則と呼ぶことがありますが、ソフトウェア アーキテクトの観点からは、階層分解について話しています。

複雑なシステムは、少数の単純なサブシステムから構築する必要があります。各サブシステムは、さらに小さな部品から構築され、最小の部品が直接理解して作成できるほど単純になるまで、同様に構築されます。

分解

嬉しいことに、このソリューションは既知の唯一のものであるだけでなく、普遍的でもあるということです。複雑さを軽減するだけでなく、重要な部分を複製することで、システムの柔軟性、優れた拡張性回復力の向上も同時に実現します。

したがって、プログラムのアーキテクチャを構築し、その構造を作成するということは、プログラムをサブシステム、サービス、レイヤー、サブルーチン、機能モジュールに分解し、それらの相互作用や外部世界との相互作用を組織化することを意味します。

そして、ここで最も価値のあることは、サブシステムの独立性が高まるほど、特定の時点での各サブシステムの開発に個別に集中し、他のすべての部分について心配する必要がなくなるため、より安全になるということです。

6.2 モジュール式アーキテクチャの利点

階層分解の原理を使用すると、コードの何千ものクラスの混乱を取り除くことができます。コードがパッケージ (パッケージ) とサブパッケージに分かれていることを覚えていますか? 階層分解の表現の一つです。

プログラムは、多数のクラスから、明確に定義された単純なルールに従って相互に対話する一連のライブラリとモジュールに変わります。これにより、その複雑さを制御できるようになり、優れたアーキテクチャの概念に通常関連付けられているすべての利点を得る機会も得られます。

最も基本的なものは次のとおりです。

  • スケーラビリティ- 新しいモジュールを追加することでシステムを拡張し、パフォーマンスを向上させる機能。
  • 保守性- 1 つのモジュールを変更しても、他のモジュールを変更する必要はありません。
  • モジュールの交換可能性(Swappability) - モジュールを別のモジュールと簡単に交換できます。
  • ユニットテスト – ユニットを他のすべてのユニットから切り離してテスト/修理できます
  • 再利用性- モジュールは他のプログラムや他の環境で再利用できます。
  • メンテナンス- モジュールに分割されたプログラムは、理解とメンテナンスが容易です。

複雑な問題を単純な断片に分割することは、すべての設計手法の目標であると言えます。そして、ほとんどの場合、「アーキテクチャ」という用語は、そのような分割の結果に「一度採用されると変更が難しいいくつかの設計上の決定」を加えたものを単に指します(Martin Fowler「Architecture of Enterprise Software Applications」)。

したがって、ほとんどの定義は、何らかの形で次のように要約されます。

アーキテクチャは、システムの主要コンポーネントとそれらがどのように相互作用するかを特定します。また、基本的なものとして解釈され、将来変更される可能性のない、そのような決定の選択でもあります。」

アーキテクチャはシステムの組織であり、そのコンポーネント、コンポーネント間の関係、および環境との関係に具体化されています。システムとは、特定の機能を実行するために組み合わされたコンポーネントのセットです。

したがって、優れたアーキテクチャとは、まず第一に、モジュール/ブロック アーキテクチャです。優れたアーキテクチャを実現するには、システムを適切に分解する方法を知る必要があります。これは、どの分解が「正しい」と考えられるのか、そしてそれをどのように実行するのが最善であるのかを理解する必要があることを意味します。