1

ビューに完全に依存しないC++ アプリケーション フレームワークを作成したいと考えています。理想的には、「フロントエンド」として次のいずれかを使用できるようにしたい

  1. Qt
  2. ウェブフロントエンド

Web ツールキット (wt) などの開発は認識していますが、次の理由の少なくとも 1 つにより、これらを回避したいと考えています。

  1. 彼らはcgi / fastcgiアプローチを使用します(Apacheを使用する場合)

  2. 私の知る限り、彼らはあなたに「フロントエンド」フレームワークを課しています。好きな Web フレームワークを自由に使用できるようにしたいので、多くの一般的で確立されたテンプレート フレームワーク (Smarty など) の恩恵を受けることができます。

この場合、MVC パターンのいくつかのバリエーション (どのバリエーションかは不明) がうまく機能すると思います。

これが私が進めるつもりの方法です:

  • モデルとコントローラー層は C++ で実装されています
  • プラグインはコントローラーとビューの間に配置されます
  • ビューは、QT またはサードパーティの Web フレームワークを使用して実装されます
  • ビュー (フロントエンド) とプラグインの間の通信は、次のいずれかを使用して行われます。

    私。QT フロントエンドのイベント

    ii. Web フロントエンドの AJAX/PUSH メカニズム (ここで backbone.js を使用できるのではないでしょうか?)

上記で説明したパターンの名前はありますか? また (コーディングを開始する前に)、注意すべき落とし穴/パフォーマンスの問題 (ネットワーク遅延以外) はありますか?

4

1 に答える 1

1

その音から、これはコントローラーとビューの間のブリッジを実装するプラグインを備えた MVCです。特にブリッジを設計の一部として持つ MVC のバリアントを見つけることができませんでした。ただし、それらのいずれも、ブリッジまたはその他のパタ​​ーンが MVC のコラボレーションまたは実装を妨げるものではありません。

これを実装する際の難しさは、ブリッジの抽象化に起因する可能性があります。次のことが難しい場合があります。

  • 実装の詳細が抽象化に影響を与えないようにします。たとえば、実装Aにのみ意味のあるエラー コードが実装にAあり、実装Bに似ているが異なる条件で発生するエラー コードがある場合、あまり意味を失うことなくエラーが抽象化を通過するにはどうすればよいでしょうか?
  • 実装間の動作の違いを説明します。これには一般に、抽象化の事前条件と事後条件が満たされるように、抽象化される実装をしっかりと理解している必要があります。たとえば、実装Aが非同期読み取りをサポートし、実装Bが同期読み取りのみをサポートする場合、スレッド化を考慮して抽象化レイヤーで何らかの作業を行う必要があります。
  • デカップリングとパフォーマンスの間で許容できる妥協点を見つけてください。バランスをとる行為になります。いつものように、時期尚早の最適化は避けるようにしてください。多くの場合、高性能コードを分離するよりも、パフォーマンスのために少しカップリングを導入する方が簡単です。

また、デカップリングに役立つ他のパターンを活用することも検討してください。たとえば、具象型Fooを抽象レイヤーを介して渡す必要があり、実装Aがそれを にFoo_A変換する一方で、実装がそれを に変換する場合Foo_B、プラグインがAbstract Factoryを提供することを検討してください。 Fooは と の抽象基本クラスにFoo_AなりFoo_B、プラグインは を実装するオブジェクトを作成するためのファクトリを提供しFoo、コントローラーがプラグインが期待する正確な型を割り当てることができるようにします。

于 2012-07-11T21:45:26.910 に答える