如何使这个对象更易于维护?

时间:2012-04-24 15:04:27

标签: java oop maintainability

例如,我有这样的事情:

User
-FirstName
-SecondName
-Gender

VIPUser,它是User

的子类
VIPUser extends User
-GiftNum
-Birthday

但是应用程序突然需要更改策略,所有User都必须包含Birthday ....而且它不是可选字段,不允许设置null对于用户来说,它必须填写新注册User的变量,但我可以为现有用户保留null ...

因此,我需要更改所有User创建方法,并传递Birthday,它涉及大量代码。如何使其更易于维护?感谢。

5 个答案:

答案 0 :(得分:4)

  

如何使其更易于维护?

我认为你真正要求的是一些设计技巧,可以避免你重构你的代码。

我认为答案是......遗憾的是......没有这样的技术可以被视为优秀的Java实践。最好的策略是在设计API时尝试提前考虑,并准备好在需求发生变化时进行积极的重构。


对其他问题的评论:

  • 设计接口是很好的建议,并且通常可以简化某些类型的重构。但是,我认为这不会对像你这样的问题有所帮助。

  • 创建包装器和支持新状态(生日)的东西可能是一个坏主意。包装类可能以各种方式使您的代码库复杂化。如果您多次使用此方法,您会发现代码库越来越难以理解。你正在有效地建立一个尚未完全修复的问题的“技术债务”。

  • 是。一个好的IDE可以非常有助于进行大规模的重构。事实上,你的特殊问题让我觉得很容易重构......用一个好的IDE。

答案 1 :(得分:3)

设计到接口,更灵活,一个类可以实现多个接口。

不是将User类指定为参数类型,而是指定适当的接口...更容易维护,因为底层实现并不重要。

答案 2 :(得分:1)

创建一个创建User实例的包装器,他必须接收Date参数来设置Birthday,验证以及创建它的所有规则。另外,正如@NimChimpsky所说,你应该为这个包装器定义一个接口(接口主要用于业务逻辑类,而不是实体)。

答案 3 :(得分:1)

如此更改代码中的API涟漪,没有办法解决这个问题。至少不是强类型语言。

正如其他人所说,你应该在接口及其实现之间进行严格而明确的分离。

然后,您可以对API及其各自的impl模块进行版本更新,以便在更新程序时不会破坏API客户端。 DB模式兼容性是另一个有趣的问题。 :)

通常,使用Factory(模式)提供User Class的实例并在接口后面隐藏它的实现,是创建对象的良好封装。 而且,正如其他人所说,使用一些具有重构功能的优秀IDE应该可以轻而易举。

答案 4 :(得分:0)

这很简单。使用实际的Java-IDE右键单击构造函数并执行重构。问题不是改变代码,而是获得“生日”的价值。

重构非常简单(我更喜欢IntelliJ,但我认为Eclipse和Netbeans也会做得很好)。