1

注文のコレクションがあります。データベースに一度アクセスし、注文を取得して保存し、複数のフォームでこのコレクションにアクセスできるようにしたいと考えています。asp.net では、Application Object や Session Object などを使用できることは知っていますが、win フォーム アプリではどのように行うのですか? 複数のフォーム、クラス、またはどこからでもアクセスできる静的コレクションを作成することを考えていました。これは正しいと思いますか?それは実現可能ですか?

ありがとう

4

2 に答える 2

1

WebForms と WinForms の根本的な違いは、WinForms がステートフルであることです。言い換えれば、一度ロードしたオブジェクトは、プログラムがシャットダウンされるまで利用可能であることを保証できます。HTTP はステートレスであり、ASP.Net は Web アプリケーションのページを結合するために多くの「魔法」[ViewState、サーバー セッション、Cookie、非表示フィールドなど] を織り込んでいるため、同じことは WebForms には当てはまりません。

この方法の基本的な概念を使用すると、オブジェクトを WinForms でグローバルに使用できるようにするのは簡単です。Singleton / Static クラスを使用し、そのメンバーを割り当てます。いつでも .Instance.. [静的クラス/静的プロパティを持つクラスの場合] と言って、任意のフォームから値を取得できます。

1つの問題は「スレッドセーフ」です...別名..複数のフォームが同時に静的プロパティを読み書きします。これに気をつければ、休むのは簡単です。

上記の問題の場合:

レコードをキャッシュする独自の Singleton Cache クラスを持つことができます。Cache クラスは、カスタム コレクションの実装になります。スレッドセーフであることを確認する必要があります[または、アプリケーションが一度だけ読み込まれ、それ以降は読み取られるようにする]...データベースへの変更をエンティティオブジェクトに反映させたい場合は、本格的なORMを検討する必要があるかもしれません.

CacheList.OrderCache[orderNo].Customer.Address.City = "Las Vegas";

class static CacheList { public static Cache OrderCache {get; internal set;}

}

public class Cache : CollectionBase where T : Entity { .....

}

于 2008-12-12T18:36:04.027 に答える
0

とにかく、データベースにアクセスするデータオブジェクトが必要ですよね? それを CacheProxy クラスにラップし、ローカル コピーがない場合にデータベースにアクセスします。System.Web キャッシュは Winforms でも使えるそうです。

于 2008-12-12T18:15:35.910 に答える