Design patterns 需要类建模方面的帮助吗
我一直在研究一些面向对象的概念,比如设计模式、干净的代码和其他一些东西,但我仍然对如何继续存在一些疑问。例如,让我们看一看我的示例 我有一个Person类,它是一个模型。我想给一个人添加一些验证,比如检查年龄是否与出生日期一致,姓名是否包含有效字符 我有两种方法,但我不知道该用哪一种 方法一: 我创建了一个名为:Design patterns 需要类建模方面的帮助吗,design-patterns,class,Design Patterns,Class,我一直在研究一些面向对象的概念,比如设计模式、干净的代码和其他一些东西,但我仍然对如何继续存在一些疑问。例如,让我们看一看我的示例 我有一个Person类,它是一个模型。我想给一个人添加一些验证,比如检查年龄是否与出生日期一致,姓名是否包含有效字符 我有两种方法,但我不知道该用哪一种 方法一: 我创建了一个名为: class ValidatePerson {} 这个类有方法:“validateAge()”和“validateName()”,我需要的每一个vallidation都必须实现一个新方
class ValidatePerson {}
这个类有方法:“validateAge()”和“validateName()”,我需要的每一个vallidation都必须实现一个新方法
方法二:
我创建了一个抽象类,名为:
ValidatePerson{}将有一些commum方法用于所有验证,i将有:
class ValidatePersonAge extends ValidatePerson { validate();}
class ValidatePersonName extends ValidatePerson {validate();}
我想选择方法二,因为我必须添加的每个新验证规则都将是一个新类,并且不会影响其他类。比如,如果我需要修改commum方法中新规则需要的内容,我可以直接覆盖它。在第一种方法中,我必须添加另一个方法,然后创建另一个方法,或者修改已经为其他方法工作的方法,这可能会导致崩溃
问题是,我对这一切有点困惑,因为我是编程新手,我想看到一些帮助和解释。我还读到,类应该关闭以进行更改,而应该打开以进行扩展(或类似的事情)。没有具体的正确答案。设计应该始终在您的问题域和业务上下文中进行。这里有各种选择 选项1 Person类有一个vailidate()方法,您可以调用该方法对其当前状态执行所有he验证 专业人士
- 更好的封装
- 更改被本地化为一个类
- 在设置所有属性后执行验证
- 在调用validate()方法之前,Person可能处于无效状态,因此不会出现fail fast
- 不能为不同的上下文使用不同的验证规则
- 更好的封装
- 更改被本地化为一个类
- 快速失效行为,即Person对象永远不会处于无效状态
- 基于上下文,这可能有点过头了
- 不能为不同的上下文使用不同的验证规则
- 您已经将验证外部化到构建器类,因此可以针对不同的上下文使用不同的验证规则
- 构造逻辑与域对象分离
- Person类可以在构造后保持不变
- 在某些情况下,这可能是一种过度杀伤力
您的选项2不正确,因为ValidatePersonAge与ValidatePerson不同。你不是在完全肯定这个人,而是在肯定他的年龄。所以它们在语义上是不同的 不清楚你在问什么。你到底在找什么帮助?