1
我有一個數據訪問對象庫,負責設計邏輯層。在此圖層中,我可以訪問核心數據模型,我需要使用該模型創建可以傳遞給用戶界面進行渲染的對象Profile
。根據封裝對象的類型初始化派生類
數據模型中需要對應的Profile
對象的每個對象都來自Page
類型。所以理想情況下,我需要編寫一個方法來接受一個Page作爲參數並返回一個Profile。然而,這並不是那麼簡單,因爲Profile
對象被分成多組應用程序,用戶可以啓用它們。
我已經嘗試了各種不同的方法(和繼續刪除一大堆並重新開始!),但在這裏我想此刻的解決方案:
public interface IApp
{
//should be static, but interfaces cannot define static properties
//so this instance property will return a private static field
Dictionary<Type, IProfileCreator> Profiles { get; }
//other things the App contains that isn't relevant to the profiles
}
public interface IProfile
{
Page page { get; set; }
}
public interface IProfileCreator
{
IProfile Create(Page page);
}
public class ProfileCreator<TProfile> where TProfile : IProfile, new()
{
IProfile IProfileCreator.Create(Page page)
{
return Create(page);
}
public TProfile Create(Page page)
{
//constructor will have to be blank because of the new() constraint
TProfile profile = new TProfile();
profile.Page = page;
return profile;
}
}
我得相當創建24大Profile
不同頁面的類,所以我只想確保我在開始編碼之前以最好的方式做到這一點。正如你可以看到這個設計有一些缺陷,但是有沒有更好的方法來做到這一點?有沒有人嘗試過類似的東西(這種情況不可能是罕見的,可以)?
謝謝你的回答。雖然我很困惑。你可以在'Main()'方法中擴展一下你的示例用法嗎? – Connell
我不知道要添加什麼,它完全取決於您的應用使用他們的配置文件的方式。這裏的事情是使用一個工廠,因爲某個類的實例太複雜了。 – Arthis
這只是twigged ..爲什麼我沒有看到這3小時前?!事實上,我爲什麼沒有想到這一點呢?!謝謝 – Connell