栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的大类分解

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的大类分解

开始将如此大的对象分解的一种方法是,首先找到由该大对象管理的彼此相关且不与该对象的其他字段或属性交互的字段或属性的良好子集。然后,仅使用这些字段创建一个较小的新对象。也就是说,将
所有
逻辑从大类转移到新的小类。在原始的大类中,创建一个简单地传递请求的委托方法。这是一个很好的第一步,只涉及更改大对象。它不会减少方法的数量,但是可以大大减少大型类中所需的逻辑量。

经过几轮操作之后,您可以通过将其他对象直接指向较新的较小对象,而不是通过位于所有内容中间的先前很大的对象来开始删除某些委托。

例如,请参阅Wikipedia的“委托”模式讨论。

举一个简单的例子,如果您有一个人员对象来代表公司的员工,则可以创建一个薪资对象来跟踪与薪资相关的值,一个评级对象来跟踪员工的评级,一个奖励对象来跟踪该人赢得的奖项,等等。

假设,您从一个包含以下方法的大类开始,每个方法都包含业务逻辑以及许多其他方法:

...public boolean isManagement() { ... }public boolean isExecutive() { ... }public int getYearsOfService() { ... }public Date getHireDate() { ... }public int getDepartment() { ... }public BigDecimal getbasePay() { ... }public BigDecimal getStockShares() { ... }public boolean hasStockSharePlan() { ... }...

那么这个大对象可以在其构造函数中创建一个新创建的对象

StaffType
以及一个新创建的对象
PayInformation
和一个新创建的对象
StaffInformation
,并且最初,大对象中的这些方法如下所示:

// Newly added variables, initialized in the constructor (or as appropriate)private final StaffType      staffType;private final StaffInformation staffInformation;private final PayInformation payInformation;...public boolean isManagement() { return staffType.isManagement(); }public boolean isExecutive() { return staffType.isExecutive(); }public int getYearsOfService() { return staffInformation.getYearsOfService(); }public Date getHireDate() { return staffInformation.getHireDate(); }public int getDepartment() { return staffInformation.getDepartment(); }public BigDecimal getbasePay() { return payInformation.getbasePay(); }public BigDecimal getStockShares() { return payInformation.getStockShares(); }public boolean hasStockSharePlan() { return payInformation.hasStockSharePlan(); }...

过去大对象中的全部逻辑已移至这三个新的小对象中。通过此更改,您可以将大对象分解为较小的部分,而无需触摸任何使用大对象的东西。但是,随着时间的推移,您会发​​现大对象的某些客户端可能只需要访问其中一个可分割的组件。对于这些客户端,他们可以直接使用小对象,而不必使用大对象并委派给特定对象。但是,即使从未发生这种重构,您也可以通过将无关项目的业务逻辑划分为不同的类来进行改进。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号