1

初めての Windows フォーム プロジェクトを作成していて、ちょっとしたアドバイスを求めています。現在、私は2つのフォームを持っています。1 つはユーザーから製品情報を取得し、もう 1 つはそれをテーブルに表示します。製品のコレクションを含む在庫クラスがあります。フォームはこのコレクションをインスタンス化するべきではなく、単にアクセスできるべきだと思います。しかし、この場合、在庫クラスをどこでインスタンス化すればよいでしょうか? そして、このクラスからフォームにデータを渡すにはどうすればよいでしょうか? データバインディングの使用は許可されていないことに注意してください。

ありがとうございました

4

2 に答える 2

1

ここではシングルトン パターンを使用できます。詳しくはこちらをご覧ください。例えば

public class Inventory
{
private Inventory instance;

private Inventory() {}
public Inventory Instance { get {
if(instance == null) instance = new Inventory();
return instance;
} 
}

//other code goes here

}

その後、各フォームはこのクラスの単一のインスタンスにアクセスして操作できますInventory.Instance.someMethod()

于 2012-07-28T22:03:03.047 に答える
0

データ アクセス レイヤー (DAL) について尋ねているように思えます。

この種のレイヤーは、物理的に (異なるアセンブリ内で) または論理的に (同じアセンブリ内で異なる名前空間内で) 分離されたレイヤーをアプリケーションに組み込み、アプリケーションの残りの部分からデータのソースを抽象化することができます。このデータ ソースは、データベース、外部テキスト ファイル、または単にハードコードされたデータの場合があります。

次の例を検討してください。

public class Product
{
    public int Id { get; set; }
}

public class ProductsDAL
{
    public static IEnumerable<Product> GetProducts()
    {
        return new List<Product>(new Product[]
            { 
                new Product() { Id = 1 },
                new Product() { Id = 2 }
            });
    }
}

上記の例では、ProductsDAL クラスは、その情報を取得するためにそれを呼び出したオブジェクトから離れたところからデータが取得された抽象化を処理します。ほとんどの DAL クラスには、アクセスに使用されるオブジェクトを作成、読み取り、更新、および削除するためのメソッドがあります (一般に CRUD と呼ばれます)。

public class MyForm : Form
{
    private IEnumerable<Product> products;

    private void MyForm_Load(object sender, EventArgs e)
    {
        this.products = ProductsDAL.GetProducts();
    }
}

DAL クラスを使用すると、使用しているソースから製品を取得し、その情報をフォームにロードするように要求できます。入手した情報をどうするかは、完全にあなた次第です。利用可能な製品を反復処理して、シナリオで必要となるものは何でも、それらをコンボ ボックスやグリッドに読み込むことができます。

このアプローチを使用すると、データのソースを置き換えることができます。たとえば、私の例のハードコードされたリストから、後でデータをプルするためにデータベースやいくつかのテーブルにアクセスすることができます。その場合、ProductsDAL.GetProducts メソッドのハードコードされたリストをデータベース呼び出しに置き換えるだけです。

于 2012-07-28T22:51:38.343 に答える