Skip to main content

 

 

 

 
Language:
 
 
 
OutSystems

アプリケーションアーキテクチャを検証する

適切に設計されたアプリケーションアーキテクチャを実現するには、3つのルールに常に従う必要があります

実装されたモジュールがこれらのアーキテクチャルールに従っているかどうかは、Discoveryツールを使用して自動的に確認できます。このツールは、モジュール間の実際の依存関係を分析して違反を特定し、間違った場所でアセンブルされた要素(アクション、画面、エンティティ)を指摘します。

ルール #1 - 上方参照をしない

上方参照では、2つのモジュールに直接または間接的に循環依存を含むクラスタが作成される傾向にあります。

この例では、ライブラリEエンドユーザーAを利用するため、特定されたクラスタ内にある要素のペアは循環依存になります。CDを例にとると、C> E > A > Dと、逆のD> E > A > Cになります。

もう1つの予期しない影響は、エンドユーザーBコアDを正当に利用し、クラスタ全体に依存するようになることです。その実行時に不必要に大きな占有領域が取得されるだけでなく、まったく認識されていないモジュールで行われた変更による影響を絶えず受ける(古くなる)ことになります。

問題点

上方違反により、サービスが適切に分離されていないことが明確に特定されます。

解決方法

利用されている要素を探して下位レイヤーに移動します。この場合、Aにある再利用可能なサービスをライブラリに移動し、最終的にはE自体に移動します(同じコンセプトに適合する場合)。

ルール #2 - エンドユーザー間またはオーケストレーション間でサイドリファレンスをしない

この例では、エンドユーザーAエンドユーザーBの何らかの要素(おそらく書式設定機能のような単純なもの)を利用しています。モジュールBと結合しているだけではなく、DEGも不必要に継承しています。

問題点

エンドユーザーモジュールまたはオーケストレーションモジュールが再利用可能なサービスを提供することはありません。これにより、モジュールが適切に分離されるため、異なるライフサイクルを保持できます。つまり、スポンサーやプロジェクトチームが異なると、バージョン管理のペースも異なります。

このような分離が重要である理由は、エンドユーザーオーケストレーションが階層の最上位にあるためです。そうしたモジュールへの参照は、下位レイヤーからの膨大な量の間接的依存関係をもたらす傾向にあります。

解決方法

Aで利用されているBの要素がどれかを調べ、そうした要素を以下の新しい(またはコンセプトが適合する場合は既存の)下位レイヤーモジュールに移動します。

  • コアモジュール(ビジネス関連の場合)

  • ライブラリ(ビジネスに依存しない場合)

ルール #3 - コア間またはライブラリ間で循環を避ける

ルール #1とルール #2に従うと、エンドユーザーオーケストレーションが循環参照に含まれることはありません。

ルール3は、コア間またはライブラリ間でサイドリファレンスを持つことができるため、循環を回避することです。

循環は予期しない影響や管理しにくいコードを伴うため、どのような場合でも望ましくありません。

問題点

モジュール間で循環が生じている場合、コンセプトが正しく抽象化されていないことを示しています。

ABの間で循環が生じている場合、以下のどちらかを示しています。

  • これらが密結合されている。

  • いずれかの方向が望ましくない。たとえば、AのコンセプトはBを拡張しているため、概念上ABを利用していることになります。

解決方法

ほとんどの場合、関係の中に望ましくない方向が明らかに存在するときは、コンセプトを別のモジュールに移動する必要があります。

たとえば、BAを利用すべきでない場合、Bで利用されるAの要素を以下のようにする必要があります。

  • 新しいモジュールに移動する(別の再利用可能なコンセプトを表している場合)

  • B自体に移動する(同じコンセプトの誤配置された要素である場合)

ただし、ABの結び付きが強すぎる場合は、それらをまとめてマージする必要があります。

このマージによってモジュールが大きくなりすぎる場合は、2つのモジュールに加えて第3のモジュールの作成が必要になる可能性があります。元の2つのモジュールは基本コンセプトを表し、新しいモジュールは両方の基本コンセプトを処理する必要がある何らかのエンドユーザープロセスをサポートするためのビジネスルールを提供するのが一般的です。この構成ロジックが循環を引き起こします。

関連リソース

アプリケーションアーキテクチャを設計する方法の詳細については、「OutSystemsアプリケーションのアーキテクチャを設計する」のガイドをご覧ください。

  • Was this article helpful?