【问题标题】:what's the best way to use "isSomething"?使用“isSomething”的最佳方式是什么?
【发布时间】:2020-03-26 02:01:51
【问题描述】:

大家好,

我没有问题,我只是想知道在 OOP 范式中实现 isSomthing 的最佳方式是什么?


以这个例子为例:我们想知道用户是否被暂时(比如 10 分钟)禁止。以下是两个选项:


  1. User 类中实现isTempBanned() 方法。然后每当我们想检查用户是否被禁止时,我们只需调用此方法。无需更改代码的其他部分。


  1. 将 isTempBanned 属性添加到 User 类。然后,每当用户的禁令状态发生变化时,我们都会相应地更新此属性。然后当我们需要知道的时候,我们就使用这个属性。


您能解释一下每种方式的优缺点吗?从这些角度来看:

  • 性能
  • 代码可维护性
  • 干净的代码
  • 可读性
  • 等等……

请记住,没有更好的方法。我只是想知道何时应该使用第一种方法以及何时使用第二种方法。


【问题讨论】:

    标签: performance oop coding-style


    【解决方案1】:

    最终你必须同时使用它们!

    基于封装原则,将您的示例视为 getter/setter 场景,以尽可能降低错误, getter 是 User.isBanned 方法,setter 是 User.banUser 方法。

    class User{
        banned_until : Date = null
    
        isBanned(){
            if(this.banned_until){
                return this.banned_until.valueOf() > new Date().valueOf();
            }
            return false;
        }
    
        banUser(){
           this.banned_until = new Date() ///any date in future ....
        }
    }
    

    【讨论】:

      【解决方案2】:

      isSomthing 通常用于布尔值。无论您使用什么数据类型。所有差异都是方法和属性的差异。 我建议您阅读以下内容:

      Properties vs Methods

      【讨论】:

      • 对“属性与方法”问题的公认答案完美地完成了这项工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2012-02-04
      • 2014-09-17
      • 2020-11-26
      • 2011-12-10
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多