我正在開發一個小型的實用程序Winforms應用程序。它只是轉換一個加載到內存的文件。沒有數據庫。沒有數據庫的Winforms:使用相同有狀態類的不同表格
有一個表示該文件的有狀態類。它基本上是應用程序的數據源來代替數據庫。該類中的數據需要通過應用程序中的幾種不同形式來讀取/修改。
我該如何構建此應用程序以確保表單可以輕鬆地與該類進行通信。我的主要表單是否可以簡單地將對象傳遞給它的子表單,還是那種不好的做法?有更好的選擇嗎?
感謝
我正在開發一個小型的實用程序Winforms應用程序。它只是轉換一個加載到內存的文件。沒有數據庫。沒有數據庫的Winforms:使用相同有狀態類的不同表格
有一個表示該文件的有狀態類。它基本上是應用程序的數據源來代替數據庫。該類中的數據需要通過應用程序中的幾種不同形式來讀取/修改。
我該如何構建此應用程序以確保表單可以輕鬆地與該類進行通信。我的主要表單是否可以簡單地將對象傳遞給它的子表單,還是那種不好的做法?有更好的選擇嗎?
感謝
通過你的應用程序狀態對象的實例,以孩子的形式是可以接受的。或者,你可以使用Singleton Pattern編寫你的狀態類,這樣它就被實例化了一次(並且只有一次)。
public class MyState
{
// private constructor to stop others from instantiating the object
private MyState() { }
private static MyState instance;
public static MyState Instance
{
get
{
if (instance == null)
{
instance = new MyState();
}
return instance;
}
}
// Insert the class' methods/properties here as public, non-static
}
你也可以使用一個Dependency Injection庫提供您的狀態類子窗體。我喜歡Autofac,但還有很多其他的。
最終,最好的做法是編寫適合您應用程序需求的代碼。
最簡單的方法就是要對靜態訪問器類,它提供了訪問類爲您的整個應用程序,如:
public static class AppObjects
{
private static MyClass _myClass;
public static GetMyClass()
{
if(_myClass == null)
{
//Init/Load Object
}
return _myClass
}
}
這就是說,它是不可怕有父窗體通它的對象是子窗體。如果您希望改變相關的東西(比如您的UI結構或所需的對象數量),您只需要使用更復雜的解決方案。
您可以創建一個簡單的實例存儲庫。這樣做的邏輯是你可以從集合中檢索安裝,你還應該提供一個添加方法來添加一個實例。
樣品將
private List<object> _instanceRepo;
public TInstance Retrieve<TInstance>()
{
TInstance response = default(TInstance);
object retrieved = _instanceRepo.FirstOrDefault(x => x.GetType() == typeof(TInstance));
if (retrieved == null)
Console.WriteLine("retrieved object was null.");
else
response = (TInstance)retrieved;
return response;
}
或創建一個單,這是通過使暴露的單一實例類的靜態屬性來實現的。
也許更新您的代碼示例拋出一個異常或東西,而不是'Console.WriteLine',作爲OP使用'WinForms' – rhughes 2014-10-10 02:53:44
@rhughes好,無論如何,它並不意味着被複制:D,使它變成這樣,所以OP可以做一些事情而不是普通的複製麪食。 – DevEstacion 2014-10-10 03:32:40