我有一个类可以对给定对象执行许多分析并返回结果集:
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 等)。然后,用户将勾选他/她想要执行的操作,然后单击“运行”按钮。
理想情况下,我希望将 Action 公开为动态的 - 因此,如果我在我的 AnalyserClass 中开发一个新 Action ,它将自动显示并可以从 WinForm 执行,而无需在其他任何地方进行任何代码更改。
我是一个相当新的 C# 程序员。我一直在研究如何最好地构建它,我对各种模式以及最适合使用的模式有点困惑。
首先,我阅读了 MVVM 模式,但这似乎比这里要求的要复杂,我不明白模型是什么。
然后我查看了命令模式。但据我了解,我必须为每一个 Action (有很多)创建一个类包装器,这将非常耗时并且似乎有点麻烦(在多个地方更改代码,所以不是“动态的”) .我也不明白如何从命令类构建复选框列表。这似乎是我能找到的最合适的模式,但由于缺乏经验,我不确定。
非常感谢您的指导。
最佳答案
我不会在这里选择反射,因为它使事情变得不必要的复杂。
此外,使用您当前的方法,您需要扩展您的 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
的构造函数中(简单但不推荐)关于c# - 公开可用操作的正确模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849517/