• 小鸡和代码代码重构[2]:MOVE METHOD


    导读:   

    不知道你是不是吃过无花果,或者听说过无花果?无花果不是没花,而是开放的花我们看不到而已,为了给无花果传递花粉,遗传后代,

    造物主创造了另个事物容小蜂,专门为无花果一一传递花粉,当然容小蜂也就寄居在无花果的花囊里繁殖自己的后代。在自然界这种关系叫互利共生。

    这样就遇到了这样的问题,在设计类的时候,无花果与容小蜂会用到同样的方法,那么这样怎么设计类呢?怎样进行重构呢?


    而MOVE METHOD就为我们找到了方法:

    计算机是模拟现实而存在的,在编码的时候,通常会遇到A类与B类之间的互利共生(相互依赖),究竟该把共用的方法写到那个类文件里面比较好?

    遇到这种问题,一般处理的思路是将共用的方法,放到最后谁在用该方法的类里面。

    一下是自己扒掉一点代码,中文画图画出来的,没什么实际意义,仅仅只是帮助理解才写到这里面的

    重构前:

    共用方法写在无花果里面
    1 public class 无花果
    2 {
    3 public 无花果(int 雌花, int 雄花, 榕小蜂 榕小蜂)
    4 {
    5 A雌花 = 雌花;
    6 C雄花 = 雄花;
    7 C榕小蜂 = 榕小蜂;
    8 }
    9 public int A雌花 { get; private set; }
    10 public int C雄花 { get; private set; }
    11 public 榕小蜂 C榕小蜂 { get; private set; }
    12
    13 public double 榕小蜂为无花果授粉()
    14 {
    15 if (A雌花 + C雄花 + C榕小蜂都存在授粉成功)
    16 return 1;//"榕小蜂也有自己房子了+食物";
    17 //C雄花 + C雄花
    18   if (缺少成分的时候)
    19 return 0.5;//"榕小蜂没地方可住了";
    20   return 0;//"什么也没有";
    21   }
    22 }
    23
    24 public class 榕小蜂
    25 {
    26 public 无花果 A无花果 { get; private set; }
    27 public 榕小蜂(无花果 无花果)
    28 {
    29 A无花果 = 无花果;
    30 }
    31 public double 榕小蜂有房子了
    32 {
    33 get { return A无花果.榕小蜂为无花果授粉(); }
    34 }
    35 public bool 榕小蜂我得到房子吗
    36 {
    37 get { return A无花果.榕小蜂为无花果授粉() < 0.05; }
    38 }
    39 }
    40 }


    重构后:

    重构后
    1 public class 无花果
    2 {
    3 public 无花果(int 雌花, int 雄花, 榕小蜂 榕小蜂)
    4 {
    5 A雌花 = 雌花;
    6 C雄花 = 雄花;
    7 A榕小蜂 = 榕小蜂;
    8 }
    9 public int A雌花 { get; private set; }
    10 public int C雄花 { get; private set; }
    11 //调用榕小蜂的一个方法
    12   public 榕小蜂 A榕小蜂 { get; private set; }
    13 }
    14
    15
    16  public class 榕小蜂
    17 {
    18 public 无花果 A无花果 { get; private set; }
    19 public 榕小蜂(无花果 无花果)
    20 {
    21 A无花果 = 无花果;
    22 }
    23 public double 榕小蜂有房子了
    24 {
    25 get { return 榕小蜂为无花果授粉(); }
    26 }
    27 public bool 榕小蜂我得到房子吗
    28 {
    29 get { return 榕小蜂为无花果授粉() < 0.05; }
    30 }
    31 public double 榕小蜂为无花果授粉()
    32 {
    33 if (A雌花 + C雄花 + C榕小蜂都存在授粉成功)
    34 return 1;//"榕小蜂也有自己房子了+食物";
    35 //C雄花 + C雄花
    36   if (缺少成分的时候)
    37 return 0.5;//"榕小蜂没地方可住了";
    38   return 0;//"什么也没有";
    39   }
    40 }

    总结:


            如果 ClassA 的某个函数对 ClassB 有过多的依赖, 可以考虑将这个函数搬到 ClassB 中, 在 ClassA 的这个函数中直接调用 ClassB中这个函数的返回值.

    这样做的好处是减少物件与物件之间的耦合度, 很多情况下这样做更利于进一步的重构.

           写给自己的:在看书,看DEMO的时候最主要的是自己的感触,自己的想法,最近发现自己还是对形象的东西比较感兴趣,比如物理学的弹簧振子,压力,

    重力一些抽象的东     只要自己用形象的东西去思考,用实际上存在的东西去比较,原来是这么有意思,这么好玩。

  • 相关阅读:
    体验用yarp连接websocket
    从 ASP.NET Core 5.0 迁移到.NET 6
    对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。
    .NET6 WebAPI 自定义过滤器
    .NET6 WebApi 获取访问者IP地址
    .NET6 部署到 IIS
    .NET6 WebApi JSON传到前台默认变成小驼峰
    开发环境 测试环境 生产环境
    .NET6 WebApi 使用 log4net
    .NET6 WebApi 解决跨域问题
  • 原文地址:https://www.cnblogs.com/muer/p/movemethod.html
Copyright © 2020-2023  润新知