1

MVCパターンのように、GUI/データ/ロジックコンポーネントを分離する必要があるといつも聞いています。だから、私は疑問に思っています:GUIアプリケーションでは、実際にデータをどこに保存しますか?

次に例を示します(C#の用語を使用)。
ユーザー入力を受け取り、分析を行い、結果をテーブルに表示するGUIがあるとします。
ユーザーは1つのウィンドウで複数の分析を行うことができるため、下部にListViewがあり、ユーザーは現在表示されている分析を選択できます(選択した項目が表示されます)。

これを表示するには、分析データをどこかに保存する必要があります。
私はいつも2つのことのうちの1つをしました:

  1. すべてのデータを1つのオブジェクトに入れ、ListViewItemの「Tag」プロパティに保存します
  2. 「ListViewItem」を拡張し、必要なプロパティを追加するだけです。

ただし、これは、ListViewItem内にデータを保存していることを意味します。データを追跡するためのより適切な場所はありますか?

メインフォームにプライベートメンバーとして追加することもできますが、それは同じように思えます。私が考えることができる他の唯一のことは、必要なときにいつでも参照できるグローバルクラスを作成することです。

ありがとう。

4

1 に答える 1

1

私が理解しているように、あなたはいくつかのListViewItemsを持っています。各ListViewItemはビジネスロジックオブジェクトに関連付けられており、ListViewItemの1つを選択した後、このビジネスオブジェクトに対していくつかの操作を行います。同様の状況で、私は通常、データオブジェクトを次のように作成します

struct MyDataObject
{
   string Id;//very often data object need to have Identifcator, but not always
   //some fields
}

通常のユーザー入力用にデータオブジェクトコンストラクターに追加します。

その後、ビジネスロジックレイヤーにこのデータオブジェクトで使用可能なアルゴリズムが含まれるようにします。単純なプロジェクトの場合、これは次のような静的クラスです。

static class MyDataObjectOperationService{
    void MakeSomething(MyDataObject myDataObject);
    object GetSomething(MyDataObject myDataObject);
    ...
}

通常はである大きなプロジェクトの場合interface。また、私は通常、interfaceこのデータオブジェクトを取得するためのデータレイヤーを作成します。例えば

interface IMyDataObjectRepository{
  IList<MyDataObject> GetAll();  
  MyDataObject GetById(string id);
  //CRUD operations if it need
}

その後、データオブジェクトのListViewItems IDを入力し、ListViewItemClickで選択IDを取得します。その後、データレイヤークラスを使用してIDごとにDataObjectを取得し、ビジネスロジックレイヤークラスを使用していくつかの操作を行います。DataObjectの変更を保存する必要がある場合、またはデータレイヤークラスを使用して新しいDataObjectを作成する必要がある場合。

于 2013-02-19T18:00:29.073 に答える