如何降低自动生成代码的可见性

时间:2013-01-14 23:15:53

标签: c# visibility ranorex

我有一堆自动生成的代码(来自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();
  }
}

我有一些解决方案,但似乎没有一个真正令人满意:

  • 手动(或通过脚本)修改自动生成的代码以更改Ranorex方法的可见性。这意味着一点名称空间重构,并且很难通过代码重新生成来维护
  • 将此代码链接到一个完全独立的二进制文件中,并通过真正的私有API与其进行通信。未来有很多工作
  • 实施某种代码自我评估,检测并报告(作为单元测试失败)该API的任何“禁止”使用

我该怎么办?

只是为了澄清:我并不担心保持我的中间件秘密,只需要控制实际点击的正确顺序。

编辑:我希望向我的团队成员(我的中间件用户)公开的是面向业务的API(如Acknowledge())。这可以。不好的是我不能阻止Ranorex原始API(Button.Click())出现。

3 个答案:

答案 0 :(得分:1)

  1. 如果您想要安全,最好的选择将是您的第一个,使用脚本修改自动生成的代码。将脚本添加到集成构建过程中,以确保在代码重新生成时始终运行此脚本。

  2. 另外,您可以设置FxCop规则来检测您不想使用的方法调用。

  3. 如果团队很小,他们会遵循设计准则。然后,这是培训团队不使用API​​的问题。在您的代码审核流程中,您的团队必须查找此问题。缺点是这只是一种预防措施,你的团队成员仍然可能犯错误。在这种情况下,质量检查和代码审核将是您最好的朋友。

答案 1 :(得分:0)

Ranorex不支持修改生成成员的可见性吗?

第一名肯定听起来像是要走的路,因为它似乎直接就是你想要的。

答案 2 :(得分:0)

在我看来,你对设计的“太深入”,以优雅和完全干净的解决方案来解决这个问题。所有替代方案都有其自身的缺点,我可以建议的是为您在自己的类中公开的Ranorex类型提供适配器/外观类。然后,这些适配器将处理一些逻辑,然后将调用路由到真正的底层Ranorex对象。对于Acknowledge示例,这将是适配器上的方法,并且您公开的公共类型将只是适配器。

理想情况下,我希望在Button类中使用Click事件,以便您可以听取它并做出相应的反应。