热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

重构之实体与引用逻辑实体逻辑存在的形式可引用逻辑实体不可引用逻辑实体散弹式修改...

mozq名词:实体引用逻辑实体可引用逻辑实体不可引用逻辑实体散弹式修改逻辑存在形式:不可引用逻辑实体或者可引用逻辑实体核心:某个逻辑应该以

mozq名词:实体 引用 逻辑实体 可引用逻辑实体 不可引用逻辑实体 散弹式修改逻辑存在形式:不可引用逻辑实体或者可引用逻辑实体核心:某个逻辑应该以什么形式存在呢?可引用逻辑实体(函数)还是不可引用逻辑实体(函数代码中)?
方案:1.为多次使用的逻辑提供可引用的逻辑实体。2.不是必须这么做,实际中可控的逻辑实体重复也是可接受的。3.但是当这种东西大量堆积时,就会导致程序腐败变质。防止逻辑实体重复大量堆积。实体重复的弊端:1.重复的实体增加了代码量,也增加了你需要理解的代码量。2.需要修改实体时,必须同时修改所有重复实体,并确保它们是一致的并且实际中需要修改的代码散步四处,你不但很难找到它们,也很容易忘记某个修改。(每个重复实体都将导致代码更多,更难理解,工作量增加,更容易出错,当它们堆积起来,就会导致腐败)
---------------------------------------------------------代码的坏味道:实体的故事:老板让你通知6:00开会,你打电话挨个通知所有人,老板突然有事,晚上会议取消了。你又挨个通知了,结果你忘记把取消会议的消息告诉你的上级,然后就没有然后了。另一种方式:你直接把6:00开会的消息发到群里,所有人都会立即得知这个消息。老板告诉你取消会议,你就在群里发了取消会议的消息。所有人都立即得知这个消息。(假设:所有人都直接引用群里的消息)实体与引用:好味道:唯一实体+引用坏味道:多个重复实体。原则:唯一实体+引用来避免重复实体导致的散弹式修改核心:某个逻辑应该以什么形式存在呢?可引用逻辑实体(函数)还是不可引用逻辑实体(函数代码中)?
方案:1.为多次使用的逻辑提供可引用的逻辑实体。2.不是必须这么做,实际中可控的逻辑实体重复也是可接受的。3.但是当这种东西大量堆积时,就会导致程序腐败变质。防止逻辑实体重复大量堆积。多个重复实体的弊端:(因实体重复导致散弹式修改)1.如果你产生了多个实体,那么当需要修改实体时,你必须保证同时修改所有的实体,并确保它们是一致的。2.实际中,需要修改的实体散步四处,你不但很难找到它们,也很容易忘记某个修改。1.重复之实体重复: 实体:某种东西。逻辑实体:一些代码,代码描述的是逻辑,所以就把它们叫做逻辑实体。可引用逻辑实体:函数由于可以被引用,所以函数体是可引用的逻辑实体。不可引用逻辑实体:整个函数表示的逻辑中蕴含的一些逻辑,由于不可被引用,被称做不可引用逻辑。函数越大:函数中蕴含的不可引用逻辑实体的数量就可能更多。不可引用逻辑实体的数量越多,发生逻辑实体重复的可能性就越大,就会更可能发生散弹式修改。2.散弹式修改:(逻辑实体重复必将导致散弹式修改)重构中的例子:分析:可引用逻辑实体:Customer.statement(租赁信息)->租赁字符串详单 蕴含的逻辑实体:(不可引用)1.根据租赁项计算该项的金额2.根据租赁项计算改项的积分3.计算所有租赁项的总金额4.计算所有租赁项的总积分
结论:目前,这个方法还没有显示出什么问题。变化发生了:需要提供将租赁信息打印成html形式的方法分析:可引用逻辑实体:Customer.htmlStatement(租赁信息)->租赁html详单 逻辑实体生成htmlStatement的方法包含的逻辑:1.根据租赁项计算该项的金额2.根据租赁项计算改项的积分3.计算所有租赁项的总金额4.计算所有租赁项的总积分这些逻辑直接编码还是建立可引用逻辑实体?问题:(逻辑实体重复,导致散弹式修改) 1.直接编码(不为这些逻辑创建函数,它们就不可引用)蕴含的逻辑实体:(不可引用)1.根据租赁项计算该项的金额 (htmlStatement和statement都创造了这个逻辑的实体,逻辑实体重复,导致散弹式修改)2.根据租赁项计算改项的积分 (htmlStatement和statement都创造了这个逻辑的实体,逻辑实体重复,导致散弹式修改)3.计算所有租赁项的总金额 (htmlStatement和statement都创造了这个逻辑的实体,逻辑实体重复,导致散弹式修改)4.计算所有租赁项的总积分 (htmlStatement和statement都创造了这个逻辑的实体,逻辑实体重复,导致散弹式修改)方案:(为某个逻辑建立可引用逻辑实体,并在需要的地方进行引用) 2.建立可引用逻辑实体(为这些逻辑创建函数,它们就可引用)1.根据租赁项计算该项的金额 amountFor(rental) (修改statement引用这个方法,htmlStatement也引用了这个方法)2.根据租赁项计算改项的积分 pointFor(rental) (修改statement引用这个方法,htmlStatement也引用了这个方法)3.计算所有租赁项的总金额 totalAmount() (修改statement引用这个方法,htmlStatement也引用了这个方法)4.计算所有租赁项的总积分 totalPoint() (修改statement引用这个方法,htmlStatement也引用了这个方法)更多的场景:1.数据库冗余问题 2.spring配置文件中切点和切点的引用,mybatis中的sql抽取。
都让我看到了唯一实体+引用来避免重复实体导致的散弹式修改。

逻辑应该以什么形式存在? 可引用逻辑实体还是不可引用逻辑实体

转:https://www.cnblogs.com/mozq/p/11042436.html



推荐阅读
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文介绍了如何通过Sybase Central连接到示例数据库,并查看其中的表和其他对象。主要内容包括启动Sybase Central、建立连接、查看表列表及表的具体信息。 ... [详细]
author-avatar
eea1051113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有