代码的重构(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 ...
随机推荐
- python_05 可变类型与不可变类型、集合、字符串格式化
可变数据类型与不可变数据类型: 1.可变:列表,字典 2.不可变:字符串,数字,元组 访问顺序: 1.顺序访问:字符串,列表,元组 2.映射:字典 集合 由不同元素组成的集合,集合中是一组无序排列的可 ...
- Redux-persist使用
redux-persist作用是将store中的数据缓存到浏览器中,减少数据请求,每当白名单中的数据发生变化,才会进行一次更新缓存的操作,并且这个数据缓存是存在localStorage中的,不是会话级 ...
- 微软microsoft word的api文档地址
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa172758(v%3doffice. ...
- IP路由配置之---------dhcp服务器配置
实验设备:一台华三路由器,一台PC 步骤一,在系统视图下打开dhcp功能,禁用IP(网关,域名服务器) [H3C]dhcp enable # [H3C]dhcp server forbidden-ip ...
- 数组中的逆序对(python)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 查看SQL语句的真实执行计划
DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实的执行计划有助于更好的分析SQ ...
- Job for ssh.service failed because the control process exited with error code.......
转载自:https://blog.csdn.net/woailyoo0000/article/details/79782986 笔者最近更新ubuntu系统,在更新之前设置了证书信任文件,重启以后ss ...
- 【转载】Sql Server参数化查询之where in和like实现详解
文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...
- Spring源码-循环依赖源码解读
Spring源码-循环依赖源码解读 笔者最近无论是看书还是从网上找资料,都没发现对Spring源码是怎么解决循环依赖这一问题的详解,大家都是解释了Spring解决循环依赖的想法(有的解释也不准确,在& ...
- 3R - 单词数
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行,每组就 ...