[英]C#/ASP.NET MVC 4 Instantiate Object Derived From Interface In Factory Method
當前具有一個具有GetSelector
函數的Factory類,該函數返回ISelector
的具體實現。 我有幾個實現ISelector的不同類,並且基於一個設置,我希望收到適當的ISelector
。
public interface ISelector
{
string GetValue(string Params);
}
public class XmlSelector : ISelector
{
public string GetValue(string Params)
{
// open XML file and get value
}
}
public static class SelectorFactory
{
public static ISelector GetSelector()
{
return new XmlSelector(); // Needs changing to look at settings
}
}
我的問題是存儲設置的最佳方法是什么? 我知道使用AppSettings等,但是我不確定是否要在web.config中存儲字符串並對其進行切換-似乎真的緊密地聯系在一起,如果ISelector的新實現是制作,則需要更改工廠。 有沒有辦法存儲程序集名稱並基於該實例化?
謝謝,
克里斯
很難說,因為我不知道您的特定項目的體系結構,但是乍一看我會做的是, 如果可以將與ISelector關聯的對象與Web應用程序分離,我會將這些對象放在一個類庫以及工廠。 如果實現新的ISelector,則需要更改工廠,但是如果您可以將整個ISelector系列與實際的Web應用程序分離,則與單片架構相比,重構的深度將很小。
就個人而言,我傾向於避免針對關鍵任務設計問題使用AppSettings,web.config設置等。 以web.config為例,我看到了存儲體系結構數據以簡化可配置性的應用程序。 問題在於,編譯后可以更改web.config(畢竟是這樣做的目的),並且如果類的實現取決於所選擇的非常特定的值,那么當有人無意間修改時,您就有崩潰的風險。錯誤的值。
就像我說的那樣,所有這些都完全取決於您的應用程序體系結構,但是我的反思是將可能會在將來進行修改的組件拆分為一個類庫。 松耦合是你的朋友;)。
我認為不是在AppSettings中這樣做,而是一種更好的方法是創建一個單獨的XML文件,該文件僅保存映射,您可以從該文件中迭代映射並在GetSelector()
返回正確的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.