代码的重构(Refactor-Extract)
1、vs中的代码重构快捷方式:Refactor-Extract;
选中两个需要重构的部分完整代码,右击,选中Refactoe-Extract-Extract Method;
该选中的代码会自动形成一个Execute()方法,自己修改方法名就OK啦。

2、下面说一下我的具体代码修改:这个是两个方法中执行了相同的INSERT语句,所以将它整合成一个方法;这样后续有修改或者改动时,会方便很多,也便于代码阅读。
//APP端(插入T_UserBookingTraining)
public int SubscribeIntentionMajor(int courseId, int shareUserId, string name, string phoneNum, string intentionMajor)
{
var type = 1;
string tidSql = @"
IF EXISTS(
SELECT tcl.TrainingInstitutionId
FROM dbo.T_Course tc
LEFT JOIN dbo.T_Class tcl ON tc.ClassId = tcl.Id
WHERE tc.Id = @cid)
SELECT tcl.TrainingInstitutionId
FROM dbo.T_Course tc
LEFT JOIN dbo.T_Class tcl ON tc.ClassId = tcl.Id
WHERE tc.Id = @cid
ELSE
SELECT 0";
var tid = DbTopOnline.ExecuteScalar<int>(tidSql, new { cid = courseId }); return InsertUserBookingTraining(shareUserId, name, phoneNum, intentionMajor, tid, type);
}
//官网端(插入T_UserBookingTraining)
public int SubscribeIntentionMajorFromWebSite(string phoneNum, int tid)
{
var shareUserId = ;
var name = phoneNum;
var intentionMajor = "来自官网的意向";
var type = 2;
return InsertUserBookingTraining(shareUserId, name, phoneNum, intentionMajor, tid, type);
}
//重构出来的代码(主要执行INSERT操作)
private int InsertUserBookingTraining(int shareUserId, string name, string phoneNum, string intentionMajor, int tid, int type)
{
string userIdSql = @"
SELECT
tu.Id
FROM
dbo.T_User tu
WHERE
tu.TrainingInstitutionId = @tid
AND Name = 'admin'
AND IsDel=0
AND IsUsed=1";
var userId = DbTopManager.ExecuteScalar<int>(userIdSql, new { tid }); string sql = @";
IF EXISTS(SELECT * FROM T_UserBookingTraining WHERE Phone = @phoneNum AND TrainingInstitutionId = @tid ) --判断手机号
BEGIN
UPDATE dbo.T_UserBookingTraining
SET Intention = @intentionMajor, UserName = @name
WHERE Phone = @phoneNum
END
ELSE
BEGIN
INSERT INTO dbo.T_UserBookingTraining
( TrainingInstitutionId ,
TemplatId ,
SceneId ,
Type ,
UserId ,
ShareUserId ,
Phone ,
UserName ,
Intention ,
ProgressStatus ,
IsDel ,
IsUsed ,
CreateTime
)
VALUES ( @tid, -- TrainingInstitutionId - int
0 , -- TemplatId - int
0 , -- SceneId - int
@type , -- Type - tinyint
@userId , -- UserId - int
@uid, -- ShareUserId - int
@phoneNum, -- Phone - nchar(11)
@name, -- UserName - nvarchar(20)
@intentionMajor, -- Intention - nvarchar(60)
0 , -- ProgressStatus - tinyint
0 , -- IsDel - bit
1 , -- IsUsed - bit
GETDATE() -- CreateTime - datetime
)
END";
return DbTopOnline.Execute(sql, new
{
userId,
uid = shareUserId,
name,
phoneNum,
intentionMajor,
tid,
type
});
}
代码的重构(Refactor-Extract)的更多相关文章
- nodejs 用http模块搭建的服务器的路由,以及路由代码的重构过程
我们打开浏览器浏览网页时,点击上面不同的模块,地址栏中的路由会发生相应的变化,从而,浏览器向服务器发起请求的内容也会发生改变,那么服务端,是如何来做的呢? 服务端也是,通过路由来做出不同的响应的,我们 ...
- 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)
背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner() ...
- 重构改善既有代码设计--重构手法12:Extract Class (提炼类)
某个类做了应该由2个类做的事.建立一个新类,将相关的字段和函数从旧类搬移到新类. 动机:一个类应该是一个清楚地抽象,处理一些明确的责任.但是在实际工作中,类会不断成长扩展.你会在这儿加入一些功能,在哪 ...
- IDEA工具java开发之 代码重构Refactor 重命名 删除移动复制 生成变量 抽取方法
一.重命名 用shift + F6 或者右键单击 二.抽取方法 .三.生成变量 . 四.文件移动复制和删除 可以右键
- 重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)
所谓的以查询取代临时变量:就是当你的程序以一个临时变量保存某一个表达式的运算效果.将这个表达式提炼到一个独立函数中.将这个临时变量的所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数调用. ...
- 如何在eclips下将一段代码抽取为方法Extract Method
最近读了读关于重构的文章,做了个小总结(在编程思想目录下<从文章"避免复制与粘贴"到文章"Extract Method"的反思 系列>). 然后因为 ...
- 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段. 动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...
- 重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)
你有一个大型函数,其中对局部变量的使用,使你无法釆用 Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型 ...
- 重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)
发现:你有一个复杂的表达式. 解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途. //重构前 if((platform.toUpperCase().in ...
- 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)
Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...
随机推荐
- import_module 导入变量的包
遇到你想导入的包是变量的时候,可以用这个实现 from importlib import import_module settings_path = self.pathm2 = import_modu ...
- 尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理
EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置 @AutoConfigureOrder(Ordered.HIGHEST_PREC ...
- ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类
ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:读取文本文件,常见多边形要素 ...
- ceph结构详解
引言 那么问题来了,把一份数据存到一群Server中分几步? Ceph的答案是:两步. 计算PG 计算OSD 计算PG 首先,要明确Ceph的一个规定:在Ceph中,一切皆对象. 不论是视频,文本,照 ...
- 记账本,C,Github,util
package util; import java.awt.Component; import java.awt.Dimension; import javax.swing.JButton; impo ...
- Jupyter Notebook 的快捷键
原文:http://blog.csdn.net/lawme/article/details/51034543 Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输 ...
- java基础-- 之类型转换 和 一些运算符
--- 首先 看一个 Scanner 类 import java.util.Scanner; public class TestScanner { public static void ma ...
- 556. Next Greater Element III下一个更大的数字
[抄题]: Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exac ...
- [leetcode]53. Maximum Subarray最大子数组和
Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...
- Django实现微信消息推送
一 所需准备条件 微信公众号的分类 微信消息推送 公众号 已认证公众号 服务号 已认证服务号 企业号 基于:微信认证服务号 主动推送微信消息.前提:关注服务号环境:沙箱环境 沙箱环境地址: https ...