2

私のプロとしての人生で初めて、基本的な汎用ソフトウェアと、顧客が望むように動作させ、顧客が入力をフィードして出力を読み取れるようにするインターフェイスを含む DLL を顧客に提供する必要があります。

ここでの私の大きな問題は、知的財産のために、顧客が絶対に知る必要のないものを顧客に見せない可能性があることです. これにはデータ型が含まれるため、内部メソッドの署名を彼に示すことさえできません。私は、私たち自身の内部のものを模倣するデータ型と構造を作成しましたが、たとえば、不要な属性/要素を自発的に省略したり、プライベートな内部ロジックへのヒントを隠すために別の名前を付けたりします。そして、データを取得するメソッドは、独自のデータ構造をマップし、それらに型付けします。あなたは絵を手に入れます。

また、今回は純粋なソフトウェア アーキテクチャの観点から、特定のメンバー、属性、変数にアクセスしてほしくありません。喜んで、彼がどのように喜ぶか。ただし、それらはそのインターフェイスにのみ関連しており、社内ソフトウェアの一部ではありません。

私が今持っているのは、彼がインスタンス化できるインターフェイスとして機能するクラスです。基本的には、出力用の get メソッド、入力をフィードして更新計算を起動するメソッド、およびその他のパラメーターと値 (ソフトウェア バージョンや現在の状態など) 用の getter と setter を提供します。これらのパラメータおよびその他の変数の実際のデータ変数は、DLL にコンパイルされる私の CPP ファイルに隠されているため、私が彼に渡す H ファイルのインターフェイスとして使用するクラスの属性としてさえ宣言されていません。プライベートとして、彼はそれらについて知りません-彼はゲッターとセッターしか持っていません。

ここでどのデザインパターンを使用する必要がありますか? 顧客と共有する H ファイルに変数をクラスの属性として、 private として実際に配置できますか? しかし、その後、彼はそれらをプライベートからパブリックに変更し、クラスの新しいメソッドを記述し、それらにアクセスして、コンパイラが文句を言うことなく自由に変更できるでしょうか? それ以外の場合、クラスに貢献して、CPP ファイルまたは彼がアクセスできない他の H ファイルでそれを拡張できますか?

それは私にとってすべて新しいものなので、非常に多くの質問があります。しかし、全体像はわかります。厳密に必要な最小限の情報をこの H ファイルで顧客と共有して、顧客が私の DLL を機能させ、データ出力を取得できるようにしたいと考えています。そしてもうありません。

前もって感謝します、チャールズ

4

2 に答える 2

4

まず、純粋な C インターフェイスを使用して DLL を構築することを検討する必要があります。これは、DLL 境界で STL クラスとの C++ インターフェイスを使用することは非常に制約が多いためです (たとえば、クライアントは同じVisual C++ コンパイラ バージョンを使用し、同じ CRT フレーバーに動的にリンクする必要があります)。 DLL のビルドに使用した)。

この時点で、C++ 実装 (DLL でコンパイルされ、バイナリとして提供される) をシールド/非表示にする薄いレイヤーを自由に開発できます。

また、DLL によって公開された C インターフェイス レイヤーを C++ オブジェクト指向の方法でラップできる単純なパブリック ヘッダー ファイルを提供することもできます (Win32 の純粋な C API 関数に対して行う ATL および WTL のようなものです)。

于 2016-10-06T09:58:01.797 に答える
2

ここでどのデザインパターンを使用する必要がありますか?

詳細については、 pimpl イディオムを参照してください。

顧客と共有する H ファイルに変数をクラスの属性として、 private として実際に配置できますか? しかし、その後、彼はそれらをプライベートからパブリックに変更し、クラスの新しいメソッドを記述し、それらにアクセスして、コンパイラが文句を言うことなく自由に変更できるでしょうか?

はい、そうします。pimpl を使用しても可能ですが、はるかに難しく、リバース エンジニアリングが必要です。

于 2016-10-06T09:30:44.633 に答える