VB6アプリケーションでクラスを再利用するにはどうすればよいですか?
-
05-07-2019 - |
質問
まず、私はVB6を使用しているので、VB6に適用されるテクニックにあなたの親切な提案を限定してください。
上記の図に示すように、相互に関連する一連のコントロールがあります。いくつかのツリービュー、分割バー、リストビュー、サブフォーム(ユーザーコントロール)などが含まれます。
左側のツリービューノードをクリックまたは変更すると、それに応じて右側のコントロールの表示が変更され、その逆も同様です。
舞台裏のデータはAccessデータベースに保持されます。
このデータ管理と表示のセットは、いくつかの異なるアプリケーションで使用されます。そのため、ロジックを実装し、これらのクラスモジュールをアプリケーションに何度も含めるためのクラスをいくつか作成しました。
だから私は実際に「コピー&ペースト」でクラスを再利用しています。モード。動作しますが、問題があります。クラスを変更した場合、いくつかのアプリケーションで変更する必要があります。
最近、これらをいわゆるActiveXコンポーネントにすることを考えています。しかし、アーキテクチャ全体を再利用するためにどの種類のActiveXコンポーネントを開発する必要があるかはわかりません。
簡単に言えば、「コピーして貼り付ける」だけでなく、どのようにしてもっと優雅に再利用できるかを知りたいです。以下は、新しい「優雅な再利用」のアイデアや期待ですが、それらに限定されません。
(1)設計時にプロパティページを設定できるように、プロパティページを持つActiveXコントロールのように見えることを望みます。
(2)異なるアプリケーションの場合、右側のサブフォームには異なる情報が表示され、異なるコントロールがあり、追加のコーディングと設計が必要になる場合があります。
(3)また、さまざまなアプリケーションのツリービューとリストビューのいくつかの新しい動作をコーディングする必要があります。この要件により、フォーム全体のユーザーコントロール全体が適切ではなくなります。 MSDNは“ ActiveXコントロールへの参照,がクライアントアプリケーションに返されるべきではないと言ったため。"
解決
- ActiveX DLL(コントロールではない)を作成します
- フォームのインターフェースを定義する
DLL - すべてのロジックをDLLの1つ以上のクラスに移動します インターフェースを介してルーチンとフォームを対話させます
- インターフェイスをフォームに実装する
- アプリの1つの初期化で、フォームがActiveX DLLに登録されます
これにより、異なるアプリ間でのコピーと貼り付けが効果的に排除されます。
たとえば、金属切削アプリケーションの場合、Shape Form、Shape Screenクラス、および多数のShapeクラスがあります。シェイプクラスの2つのメソッドは、ShapeScreenタイプのパラメーターを持つDrawScreenと、ShapeScreenタイプのパラメーターを持つGetValuesです。
DrawScreenは、ShapeScreenのメソッドを使用して入力画面をセットアップし、Shape ScreenはIShapeFormインターフェイスを介してフォームをセットアップします。 GetValuesは、Shape Screenメソッドを使用して入力された形状値を取得し、IShapeFormを使用してフォームから値を取得します。
このセットアップは、顧客の要求に応じてさまざまな形状入力フォームを開発する必要がある場合に役立ちました。新しいフォームはIShapeFormインターフェイスを実装したばかりで、残りのソフトウェアは変更されていません。
他のヒント
各コントロールをユーザーコントロールにカプセル化し、仮想ActiveXコントロール(ビジュアルインターフェイスなし)を作成して、これらのコントロールを1つにまとめる必要があるかもしれません。
これは、ビュー、ドメインロジック、およびデータのように見えます。私が予見するあなたの主な問題は項目2です。アプリからアプリへの外観とロジックは静的ではありません。たぶん必要なのは2つの別々のコントロールですか?左パネルと右パネル。右側のパネルはおそらく静的なものではないため、何らかのタイプのコントロールの配列を実装します。