2011-10-24 66 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)。

相關問題