コンポーネント駆動開発とは何ですか?
-
06-09-2019 - |
質問
コンポーネント駆動開発 この用語は特に広く使われ始めています。制御の反転に関連して。
- それは何ですか?
- それはどのような問題を解決しますか?
- いつが適切で、いつが不適切でしょうか?
解決
これは何ですか?
私はあなたの答えでの定義がよくこの質問をカバーだと思います。定義は、コンポーネントが明示的にその依存関係を定義する必要があることを含んでいる理由が、私は疑問。コンポーネントの標準的な例は、ActiveXコントロールである - 彼らは、明示的にそれらの依存関係を定義する必要があります。
?どのような問題、それは解決しない?
複雑さの管理。それはあなたがしかコンポーネントの実装を考えるようにすることによってそれに対処しようとしています。一つは、一つだけあるべきのないのそれらを組み合わせたり、管理する方法について考える必要がために、コンポーネントをオーサリングする必要がありますする必要があります。それはいくつかのフレームワークまたはコンポーネントの外部インフラストラクチャによって行われ、コンポーネントの作者にとって重要ではない。
と、それが適切であるとするときではない?
必ずしもtrivalまたは使い捨てのアプリケーションに適していません。あなたはコンポーネントではなく、部品そのものを管理して組み合わせることが考えやインフラストラクチャ上で作業に時間を費やしている場合、コンポーネントアーキテクチャの悪臭は、あります。
他のヒント
これが「広く普及している」用語かどうかはわかりませんが、VCS (バージョン管理システム) では、プログラムのビルドに必要なファイルのセットを管理する 2 つの方法を知っています。
- システムベースのアプローチ, 、すべてのセットには共通のライフサイクルがあり、すべてとしてタグ付けする必要があります。
- コンポーネントベースのアプローチでは、個々のファイルセットが独自のライフサイクルを持ち、メタラベルがコンポーネントのすべてのラベルを参照して、コンポーネント間の構成と依存関係によってすべてのシステムを指定します。
の 応用的なアーキテクチャ これらのコンポーネントを識別するために使用されます。
- 機能ドメインとアプリケーション
- サードパーティのライブラリ
- フレームワーク
IoC はあらゆるフレームワークの基礎となるため、ここで登場します。これにより問題が解決され、アプリケーションの部分をより適切に識別できるようになります。
トレーダーの損益 (ポジション) の計算を担当する PLR (損益) アプリケーションを設計するとします。
これが単一のアプリケーションではなく、いくつかのアプリケーションの構成であることがすぐにわかります。
- GUI
- ランチャー
- ディスパッチャ (すべてを計算するにはメモリが足りないため、複数のサーバーに計算をディスパッチするため)
- など
次に、さまざまなモジュールをプラグインできる計算フレームワーク (Ioc) を特定し、フレームワークによって適切なタイミングで呼び出されます。
あるいは純粋に特定することもできます 技術的枠組み (KPI、ログ、例外管理) は、他の任意のアプリケーションで使用できます。 機能的な コンポーネント。
プロジェクト管理の観点からは、VCS を通じてグローバルな調整を確保しながら、各部分を独立して開発することもできます。
コンポーネントベースの開発は本当に新しいものではありません。私はコンポーネント駆動開発を知らないが、私はそれはCBDだと仮定するつもりです。これは、Unixが置換小さなプログラムの束がそれぞれ非常によく一つのことをやって、設計されて方法です。デスクトップ分野では、DelphiのVCLは他に類をみない豊富な再利用可能なコンポーネントとサードパーティの市場でコンポーネントを使用することに成功してきました。いくつかの技術が成熟していると我々は今、CBDの復活を見ています。例えば、単純なWebアプリケーションをSOAとRESTful WSに進化しています。すべてのJavaの連中はモジュール性とのIoCの話をされてます。
あなたが探している答えはおそらくなぜ、どのような制御の反転の中で発見されますケジンによっての
の不可欠自然、ほかに これらの古典的なオブジェクト指向プログラミング言語 森を欠場する傾向がある(高レベル 以下のためのアーキテクチャ/構造) 木(低レベル論理制御 手続き型コード)。開発と 引き継いメンテナンスエンジニア 既存のアプリケーションは、頼りにする必要があります 日付の設計/アーキテクチャのそのうち 文書や低レベルのコード コメント/パターンます。
コンポーネントベース開発(CBD) パラダイムは、上記の二つの問題に取り組みます 配管のロジックをずらし コンポーネントを操作するフレームワーク とに基づいてアプリケーションを設定します 宣言型の提供のユーザー/開発者 説明。普通に反して 混乱は、そのような宣言型 説明があることを意味していません アプリケーション設定スクリプト。むしろ、 彼らの基本的な意図はにあります 明示的に急行アプリケーション アーキテクチャ/構造なし 彼らの不可欠配管を義務付けます 手順(すなわち、何を記述 代わりに、どのように)。 CBDの目標 パラダイムは、効果的なサポートすることで、 柔軟なアプリケーション組成物による これらのフレームワークとなります アプリケーション開発者は、に焦点を当てます ビジネスロジックとドメインの問題 低レベルの配管なし 複雑ます。
組み合わせCBDフレームワーク 宣言型アプリケーションの説明 そして、IoCの技術が参照されます IoCフレームワークとして。彼らに反して 前任者、IoCのフレームワークがあります の非侵襲的のと使用 シナリオの設定の依存関係/コンフィギュレーション注入/ます。
ウィキペディアによると、コンポーネントベースの開発は、ソフトウェアコンポーネント(CBSEの別名であります)のます。
[それ]ソフトウェアのブランチです エンジニアリングは、の優先順位があります 点で懸念ののの分離 幅広い機能の 与えられたソフトウェアを通じて利用可能 システムます。
これはやや曖昧で、それでは、詳細を見てみましょう。
の個々の構成要素は、ソフトウェアであります そのパッケージ、またはモジュール、 関連のセットをカプセル化します 関数(またはデータ)。
すべてのシステムプロセスが中に配置されます 別々の部品のように、すべての 各内部データと関数 コンポーネントは、意味的に関連しています (ちょうどの内容と同じように クラス)。この原則のため、 多くの場合、コンポーネントがあるといわれています のモジュラーと凝集の
だから、この定義によると、構成要素は、それが本当によく一つのことだけ一つのことがそうであるように何もすることができます。
システム全体に関して 協調、コンポーネントが通信します インターフェイスを介して相互に。 [...] ののカプセル化などのコンポーネントでこの原則結果は言及しました。
このだからのようになります。より多くの我々は良いAPIやSOAについて考えるもののように鳴ってます。
提供のインターフェースはロリポップで表され、必要のインターフェイスはrepreseされていますUMLコンポーネントの外側の縁に取り付けられたオープンソケット記号によってnted。
の
<サブ>(ソース:ウィキメディア。 ORG の)サブ>
のもう一つの重要な属性 コンポーネントは、彼らがしていることです 、のの置換ように、コンポーネントを で(別置き換えることができます デザイン時または実行時)、もし 最初のコンポーネントの要件 (インターフェースを介して表現)が満たされています 後継成分による。
再利用性が重要です 高品質の特徴 ソフトウェアコンポーネント。ソフトウェア コンポーネントを設計する必要がありますし、 それが再利用できるように実装 多くの異なったプログラムでます。
代替性と再利用性は、コンポーネントのコンポーネントにするものです。 だから、これとオブジェクト指向プログラミングの違いは何でしょうか。
オブジェクト指向におけるアイデア プログラミング(OOP)は、そのソフトウェアであります に従って記述する必要があります 実際のまたは想像のメンタルモデル それが表すオブジェクト。 [...]
ソフトウェアコンポーネント、 対照的に、そのようなを行うものではありません 仮定し、その代わりと述べています ソフトウェアは、接着によって開発されるべきです プレハブの部品を一緒くらい エレクトロニクスの分野でなど メカニックます。
いくつかの調査を行った後の私の定義は次のとおりです。
コンポーネント駆動開発 コードを再利用可能でテスト可能なコンポーネントに断片化し、それらを組み合わせてビジネス機能を提供するアプリケーション基盤を形成するソフトウェア開発のアプローチです。コンポーネントの組み合わせと管理は通常、次の者に委任されます。 制御の反転 容器。
コンポーネント自体は、何らかのサービス コントラクトを実装し、このコントラクトを履行するために必要な依存関係を明示的に定義するクラスです。実際の実装は、コンポーネントの外部の誰からも隠蔽されます。
関連リンク:
私は、コンポーネントベースのソフトウェア エンジニアリングを、プラグ可能なコンポーネントを使用してソフトウェア システムを開発するアプローチとして捉えています。コンポーネントが "契約上指定されたインターフェースと明示的なコンテキスト依存関係のみを含む構成単位"、 どれの "独立して展開でき、サードパーティの構成の影響を受ける." (クレメンス・シペルスキー、"コンポーネントソフトウェア:オブジェクト指向プログラミングを超えて")
CBSE は、コードの再利用と、柔軟で適応性のあるソフトウェア システムの迅速なアセンブリを容易にします。
このテーマに何年も焦点を当ててきた実質的な研究があります。フラッグシップイベント(コンポーネントベースのソフトウェアエンジニアリングに関する ACM SIGSOFT シンポジウム)は14年目に入り、かなりの数の新しいトレンドが生まれています。
また、今日業界で頻繁に使用されている、再利用可能、プラグ可能、拡張可能なコンポーネントの良い例が必要な場合は、以下をご覧ください。 MS エンタープライズ ライブラリ.
コンポーネント (またはその他の再利用可能なアセット) をアプリケーションに組み合わせることに興味がある場合は、以下も参照してください。 ソフトウェア製品ライン 方法論。
ソフトウェア製品ラインでは、コンポーネント (または下位レベルのコード要素) 間の依存関係は、それらのコンポーネントの外部で明示的に管理されます。これは通常、 機能モデル 次のようなルールが含まれています
- これら 2 つのコンポーネントを一緒に使用してはなりません (相互排他性)。
- このコンポーネントを使用する場合は、この他のコンポーネントを使用する必要があります。または (相互依存性)
- 指定されたコンポーネントのセットを任意に組み合わせて使用できます (オプション)
モデル化したい依存関係の複雑さに応じて、他のより複雑なルールも可能です。
機能モデリングの代わりに使用されることがある別のアプローチは、コード ジェネレーターを使用して、完成したアプリケーションに組み立てられるさまざまなコンポーネントを構成することです。機能モデリングとコード生成を組み合わせることも可能です。
コード生成以外にも、ドメイン固有のモデリング、モデル駆動型ソフトウェア開発、ソフトウェア ファミリなどの用語が検索される可能性があります。
Unity 3D を使用してみるまでは、実際のコンポーネント駆動開発が何なのか決して理解することはできません。これは ActiveX やこれまでに見たものではなく、これまでに見たものには別のコンポーネントの意味があります。
最近話題になっているコンポーネント駆動開発とは、次の 2 つのことを意味します。
- 物体 - これは、OOP プログラミングのオブジェクトや現実世界のオブジェクトとまったく同じです。
- オブジェクトのコンポーネント - これはオブジェクトの機能の一部、またはその能力の 1 つのようなものです。
したがって: コンポーネント - オブジェクトではありません。それは - オブジェクトの機能です.
したがって、標準的な OOP プログラミングでは、Base オブジェクトを新しい機能で拡張する必要がある場合、Base オブジェクトを継承して新しい派生オブジェクトを作成する必要があります。
コンポーネント駆動開発では、拡張オブジェクトが必要な場合は、継承せずに空のオブジェクトを作成し、それにさまざまなコンポーネントを埋め込みます。コンポーネント駆動開発にはクラスはなく、クラスがあります。 プレハブ 代わりに、これは事前定義されたコンポーネントと子オブジェクトを備えた事前定義されたオブジェクトです。
先ほども言いましたが、やってみないと理解できません。コンポーネント駆動開発では、常にプログラミングを使用する必要はなく、代わりにグラフィカル エディタを使用できます。また、典型的な OOP の継承地獄から解放されます。コンポーネント自体は通常のプログラミングでプログラムされますが、オブジェクトを含む上位レベルのシステムは、ほとんどの場合、エディターでコンポーネントを使用および結合し、カスタマイズされたオブジェクトの動作を受け取るだけで済みます。
したがって:コンポーネント駆動開発により、次のことが可能になります。
- プログラミングを行わずにエディターだけを使用してプログラムのロジックを作成できる優れた機能。
- OOP 継承地獄から心を解放します。開発がよりシンプルかつ迅速になります。
- コードに触れることなく、プログラムを高度にカスタマイズ可能かつスケーラブルにします。エラーやバグが少なくなります。
- 残りのシステムに大きな影響を与えることなく、特定のコンポーネントを再プログラミングするだけで、プログラムのコードの保守が容易になります。
- 等...
また、コンポーネントベース (駆動型) プログラミングは OOP プログラミングに代わるものではなく、OOP または通常のプログラミングの上位にあることも付け加えておきます。CBP では、低レベルのコンポーネントの実装に通常のプログラミングが依然として使用されています。この記事にも CBP についてわかりやすく簡潔に説明されていると思います。 http://acmantwerp.acm.org/wp-content/uploads/2010/10/componentbasedprogramming.pdf