私の C++ アプリケーションの大部分は、クラスを使用してデータ モデルを記述します。たとえば、ClassType (プレーンな C++ でリフレクションを実際にエミュレートします) などです。
アプリケーションに新しいモジュールを追加したいのですが、これらの ClassType を使用する必要がありますが、新しいモジュールから ClassType への依存関係を導入したくありません。
これまでのところ、次の代替手段があります。
- 独立させずに ClassType への依存関係を導入すると、アプリケーションに「スパゲッティ」依存関係がさらに作成されるリスクがあります (これは私の最も好ましくないソリューションです)。
- IType などの新しいクラスを導入し、モジュールが IType のみに依存するようにします。ClassType は IType から継承する必要があります。
- 識別方法として文字列を使用し、新しいモジュールのユーザーに、必要に応じて ClassType を文字列に、またはその逆に変換するように強制します。
- GUID (または単純な整数) を ID として使用し、GUID と ClassType の間の変換も必要
アプリケーション内のモジュールを切り離すときは、どこまでやるべきですか?
- インターフェイスを導入して、他のすべてのモジュールがインターフェイスに依存するようにするだけですか? (上記の IType のように)
- 文字列や GUID などの他の ID を使用して、さらに分離することはできますか?
デカップリングしすぎると、コードが不安定になり、デバッグが難しくなるのではないかと心配しています。Qt でそのような例を見たことがあります。シグナルとスロットは文字列を使用してリンクされており、タイプミスをすると機能は動作しませんが、それでもコンパイルされます。
モジュールをどこまで切り離す必要がありますか?