重构指南 - 引入参数对象(Introduce Parameter Object)

当一个方法的参数超过3个以上,就可以考虑将参数封装成一个对象。将参数封装成对象后提高了代码的可读性,并且该参数对象也可以供多个方法调用,以后如果增加删除参数,方法本身不需要修改,只需要修改参数对象就可以。

重构前代码

 public class Registration
    {
        public void Create(decimal amount, Student student, IEnumerable<Course> courses, decimal credits)
        {
            // do work
        }
    }

重构后代码

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
        }
    }
时间: 2024-12-26 02:45:58

重构指南 - 引入参数对象(Introduce Parameter Object)的相关文章

重构第23天 引用参数对象(Introduce Parameter Object)

理解:有时候我们的一个方法,需要很多个参数,太多参数,不易阅读和理解,我们就可以把多个参数封装成一个对象. 详解: 重构前代码: 1 public class Registration 2 { 3 public void Create(decimal amount, Student student, IEnumerable<Course> courses, decimal credits) 4 { 5 // do work 6 } 7 } 通常这种情形下创建一个用户传递参数的类是很有帮助的,这

小酌重构系列[6]&mdash;&mdash;引入参数对象

简述 如果方法有超过3个以上的参数,调用方法时就会显得冗词赘句.这时将多个参数封装成一个对象,调用方法会显得干净整洁.这就是本文要讲的重构策略"引入参数对象"--将方法的参数封为类,并用这个类的对象替换方法中原有的参数. 引入参数对象 下图演示了这个重构策略,OrderSerivce表示订单服务,GetOrders()方法根据一些条件获取订单信息.在重构前,GetOrders()方法看起来像长篇大论,调用时也颇为麻烦:在重构后,GetOrders()方法看起来言简意赅,调用时仅需要传入

引入参数对象

概念:本文中的"引入参数对象"是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类. 正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长.样式不好并且没有分类,所以我们有必要把参数进行封装. namespace LosTechies.DaysOfRefactoring.SampleCode.ParameterObject.Before { public class Registration { public void C

重构摘要7_在对象之间搬移特性

<重构-改善既有代码的设计>Martin Fowler 摘要: 第七章 在对象之间搬移特性 Move Method 搬移函数 你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用 在该函数最常引用的类中建立一个有着类似行为的新函数.将旧函数变成一个单纯的委托函数,或者将旧函数完全移除. Move Field 搬移字段 某个字段被其所驻类之外的另一个类更多地用到. 如果我需要对类做许多处理,保持小步前进是有帮助的. Extract Class 提炼类 某个类做了应该由

重构笔记——引入本地扩展

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44958839         在上一篇文章中介绍了"引入外加函数".本文将介绍"引入本地扩展"这种重构手法.         下面让我们来学习这种重构手法吧. 开门见山         发现:你需要为服务类提供一些额外函数,但你无法修改这个类. 解决:建立一个新类,使它包含这些额外函数.让这个扩展品成为源类的子类或者包装类.

认识js函数对象(Function Object)

认识函数对象(Function Object) 可以用function关键字定义一个函数,对于每个函数可以为其指定一个函数名,通过函 数名来进行调用.这些都是代码给用户的印象,而在JavaScript解释执行的时候,实际上每 个函数都是被维护为一个对象,这就是本小节将要介绍的函数对象(Function Object). 函数对象与其它用户所定义的对象有着本质的区别,这一类对象被称之为内部对象,例 如日期对象(Date).数组对象(Array).字符串对象(String)都是属于内部对象.换句话

C++对象模型——对象复制语意学 (Object Copy Semantics)(第五章)

5.3    对象复制语意学 (Object Copy Semantics) 当设计一个 class,并以一个 class object指定给 class object时,有三种选择: 1.什么都不做,因此得以实施默认行为. 2.提供一个 explicit copy assignment operator. 3.明确地拒绝一个 class object指定给另一个 class object. 如果要选择第3点,不允许将一个 class object指定给另一个 class object,那么只要

javascript 判断变量 是否为空null,undefined, 空数组,空对象(空Object),字符串是否为空或全由空白字符组成,数字是否为0,布尔是否为false。

javascript 判断变量 是否为空null,undefined, 空数组,空对象,空Object,字符串是否为空或全由空白字符组成,数字是否为0,布尔是否为false.由于Object没有length用 Object.keys()适用于数组,对象 返回可枚举的实例属性名组成的数组来判断是否为空. 利用逻辑判断中or (||)只要有一项为真则不再计算下一个表达式 来实现不管传入的参数是何种类型.只要符合我对空的定义即返回true. 1 function IsNothing(e) { 2 va

JavaScript内部原理系列-变量对象(Variable object)

概要 我们总是会在程序中定义一些函数和变量,之后会使用这些函数和变量来构建我们的系统.然而,对于解释器来说,它又是如何以及从哪里找到这些数据的(函数,变量)?当引用一个对象的时候,在解释器内部又发生了什么? 许多ECMA脚本程序员都知道,变量和执行上下文是密切相关的: var a = 10; // 全局上下文中的变量 (function () { var b = 20; // 函数上下文中的局部变量 })(); alert(a); // 10 alert(b); // "b" is n