我有一堆自动生成的代码(来自Ranorex GUI测试工具),它公开了一个如下所示的公共接口:
public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder
{
// Ranorex.Button exposes public methods like Click()
public virtual Ranorex.Button ButtonYes
{
get
{
return _buttonyesInfo.CreateAdapter<Ranorex.Button>(true);
}
}
}
我的问题是我正在编写一个看起来像下面代码的中间层,我期望该代码的用户不会通过直接调用自动生成的代码来绕过它(这很可能会破坏它复杂的商业规则)
public class MyAdapter
{
private MessageBoxPopupAppFolder _myMessageBox;
public static void Acknowledge()
{
// some complex business rules
_myMessageBox.ButtonYes.Click();
}
}
我有一些解决方案,但似乎没有一个真正令人满意:
我该怎么办?
只是为了澄清:我并不担心保持我的中间件秘密,只需要控制实际点击的正确顺序。
编辑:我希望向我的团队成员(我的中间件用户)公开的是面向业务的API(如Acknowledge()
)。这可以。不好的是我不能阻止Ranorex原始API(Button.Click()
)出现。
答案 0 :(得分:1)
如果您想要安全,最好的选择将是您的第一个,使用脚本修改自动生成的代码。将脚本添加到集成构建过程中,以确保在代码重新生成时始终运行此脚本。
另外,您可以设置FxCop规则来检测您不想使用的方法调用。
如果团队很小,他们会遵循设计准则。然后,这是培训团队不使用API的问题。在您的代码审核流程中,您的团队必须查找此问题。缺点是这只是一种预防措施,你的团队成员仍然可能犯错误。在这种情况下,质量检查和代码审核将是您最好的朋友。
答案 1 :(得分:0)
Ranorex不支持修改生成成员的可见性吗?
第一名肯定听起来像是要走的路,因为它似乎直接就是你想要的。
答案 2 :(得分:0)
在我看来,你对设计的“太深入”,以优雅和完全干净的解决方案来解决这个问题。所有替代方案都有其自身的缺点,我可以建议的是为您在自己的类中公开的Ranorex类型提供适配器/外观类。然后,这些适配器将处理一些逻辑,然后将调用路由到真正的底层Ranorex对象。对于Acknowledge
示例,这将是适配器上的方法,并且您公开的公共类型将只是适配器。
理想情况下,我希望在Button类中使用Click事件,以便您可以听取它并做出相应的反应。