zoukankan      html  css  js  c++  java
  • 23. 引入参数对象

    资料参考:https://blog.csdn.net/knightswarrior/article/details/9447815

    概念:本文中的“引入参数对象”是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类。

    正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长、样式不好并且没有分类,所以我们有必要把参数进行封装。

     1 /**
     2  * 注册类
     3  */
     4 class Registration {
     5     /**
     6      * 注册
     7      *
     8      * @param amount 数量
     9      * @param student 学生
    10      * @param courses 课程列表
    11      * @param credits 学分
    12      */
    13     public void Create(double amount, Student student, List<Course> courses, double credits) {
    14         // doSomething
    15     }
    16 }
    1 /**
    2  * 学生类
    3  */
    4 class Student {
    5 }
    1 /**
    2  * 课程类
    3  */
    4 class Course {
    5 }

    通常这种情形下创建一个用户传递参数的类是很有帮助的,这会使得代码更容易明白也更灵活,因为当你需要增加参数时,只需要给参数类添加一个属性即可。请注意只有当你发现方法的参数比较多时才应该应用该重构,如果方法的参数比较少,就没有必要应用此重构,因为该重构会增加系统中类的数量,同时也会加大维护负担。所以要看参数情况而定。
    重构后的代码如下(Android studio 中可用introduce parameter object来进行重构):

     1 /**
     2  * 注册类
     3  */
     4 class Registration {
     5     /**
     6      * 注册
     7      *
     8      * @param registrationContext 注册上下文
     9      */
    10     public void Create(RegistrationContext registrationContext) {
    11         // doSomething
    12     }
    13 }
     1 /**
     2  * 注册上下文类
     3  */
     4 public class RegistrationContext {
     5     private final double amount;
     6     private final Student student;
     7     private final List<Course> courses;
     8     private final double credits;
     9 
    10     /**
    11      * @param amount  数量
    12      * @param student 学生
    13      * @param courses 课程列表
    14      * @param credits 学分
    15      */
    16     public RegistrationContext(double amount, Student student, List<Course> courses, double credits) {
    17         this.amount = amount;
    18         this.student = student;
    19         this.courses = courses;
    20         this.credits = credits;
    21     }
    22 
    23     public double getAmount() {
    24         return amount;
    25     }
    26 
    27     public Student getStudent() {
    28         return student;
    29     }
    30 
    31     public List<Course> getCourses() {
    32         return courses;
    33     }
    34 
    35     public double getCredits() {
    36         return credits;
    37     }
    38 }

    总结:这种重构很重要,尤其是当一个方法的参数比较多的时候,不管是大中型项目还是小型项目,都会遇到这种场景,所以建议大家多使用这个重构。

  • 相关阅读:
    设置一个alias直接推到github
    JSON
    分部式类定义
    sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
    ibatis 连接数据库时的错误
    ibatis 连接数据库
    [ASP.NET] C#字符串处理
    20130401学习笔记
    最大公约数和最小公倍数
    从客户端中检测到有潜在危险的 Request.Form 值 解决方案
  • 原文地址:https://www.cnblogs.com/ys99/p/14205629.html
Copyright © 2011-2022 走看看