【发布时间】:2014-12-30 23:20:10
【问题描述】:
对 C# 比较陌生,正在寻找执行以下操作的“最佳实践”方式:
我有一个带有公共方法的类(传感器),例如“CommunicationStart”、“DoThing1”、“DoThing2”。
在调用这些方法之前,该类配置了一个传感器“模型”
根据模型,公共方法应该采用不同的代码路径。如果我要静态地执行此操作,则在每个公共方法中打开模型就可以了。
我想动态地执行此操作以帮助获得长期支持。在每个公共方法中包装动态加载的代码的“正确”方法是什么?反射?代表?动态加载的函数应该放在哪里?它们应该与其公共包装器在同一个类中,还是位于一个新类中?
我更多的是寻找“正确”的方法和组织,而不是语法,因为我可以自己解决。非常感谢!
【问题讨论】:
-
这个问题太抽象了,无法回答。你预计会有什么样的差异?在某些情况下,值得让不同的类实现相同的接口,并从工厂返回一个具体实例。在某些情况下,您可能希望传入该类将调用的承包商对象,每个对象都做不同的事情,但都共享一个接口。有时一个简单的开关是最好的。
-
为什么不能创建一个继承这个旧类的新类?
-
我明白了。您建议“传感器”成为我定义需要实现的方法的基类,然后在每个“模型”的子类中覆盖它们?如果两个“模型”有一堆具有相同实现的方法,我将如何避免代码重复?
-
所以我现在喜欢的解决方案是为我定义“公共方法”=“模型特定方法”的每个“模型”创建一个查找表。然后,我将使用反射将动态调用包装到公共方法中的“模型特定方法”中。这将允许我在模型之间共享某些方法,同时可以灵活地根据需要为做不同事情的新模型定义新的代码路径。现在,我将把“特定于模型的”方法与传感器放在同一个类中。 C# 社区如何看待这一点?可以接受吗?还是不寻常?
-
看起来像是strategy pattern的候选人
标签: c# dynamic reflection