0

私はもともと VB6 で書かれたアプリケーションの保守を任されています。その後、VB .Net にインポートされました。控えめに言っても、コードはオブジェクト指向ではありません。コードは、Public Shared 属性 (変数) とメソッド (関数) しか含まないクラスでいっぱいです。その結果、アプリケーションが一度に複数のプロジェクトを開くことが制限されます。

プロジェクトは、一般的なプロジェクト設定を含む XML ファイルと、他のプロジェクト関連データを含む Access データベースの場所で構成されます。何年にもわたって XML ファイルの形式が変更され、更新およびバージョン管理戦略が採用されました。選択した戦略は、古いバージョンが検出されるたびに、開いたときに更新を実行します。これまでの更新は、XML ファイル内のデータの再配置、データベース スキーマの変更、および XML ファイルからデータベースへのデータの移動のみで構成されていました。

OOP のバックグラウンドがかなりあるので、プロジェクトは、他のオブジェクトが相互作用する自己完結型のオブジェクトであるべきであることが容易にわかります。ただし、選択した更新戦略を OOP に適用する方法がわかりません。

選択した更新戦略を OOP で実装するという問題により、私はまだ OOP を使用できませんでした。誰かがそのようなタスクの経験がある場合、または進め方についての推奨事項がある場合は、あなたが提供できる支援をいただければ幸いです.

4

3 に答える 3

1

XMLファイルを読み込み、そのファイルのデータに基づいてプロパティ/メソッドなどを提供するクラスを作成します。クラスがXMLファイルを書き戻すときは、新しいバージョンに必要な方法でフォーマットします。

したがって、基本的に、クラスは現在のバージョンに加えてすべての古いバージョンを読み取ることができますが、常に新しいバージョンを書き出します。

データは、何かが必要になるたびにXMLファイルをスキャンするのではなく、クラスの内部変数に保持されます。

この場合、XMLファイルにVERSIONノードを追加することも役立ちます。

于 2008-09-17T16:36:17.527 に答える
0

なぜこれが厄介な問題なのか理解できません。いくらでも解決できます。

完全なオブジェクト指向のエンタープライズ タイプのことを行いたい場合は、次のソリューションの任意のサブセットを使用できます。

  • 他のオブジェクトがプロジェクトとどのように相互作用するかを記述するインターフェイス IProject を作成します。
  • IProject を実装し、現在のバージョンに対して読み書きできる Project の現在の実装を作成します。
  • 過去のバージョンごとにプロジェクトを拡張し、xml およびデータベースの読み取りメソッドをオーバーライドし、これらのクラスがインスタンス化されたときにコンストラクターが書き込みを呼び出すようにします。
  • エンタープライズ性をさらに高めるには、ファイルのバージョンを検出し、正しいバージョンをインスタンス化する ProjectFactory を作成します。
  • さらにバージョンが必要な場合は、現在のプロジェクトを書き直して、過去のプロジェクトと同じことを行い、すべての読み取りでプロジェクトの新しいバージョンにアクセスしてから、書き込みを呼び出します。

このソリューションの利点は、さまざまなバージョンを使い続けることができ、新しいバージョンごとに、以前のバージョンから更新する機能のみが必要であり、以前のすべてのバージョンが最後から 2 番目のバージョンにカスケードすることです。

于 2008-09-17T16:53:40.810 に答える
0

戦略という言葉 (つまり、戦略デザイン パターン) を使用したとき、あなたは自分自身の質問に答えたかもしれません。

おそらく、次のことができます。

  • 変換について何も知らないが、戦略オブジェクトを受け入れるプロジェクト クラスを作成します。
  • クラスの階層を作成して、考えられる各変換戦略をモデル化します。
  • ファクトリ メソッドを使用して、適切な戦略でプロジェクト オブジェクトを構築する
于 2008-09-17T16:47:53.287 に答える