`
suifeng
  • 浏览: 175770 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

编程元素---代码(重构==对代码进行编程)

阅读更多

前言

最近在思考编程的元素有那些,想了很多:如变量,运算符,函数,类等等,今天在重构newniu ETL时突然想到代码也是编程元素.

 

代码

今天在重构代码, 发现代码里面有很多重复的, 尤其是那种遍历的, 在ETL过程中都涉及遍历, 每种ETL都定义了一个存储过程来处理.

重构前

存储过程:初始ETL

从 etl_etls表中查询出需要"初始ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接初始抽取sql
    2, 执行sql
end loop;


存储过程:增量1ETL
从 etl_etls表中查询出需要"增量1ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接增量1ETLsql
    2, 执行sql
end loop;


存储过程:增量2ETL
从 etl_etls表中查询出需要"增量2ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接增量2ETLsql
    2, 执行sql
end loop;


存储过程:变更1ETL
从 etl_etls表中查询出需要"变更1ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接变更1ETLsql
    2, 执行sql
end loop;


存储过程:变更2ETL
从 etl_etls表中查询出需要"变更2ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接变更2ETLsql
    2, 执行sql
end loop;

 

重构后

 

 

存储过程:生成etl的SQL

从 etl_etls表中查询出需要"初始抽取"的etl
loop 1..ROW_COUNT then
    1, 拼接初始抽取sql
    2, 把sql插入 ETL_SQL_CODES
end loop;


从 etl_etls表中查询出需要"增量1ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接增量1ETLsql
    2, 把sql插入 ETL_SQL_CODES
end loop;

从 etl_etls表中查询出需要"增量2ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接增量2ETLsql
    2, 把sql插入 ETL_SQL_CODES
end loop;


从 etl_etls表中查询出需要"变更1ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接变更1ETLsql
    2, 把sql插入 ETL_SQL_CODES
end loop;

从 etl_etls表中查询出需要"变更2ETL"的etl
loop 1..ROW_COUNT then
    1, 拼接变更2ETLsql
    2, 把sql插入 ETL_SQL_CODES
end loop;




存储过程:ETL_BY(ETL类型名)

按 类型名 从 etl_sql_codes表中查询出代码  
loop 1..ROW_COUNT then
    1, 执行ETL SQL 代码
end loop;

 

对比

1, 性能提升:重构前每次都要拼接SQL, 重构后只需拼接一次

2, 重构前有5个存储过程, 重构后只有2个

3, 外部调用也方便多了, 只要改变参数, 就可以改变ELT类型

 

结论

重构就是对代码进行编程.

分享到:
评论

相关推荐

    新版Android开发教程.rar

    � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发 既 有用又有吸引力的移动...

    编程新手真言......

    8.34 真正的对接口进行编程 200 8.35 实践方法之极限编程 200 8.36 设计模式复用与框架复用 201 第三部分 进阶: C,C++代码阅读与控制 201 第9章 语法与初级标准库 202 9.1 C++的基于过程设计 203 9.2 C++的基于对象...

    编写高质量代码-Web前端开发修炼之道.azw3

    第1章 从网站重构说起 1.1 糟糕的页面实现,头疼的维护工作 1.2 Web标准——结构、样式和行为的分离 1.3 前端的现状 1.4 打造高品质的前端代码,提高代码的可维护性——精简、重用、有序 第2章 团队合作 2.1 ...

    图像增强的实现

    N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 N ;DIM 表示要进行离散傅立叶变换。 A=fft2(X,MROWS,NCOLS) 其中,MROWS 和 NCOLS 指定对 X 进行零填充后...

    KODExplorer 芒果云-资源管理器

    - 支持几乎所有编程语言的代码高亮 - 支持代码自动补全(基于文档、或自定义的代码快照) - 快速预览功能 - 优化文件保存完美解决。编码自动识别转换。(字符串转义问题。1&#'[{'"+~%25\\\\ ////) - 文件编辑,...

    主成分分析法在图像压缩和重建中的应用研究-Matlab代码

    众所周知,图像信息所含的数据量巨大。为了便于图像的存储,提高存储效率,研究...通过 matlab 编程,设置主成分个数为1,14,27,40来观测不同主成分个数对图像压缩与重构效果,如图1所示。 如有疑问,请联系博主。

    【基于Matlab】有限元方法的MATLAB编程

    matlabupdate:更新版本的matlab中的一些函数是用相同的输入和输出重构的。例如,包含.m--->分枝杆菌.m。 多边形网格的显示和标记 我们提出了一些显示多边形网格的基本函数,包括节点、元素和(边界)边的标记。 ...

    Swifter-Swift 开发者必备 Tips (第四版).zip

    这面临一个很严重的问题,就是难以重构,并且无法在编译期间进行检查,其实这是十分危险的行为。但是 target-action 又是 Cocoa 中如此重要的一种设计模式,无论如何我们都想安全地使用的话,应该怎么办呢?一种可能...

    12种常用设计模式C#代码示例

    2、针对接口编程,而不是针对实现编程。 3、多用组合,少用继承。 4、为了交互对象之间的送耦合设计而努力。 5、类应该对扩展开发,对修改关闭。 6、依赖倒置原则:要依赖抽象,不要依赖具体类。 7、最少知识原则:...

    java汽车租赁源码多态-DesignPrinciplesAndPatterns:面向对象编程开发的良好实践和设计模式

    “模式是面向对象设计的基石,而测试优先编程和无情重构是进化设计的基石。要停止过度或欠工程,有必要了解模式如何适应软件开发的新的进化节奏.” - 约书亚·克里耶夫斯基 “实际上似乎满足工程设计标准的唯一软件...

    Eclipse IDE在线-crx插件

    其他模块可以扩展Eclipse对其他编程语言的功能。 其主要特点是: - Java,C,C ++,PHP,Ruby项目文件排列在一个或多个源文件夹下的包目录中。 - 位于同一项目,另一个项目或工作空间外部的库。 - 浏览Java,C,PHP...

Global site tag (gtag.js) - Google Analytics