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

C# 如何降低自动生成代码的可见性,c#,visibility,ranorex,C#,Visibility,Ranorex,我有一堆自动生成的代码(来自Ranorex GUI测试工具),它公开了一个公共界面,如下所示: public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder { // Ranorex.Button exposes public methods like Click() public virtual Ranorex.Button ButtonYes { get { return _butt

我有一堆自动生成的代码(来自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);
    }
  }
}
我想到了一些解决方案,但似乎没有一个是真正令人满意的:

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

只是想澄清一下:我不关心我的中间件保密,只需要控制实际点击的正确顺序


编辑:我想向我的团队成员(中间件的用户)公开的是面向业务的API(如
Acknowledge()
)。这很好。不好的是,我无法阻止Ranorex原始API(
按钮。单击()
)出现

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


第一条路听起来绝对是一条路,因为它似乎正是你想要的。在我看来,你对设计“太深入”了,无法用优雅、完全干净的解决方案来解决这个问题。所有的替代方案都有其自身的缺点,我可以建议的一个是为您在自己的类中公开的Ranorex类型提供一个适配器/门面类。然后,这些适配器将处理一些逻辑,然后将调用路由到真正的底层Ranorex对象。在您的
Acknowledge
示例中,这将是适配器上的一个方法,您公开的公共类型将仅是适配器

理想情况下,我希望Button类中有一个Click事件,这样您就可以听到它并做出相应的反应

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

  • 另一方面,您可以设置FxCop规则来检测不想使用的方法调用

  • 如果团队规模较小,且他们对遵循设计指南感到满意。那么这就是培训团队不使用API的问题。在您的代码审查过程中,您的团队必须寻找这个问题。缺点是这只是一种预防措施,您的团队成员仍然可能犯错误。在这种情况下,QA和代码审查将是您最好的朋友


  • 为什么您需要直接将自动生成的类交给客户机,而不是交给您设计的有限接口?这似乎是这里的传统方法。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。@millimoose:我确实给了他们一个有意义的API。但我不能阻止我的应用程序也给他们一个糟糕的面向按钮的API。见编辑我希望它能改变可见性本身,但还没有发现我到底在做什么的线索。我的问题是我无法阻止人们编写
    RanorexObject.MessageBox.Click()
    而不是
    MyAdapter.Acknowledge()
    public class MyAdapter
    {
      private MessageBoxPopupAppFolder _myMessageBox;
    
      public static void Acknowledge()
      {
        // some complex business rules
        _myMessageBox.ButtonYes.Click();
      }
    }