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)的更多相关文章

  1. nodejs 用http模块搭建的服务器的路由,以及路由代码的重构过程

    我们打开浏览器浏览网页时,点击上面不同的模块,地址栏中的路由会发生相应的变化,从而,浏览器向服务器发起请求的内容也会发生改变,那么服务端,是如何来做的呢? 服务端也是,通过路由来做出不同的响应的,我们 ...

  2. 重构改善既有代码设计--重构手法01:Extract Method (提炼函数)

    背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner() ...

  3. 重构改善既有代码设计--重构手法12:Extract Class (提炼类)

    某个类做了应该由2个类做的事.建立一个新类,将相关的字段和函数从旧类搬移到新类. 动机:一个类应该是一个清楚地抽象,处理一些明确的责任.但是在实际工作中,类会不断成长扩展.你会在这儿加入一些功能,在哪 ...

  4. IDEA工具java开发之 代码重构Refactor 重命名 删除移动复制 生成变量 抽取方法

    一.重命名 用shift + F6 或者右键单击 二.抽取方法 .三.生成变量 . 四.文件移动复制和删除 可以右键

  5. 重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)

    所谓的以查询取代临时变量:就是当你的程序以一个临时变量保存某一个表达式的运算效果.将这个表达式提炼到一个独立函数中.将这个临时变量的所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数调用. ...

  6. 如何在eclips下将一段代码抽取为方法Extract Method

    最近读了读关于重构的文章,做了个小总结(在编程思想目录下<从文章"避免复制与粘贴"到文章"Extract Method"的反思 系列>). 然后因为 ...

  7. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)

    你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段.        动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...

  8. 重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)

    你有一个大型函数,其中对局部变量的使用,使你无法釆用 Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型 ...

  9. 重构改善既有代码设计--重构手法05:Introduce Explaining Variable (引入解释性变量)

      发现:你有一个复杂的表达式. 解决:将该复杂的表达式(或其中的部分)的结果放进一个临时变量,并以此变量名称来解释表达式用途. //重构前 if((platform.toUpperCase().in ...

  10. 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)

    Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...

随机推荐

  1. BBS(第三天) 如何吧用户上传的图片文件保存到本地

    1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务器会对外公开一下服务器静 ...

  2. Jquery中的 Deferred分析

    参考:https://www.idaima.com/a/1627.html http://www.cnblogs.com/aaronjs/p/3356505.html 未完!

  3. 吴裕雄 python深度学习与实践(15)

    import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data mnist = ...

  4. VMware12上安装CentOS7无法上网问题

    常安装使用VMware的搭建集群环境,VMare安装后虚拟机默认的是自动获取IP,有时候用的过程中突然XSHELL中断或者需要固定IP上网,遇到几次居然,但忘了步骤,总结一下,省的每次去找资料 环境配 ...

  5. 【转】IO多路复用机制详解

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  6. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  7. CentOS 特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)

    名称 说明 $0 脚本名称 $1-9 脚本执行时的参数1到参数9 $? 脚本的返回值 $# 脚本执行时,输入的参数的个数 $@ 输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列 ...

  8. Codeforces Round #508 (Div. 2)

    Codeforces Round #508 (Div. 2) http://codeforces.com/contest/1038 A #include<bits/stdc++.h> us ...

  9. 清理xcode

    移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) ~/Library/Developer/Xcode/DerivedData 移除 APP 打包的ipa历史版本(Archi ...

  10. Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

    Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...