Java 如何使此对象更易于维护?
例如,我有这样的东西:Java 如何使此对象更易于维护?,java,oop,maintainability,Java,Oop,Maintainability,例如,我有这样的东西: User -FirstName -SecondName -Gender 以及VIPUser,它是User VIPUser extends User -GiftNum -Birthday 但是突然应用程序需要更改策略,所有用户必须有生日。。。。它不是一个可选字段,不再允许用户设置null,它成为新寄存器user必须填写的变量,但我可以为现有用户保留null 因此,我需要更改所有的用户创建方法,并通过生日,这涉及到很多代码。如何使其更易于维护?谢谢。设计到接口,更加灵活,
User
-FirstName
-SecondName
-Gender
以及VIPUser
,它是User
VIPUser extends User
-GiftNum
-Birthday
但是突然应用程序需要更改策略,所有用户
必须有生日
。。。。它不是一个可选字段,不再允许用户设置null
,它成为新寄存器user
必须填写的变量,但我可以为现有用户保留null
因此,我需要更改所有的
用户
创建方法,并通过生日
,这涉及到很多代码。如何使其更易于维护?谢谢。设计到接口,更加灵活,一个类可以实现多个接口
您可以指定适当的接口,而不是将用户类指定为参数类型。。。由于底层实现并不重要,因此更易于维护。创建一个包装器来创建
用户
实例,用户必须接收日期
参数来设置生日
、验证以及创建该实例的所有规则。此外,正如@NimChimpsky所说,您应该为这个包装器定义一个接口(接口主要用于业务逻辑类,而不是实体)。这应该很容易。使用实际的JavaIDE右键单击构造函数并执行重构。问题不在于更改代码,而在于获取“生日”的值
重构相当容易(我更喜欢IntelliJ,但我认为Eclipse和Netbeans也会做得很好)。这样更改API会在代码中产生涟漪,这是无法避免的。至少不是在强类型语言中 正如其他人所建议的,您应该在接口及其实现之间进行严格而清晰的分离 然后,您可以对API及其各自的impl模块进行版本设置,以便在更新程序时不会破坏API客户端。 数据库模式兼容性是另一个有趣的问题。:) 通常,使用工厂(模式)提供用户类的多个实例,并将其实现隐藏在接口后面,这是创建对象的良好封装。 而且,正如其他人所建议的,使用一些具有重构功能的优秀IDE应该是轻而易举的事 如何使其更易于维护 我认为您真正需要的是一些设计技术,以避免您必须重构代码 我认为答案是。。。不幸的是。。。没有这样的技术可以被认为是好的Java实践。最好的策略是在设计API时尽量提前考虑,并准备在需求发生变化时积极重构
对其他问题的评论:
- 设计接口是一个很好的建议,通常可以简化某些类型的重构。然而,我认为这对解决像你这样的问题没有帮助
- 创建包装器和支持新状态(生日)的东西可能是个坏主意。包装器类可能以各种方式使代码库复杂化。如果您多次使用这种方法,您会发现您的代码库变得越来越难以理解。实际上,您正在建立一个“技术债务”,其中包括尚未完全修复的问题
- 对。一个好的IDE在进行大规模重构时非常有用。事实上,我觉得你的问题很容易重构。。。具有良好的IDE
生日值添加回对象似乎非常混乱。