Mementoパターンを使用するのが良い方法の1つです。たとえば、擬似コードの場合:
プロパティを持つフォームがあるとします。あなたは、ファイルシステムに格納し、それを取得することができ、フォームはもちろん、メモリを多用であり、あなたはまた、XML属性を使用してForm1Memento
を飾る場合は、今すぐ
' declare memento interface
Interface IForm1Memento
' declare properties here
. . . . .
Sub SetMemento()
Sub GetMemento()
End interface
' inherit in form
public class form form1
inherits IForm1Memento
. . . .
Sub SetMemento
dim m As IForm1Memento = MementoFactory.Get(me)
' here you can do property by property or create reflection based hydrator
' or use AutoMapper (free product) to fill memento object (see below)
MementoStorage.Store(key, m) ' this could be a global dictionary or cache like nCache
end sub
Sub GetMemento
dim m As IForm1Memento = MementoStorage.Retrieve(key)
' again, here hydrate your form from memento
end sub
end class
' inherit interface in memento object
public class Form1Memento
inherits IForm1Memento
' here ho same property implementations as in form1
end class
を「思い出し」あなたの特性を持つようにしたいではなくフォーム次回のアプリ起動時にまた、必要に応じてJSONを使用することもできます。
だから、私たちは何の結果を得ましたか? - フォームが終了し、終了して読み込むことができます。実際には、form.load
に記念品をロードし、form.closed
に保存することができます。あなたのメモをファイルシステムに保存したり、キャッシュ、辞書、リストなどのメモリに保存することができます。
あなたはすでにそれらをどこかに移動することを排除しました。 '#Region'について知っていますか?より多くのOOアプローチは、クラスを使用して、Actor(Customer、Player、Game、Order、Productなど)に関連するデータを格納、管理、検証、保存、ロードすることです。フォームは、そのようなものがユーザーに情報を表示または表示する方法であり、その質問は無関係です。 – Plutonix
私はあなたが何を意味しているかを理解していると思います。私はまだそれの周りに私の頭をラップしようとしています。私は公共の財産を持たないfrmOneを持っているとしましょう。私はdataOneというクラスを作成することができます。それはpublicプロパティです。frmOneが作成されたときに呼び出すか、saveで保存してfrmOneを閉じることができます。それは簡単ですか? – Josh
'dataOne'と' frmOne'はちょっと抽象すぎます。ブラックジャックのシンプルなゲームを考えてみましょう。あなたはカードの '{ランク、スーツ、バリュー、イメージ} 'を示すカードクラスを持っているべきです(そうすべきです)。それは簡単です。デッキクラスには、52個のコレクションを作成し、靴を作るためにシャッフルしたり、ムックを収集したり、カードを扱ったりするタスクがあります。 Gameクラスは、特定のパラメータ(Easyレベル= 1デッキシュー、Med = 3デッキシューなど)を指定することができます。それは5カード引っ張り、7カードスタッドかテキサスホールデムかを制御するかもしれません。さて、フォームはどのようにその中で役割を果たしますか? – Plutonix