2011-10-24 5 views
0

これはまさにMVCパターンなのかどうか分かりませんが、私がしようとしているのは、すべてのデータレイヤー(いくつかの言葉ではXMLファイルにシリアライズされるもの) 。 MVCを実装することは、私の目的ではありません。だから、これがまさにMVCでないなら、私はそれでいいです。すでに混合されている場合、コントローラとモデルを分離する方法は?

言ってやるが、例えば、私はこのクラスを持っている(これらは私の問題を説明しようとするだけのサンプルクラスではなく、私の実際のクラスである):

public class MixedSubClass 
{ 
    public string SomeData {get;set;} 

    public void DoSomeActionWhichRequiresControls(Control someControl) 
    { 
     // do stuff    
    } 
} 

public class MixedClass 
{ 
    private Control _SomeControl; 

    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>(); 
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } } 

    public MixedClass(Control someControl) 
    { 
     _SomeControl = someControl; 
    } 

    public void DoSomeMoreActionsWhichRequiresControls() 
    { 
     foreach (var subClass in SubClasses) 
     { 
      subClass.DoSomeActionWhichRequiresControls(_SomeControl); 
     } 
     // Do more stuff 
    } 
} 

私はMixedClassをシリアル化するときだから、唯一の公共のフィールドはシリアル化された取得しますそれは私が望むものです。しかし今では、Windows.Formsアセンブリを必要としない唯一のデータレイヤーが必要です。私はこれと一緒にいたい:

public class MixedSubClass 
{ 
    public string SomeData {get;set;} 
} 

public class MixedClass 
{ 
    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>(); 
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } } 
} 

これをすべて独立したアセンブリに入れてください。しかし、今私の問題は、これを前のものに戻す方法です。私が最初に考えたのは、拡張メソッドを使用していたのですが、私のサンプルコードでわかるように、ときどきControl _SomeControlのような、シリアル化できない値を保存する必要があります。実際のところ、これらのリストはリスト、ツリー、それほど複雑なもののリストなので、私が始める前に良い基礎が必要です(実際にはすでに自分のすべてのデータレイヤーを持つプロジェクトがあり、Windows.Formsしかし、今私はそれを一緒に戻すのに問題があります)。

これはどのように処理しますか?この方法でデータレイヤーを分割しないでください。

答えて

0

これまでのところうまくやっていると思います。データレイヤでは、UIコントロール(winform、webなど)の参照は絶対に行わないようにする必要があります。

投稿した内容に基づいて正確なコードサンプルを提供することは難しいですが、データ(別名モデル)をユーザーインターフェイス(別名ビュー)にマッピングする一連のコントローラのようなクラスを追加する必要があります。 。データオブジェクトとUIオブジェクトの両方への参照を保持し、削除した作業を実行するものにする必要があります(DoSomeActionWhichRequiresControls)。

関連する問題