2013-04-07 30 views
-3

每当使用设置向导时,用户都会回答很多不同的事情,直到真正的安装启动。将其与当前项目中的类进行比较:我有一个需要多个配置步骤的类。它不适用于安装程序,但我认为安装程序向导是解释所需更大配置功能的好方法。 我想找到一个好的设计解决方案。其中'设计模式'适用于具有复杂(多步)配置的类

我目前的解决方案处理办法:

  1. 平:我可以定义与列为方法/功能/性能的所有步骤,一个大班。在调用错误的方法时,可以添加几个控制方法来抛出异常。它会做它的工作,但程序员会看到这么多不同的方法会感到困惑。 ( - >他需要更多时间来了解它是如何工作的)

  2. 层次结构:我可以为每个配置步骤创建约3个不同的类。每个人都有自己的方法和功能。最后,一个类需要在其构造函数中包含所有3个配置类的实例。这看起来不会太混乱,因为只有正确的方法在每个类中都可见。然而,程序员可能会感到烦恼,一个小班需要如此复杂的准备工作,并创建3个其他班级。也许是嵌套类,但我认为这也是一种糟糕的编码风格。

我不知道是否有人已经有这样的问题出现,可以通过回答这个..要么提供一个合适的设计模式,或者这样的问题的一些经验/最佳实践类结构。

我已经搜索了类似的问题,检查了一些可能适合的设计模式,并且已经提供了2个方法思路来展示答案可以沿着什么方向发展。如果您认为答案不够清楚,请评论/询问有关缺失的部分。

+0

问题是有可能涉及,根据您的具体要求是什么设计模式的无限可能,确切的领域,我们不知道他们。你应该找到一个项目,在那里有一个向导阅读源代码。它们通常涉及某种状态模式。 – mpm 2013-04-07 15:55:22

+1

如果一个类有很多事情要做,这表明已经有一些设计缺陷。你能详细解释一下这个复杂的引导过程吗?因为如果已经存在一些问题分离的问题,那么您可能会发现没有金锤可以将其转化为良好的设计。 – 2013-04-07 16:00:59

+0

@mpm感谢您的解释。我正在使用VB.Net/C#,而不是向导的功能,一个类应该很容易使用,但是这个类需要多个配置步骤。使用状态模式,我可以为相同的方法调用更改操作,但如果方法在每个步骤中更改,那么我想我不能使用它。我在当前项目中定义了多个枚举,然后选择从数据库访问哪一个枚举。方法应该提供结果字符串列表(索引相关)。在此之后,'配置'完成,并且该类应该充当索引查​​找表 – Amegon 2013-04-07 16:07:31

回答

0

从问题和评论中所解释的问题来看,“单一类统治他们”的方法似乎并不是一个好的选择。

也许某种策略模式是这里要走的路。

根据您的要求,您可以从不同的策略中进行选择,而不是对单一课程进行非常复杂的设置。如果您已经知道 将会发生三种不同的事情,请制定三种不同的策略。

举个例子: 你想写日志数据。也许对文件,数据库或web服务。

那么你只有一个依赖于具有 明确定义的接口“LogWritting战略”,可以说

interface ILogWriter 
{ 
    void Write(enum LogLevel, string logEntry); 
} 

现在,在您的客户端代码,您取决于该接口上,只是拨打电话在界面上。但在运行时,您根据“配置”“注入”具体策略。

I.e.你只需选择合适的策略,并且你没有复杂的单个类的引导。

然后你用具体的战略就像

IDatabaseLogWriter 
IFileLogWriter 
IWebServiceLogWriter 

大约是可以在这里找到什么样的策略的简要说明:从最近的评论,我认为 Strategy pattern

更新

存储库和映射模式都可以提供帮助。

你应该考虑寻找

Repository pattern, good explanation

Repository explanation by Martin Fowler (top notch architecture)

Metadata mapping

+0

存储库外观有趣。包含dataMapping的Controller类。但问题是,在我的情况下,这种额外的数据访问层已经存在。它的配置(数据映射器用数字表示总是相同的字段)并不那么简单,很难扩展。所以我正在寻找一种模式来使数据映射器的配置更加简单。现在,添加字段需要我在映射器内的三个不同位置更改代码。因此,我想要一个关注配置的类,并且类本身应该是“容易”更改的。 – Amegon 2013-04-07 19:54:32

+0

也许你想看看http://martinfowler.com/eaaCatalog/dataMapper.html和http://en.wikipedia.org/wiki/Data_mapper_pattern代码示例包含在第二个链接 – 2013-04-07 21:05:25

+0

感谢您的建议,我检查回答,因为你是对的,一个结构良好的数据映射器不应该有这样的配置问题。但是,我正在使用工厂和生成器模式的混合。 – Amegon 2013-04-08 12:31:05

相关问题