我有一个类可以对给定对象执行许多分析并返回结果集:
public class AnalyserClass
{
private SomeObject _someObject;
public AnalyserClass(SomeObject someobject)
{
_someObject = someobject;
}
public IEnumerable<Result> DoA
{
//checks A on someObject and returns some results
}
public IEnumerable<Result> DoB
{
//checks B on someObject and returns some results
}
//etc
}
public class Result
{
//various properties with result information
}
public class SomeObject
{
//this is the object which is analysed
}
我想在WinForm的CheckedListBox中公开这些操作(DoA,DoB等)。然后,用户将勾选他/她想要执行的动作,然后单击“运行”按钮。
理想情况下,我希望将动作公开为动态 - 因此,如果我在AnalyserClass中开发一个新动作,它将自动显示并可以从WinForm中执行,而不会在其他地方进行任何代码更改。
我是一名相当新的C#程序员。我一直在研究如何最好地构建这个,并且我在各种模式之间变得有点混淆,哪一个最适合使用。
首先,我阅读了MVVM模式,但这似乎比这里要求的更复杂,我不明白模型会是什么。
然后我看了Command模式。但根据我的理解,我将不得不为每一个动作(有很多)创建一个类包装器,这将非常耗时并且看起来有点麻烦(在多个地方更改代码,所以不是'动态') 。我也不明白如何从命令类构建复选框列表。这似乎是我能找到的最合适的模式,但由于缺乏经验,我不确定。
非常感谢您的指导。
答案 0 :(得分:2)
我不会在这里选择反思,因为它会使事情变得多么复杂。
此外,根据您当前的方法,每次需要新的分析工具时,您都需要使用新功能扩展AnalyserClass
,并且:
我会在您的AnalyserClass
中介绍一系列支持的操作:
class AnalyserClass
{
public IEnumerable<IAnalyzer> Analyzers { get; private set; }
}
... IAnalyzer
界面描述了您的行为:
interface IAnalyzer
{
string Description { get; } // this is what user will see as the action name
Result Perform(SomeObject input);
}
然后,您可以根据需要在各种类中实现IAnalyzer
,即使在不同的模块中也是如此。
唯一的开放点是 - 如何将所有IAnalyzer
个实例添加到您的AnalyzerClass.Analyzers
集合中?
好:
AnalyzerClass
的构造函数中(简单但不推荐)