我正在研究一些OO概念,比如设计模式,干净的代码和其他一些东西,我仍然对如何继续有一些疑问。例如,让我们来看看我的例子。
我有一个Person类,它是一个模型。我想为一个人添加一些验证,比如检查年龄是否与出生日期一致,并检查名称是否包含有效字符。
我有两种方法,但我不知道应该使用哪种方法。
方法一: 我创建了一个名为:
的新类class ValidatePerson {}
并且该类具有以下方法:“validateAge()”和“validateName()”以及我需要的每个vallidation都必须实现一个新方法。
方法二: 我创建了一个名为的抽象类: ValidatePerson {}将有一些commum方法进行所有验证,我会:
class ValidatePersonAge extends ValidatePerson { validate();}
class ValidatePersonName extends ValidatePerson {validate();}
我想选择方法二,因为我必须添加的每个新验证规则都是新类,不会影响其他类。就像,如果我需要在新规则需要的commum方法中改变某些东西,我可以覆盖它。在第一种方法中,我将不得不添加另一种方法,然后创建另一种方法或改变已经为其他方法工作的方法,这可能会导致崩溃。
事情是,我对这一切感到困惑,因为我是编程的新手,我希望看到一些帮助和解释。我还读过,应该关闭类以便进行更改,但是可以打开以进行扩展(或类似的东西)。
答案 0 :(得分:1)
没有具体的正确答案。设计应始终位于问题域和业务环境的上下文中。所以这里有各种选项
选项1 Person类有一个vailidate()方法,你可以调用它来执行当前状态的所有验证。
赞成
缺点
选项2 每个属性在Person类中都有自己的validateXXX()方法。每个setXXX()方法将调用相应的validateXXX()方法。
赞成
缺点
选项3 您可以拥有包含这些验证检查的PersonBuilder。构建器将在构建Person对象之前执行这些验证。这样,一旦构建了Person对象,它就会满足所有的验证和不变量。
赞成
缺点
您的选项2不正确,因为ValidatePersonAge与ValidatePerson不同。您没有完全验证此人,只是验证他的年龄。所以它们在语义上是不同的。