类之间的重构

转自:http://yaotiebing.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3d%25e6%258a%2580%25e6%259c%25af%25e6%2596%2587%25e6%25a1%25a3

 

类之间的重构操作:

 

主要的内容就是分解庞大的类,合并不负责任的类,在类间搬移值域和函数。

1.   MoveMethod你的程序中,有个函数与其所在的类意外的另一个类进行更多的交流,调用后者,或者背后者调用,说明这个函数可能不适合在这个类里面,适当的时候移动到适当的类里面。减少类之间的高度耦合。让类干净利索的完成系统交付的任务。看似简单,逐渐重构直到完善,没关系,这部分重构充斥在你整个开发过程中,所以你没有必要为不能恰当的移动函数而苦恼

2.   Move Field 搬移值域:道理通搬移函数,当你某个值域与其所在的类以外的另一个类有更多的交流时,考虑搬移这个值域。这个操作很可能就是搬移Method的一部分

3.   Extract class 提炼类:就是分解类,将类中的部分值域函数搬移到一个新类里面,显然这个类做个太多的工作,包含不属于她范围内,或者类太大需要拆分。一个类应该很明确的抽象处理一些明确的责任,,如果类中的某些函数经常同事变化彼此相依,那么就考虑将他们分离出去。写到这里感觉类间的设计大部分还是根据经验开始的时候尽量明确责任,设计合理的类,随着功能的增加或者需求的变化在开发过程中逐步完善。

4.   Inline class 内嵌类: 你的某个class 没有做太多的事情,可以合并到,经常调用这个类的类中

5.   Hide delegate 隐藏委托关系: 这部分复杂一些,首先要区分sever client class

看个例子:manager = john.getdepatment().getmanager();  这里面 manager 就是client 类,而john.getdepatment()返回的部门类 就是server类,隐藏委托关系就是在johh类里面建一个函数getmanager()方法,隐藏对server类(depatment类)的调用 即:

public pserson getmanager()

{

         Return _department.getmanager();

}

那客户端类的调用就变成了: manager = john.getmanager() 看了少了什么就知道隐藏了什么。

也就是说尽量不要类的嵌套调用。

而我一般写代码都是这么设计: manager = department.getmanger(john). 需要好好理解一下设计思路,向组织靠拢

6.   Remove middle man (移除中间人操作),就是一个类做了太多的hide delegate操作,这个server类完全变成了一个中间人此时你应该让客户直接调用delegate 很难说清楚什么时候hide delegate 什么时候remove middle man 在系统运行过程中不断调整,随系统变化而变化就可以了

7.   Introduce foreign method 引用外加函数: 你所使用的server 类需要一个额外的函数,但是你不能修改这个类,那么在client类中(就是调用server类的类中)增加一个函数,并一个server class 实体作为第一引用参数,扩展server类的功能,请注意这个新加的函数是写在那个类里面了(client里面)

8.   Introduce local extension 引入本地扩展: 当原则7里面新增加的函数 被另外的多个类调用,那么就要考虑新加一个类,使他包含这些额外函数。这个本地扩展有两个方法:1.新加一个server类的子,同时为这个子类增加需要的函数   2外覆类(wrapper 其实就是新加一个类 然后在 Introduce foreign method

类间的搬移这部分就讲完了,养足精力 后面的部分就不容易理解了

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、别(主食 / 肉 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分:按早餐 / 午餐 / 晚餐 / 加餐分记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值