美文网首页
使用嵌套类来清晰化类接口,分离扩展操作和扩展查询

使用嵌套类来清晰化类接口,分离扩展操作和扩展查询

作者: goldroc | 来源:发表于2015-04-30 21:22 被阅读0次

    《design by contract》中除了介绍了Eiffel 语言,引入了前置条件,后置条件,不变量外。提出了基本操作,基本查询,扩展操作,扩展查询的概念。

    《effective c++》中也提到应该把扩展查询的成员函数替换为非成员函数。理由是为了较低的编译依赖性,较好的可延伸性,以及较高的封装性。

    其实,Scott Meyers就是说把扩展查询放到类的外部去,作为一个utility 函数或类来使用。

    我能理解他说的话,区别基本查询和扩展查询的确可以纯化类的接口,把把我们从大量的类方法记忆中解放出来。但我不愿意把原先对于一个类的使用变成了一个类加多个utility 方法或再加一个utility 类。至少我需要记忆的更多了,而且IDE 的智能提示功能似乎也用不上了。

    最好,能得了便宜又可以卖乖。

    那把utility 直接放到类里,声明成nested class,虽然没有较低的编译依赖性,但的确可以知道并选择使用扩展查询了。当然,这种方法肯定不是Scott Meyers 建议的。

    class Act
    {
    public:
     Act():_(*this){}
     void clearText();
     void clearIcon();
    
     class Util{
      public:
      Util(Act& a):owner(a){}
       void clearAll(){
         owner.clearText();
         owner.clearIcon();
       }
      private:
       Act& owner;
     } _;
    };
    

    其中clearAll 是扩展操作,调用了基本操作clearText() and clearIcon().
    这样,对Act 的直接操作都是基本操作和基本查询:act.clearText();
    如果使用扩展查询则使用: act._.clearAll();
    最好的是,IDE自动提示功能可以用了。呵呵。
    没有技术含量的文章,纯粹自娱自乐。

    相关文章

      网友评论

          本文标题:使用嵌套类来清晰化类接口,分离扩展操作和扩展查询

          本文链接:https://www.haomeiwen.com/subject/tscbfttx.html