引入参数对象
2015-07-21 09:56
375 查看
概念:本文中的“引入参数对象”是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类。
正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长、样式不好并且没有分类,所以我们有必要把参数进行封装。
通常这种情形下创建一个用户传递参数的类是很有帮助的,这会使得代码更容易明白也更灵活,因为当你需要增加参数时,只需要给参数类添加一个属性即可。请注意只有当你发现方法的参数比较多时才应该应用该重构,如果方法的参数比较少,就没有必要应用此重构,因为该重构会增加系统中类的数量,同时也会加大维护负担。所以要看参数情况而定。
重构后的代码如下:
总结:这种重构很重要,尤其是当一个方法的参数比较多的时候,不管是大中型项目还是小型项目,都会遇到这种场景,所以建议大家多使用这个重构。这种封装的思想在SOA 里面也经常运用到,封装输入Message,封装输出Message,消息来和消息去以及消息间的交互就构成了整个应用体系。
正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长、样式不好并且没有分类,所以我们有必要把参数进行封装。
namespace LosTechies.DaysOfRefactoring.SampleCode.ParameterObject.Before { public class Registration { public void Create(decimal amount, Student student, IEnumerable<Course> courses, decimal credits) { // do work } } }
通常这种情形下创建一个用户传递参数的类是很有帮助的,这会使得代码更容易明白也更灵活,因为当你需要增加参数时,只需要给参数类添加一个属性即可。请注意只有当你发现方法的参数比较多时才应该应用该重构,如果方法的参数比较少,就没有必要应用此重构,因为该重构会增加系统中类的数量,同时也会加大维护负担。所以要看参数情况而定。
重构后的代码如下:
using System.Collections.Generic; namespace LosTechies.DaysOfRefactoring.SampleCode.ParameterObject.After { public class RegistrationContext { public decimal Amount { get; set; } public Student Student { get; set; } public IEnumerable<Course> Courses { get; set; } public decimal Credits { get; set; } } public class Registration { public void Create(RegistrationContext registrationContext) { // do work } } }
总结:这种重构很重要,尤其是当一个方法的参数比较多的时候,不管是大中型项目还是小型项目,都会遇到这种场景,所以建议大家多使用这个重构。这种封装的思想在SOA 里面也经常运用到,封装输入Message,封装输出Message,消息来和消息去以及消息间的交互就构成了整个应用体系。
相关文章推荐
- 分解复杂判断
- JavaScript权威指南_132_第15章_脚本化文档_15.8-文档和元素的几何形状和滚动-概述
- PHP simplexml_load_string() 函数
- ios7-21数组
- play framework 添加启动任务、定时任务
- web.xml错误处理
- 如何模拟高斯分布的随机数发生器?
- php -- cookie
- ubuntu配置bridge网桥
- 自己不确定用法对不对的设计模式(代理模式)
- 蓝牙RSSI计算距离
- HDOJ 1002 A + B Problem II(大数)
- sublime text2 注册码
- CactiPhone: 移动设备上查看Cacti
- 用日志记录Linux用户执行的每一条命令(history)
- [iOS]获取iOS UI框架中最上层的UIViewController对象
- javascript 对象创建,操作
- 网络安全发草案出炉 CHINASSL构建网络信息安全2.0时代
- 数据库分库分表方案
- iOS UILabel自适应高度的简单实现