1

目前有一个具有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 的新实现是制造,那么工厂将需要改变。有没有办法存储程序集名称并基于它进行实例化?

谢谢,

克里斯

4

2 回答 2

0

很难说,因为我不知道您的特定项目的架构,但乍一看,如果与 ISelector 关联的对象可以与您的 Web 应用程序解耦,我会将这些对象放在一个类库以及工厂。如果您实现一个新的 ISelector,您的工厂将需要更改,但如果您可以将整个 ISelector 系列与您的实际 Web 应用程序分离,那么与单体架构相比,您必须进行的重构深度将是最小的。

就我个人而言,对于关键任务设计问题,我倾向于避免使用 AppSettings、web.config 设置等。以 web.config 为例,我看到了存储架构数据以便于配置的应用程序。问题是在编译后你的 web.config 可以改变(毕竟这是它的目的),如果你的类的实现取决于选择的非常具体的值,当有人无意修改时,你就有崩溃的风险错误的值。

就像我说的那样,这一切都完全取决于您的应用程序架构,但我的反应是将未来可能需要修改的组件拆分到类库中。松耦合是你的朋友;)。

于 2012-10-23T10:57:38.407 回答
0

与其在 AppSettings 中执行此操作,我认为更好的方法是创建一个单独的 XML 文件,该文件将仅保存映射,并且您可以从该文件遍历映射并在GetSelector().

于 2012-10-23T10:57:47.750 回答