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. gitlab Api接口使用

    官方文档 https://docs.gitlab.com/search/?q=api&idx=gitlab&p=1 示例:获取每个项目下的用户信息 #!/usr/bin/env pyt ...

  2. OpenStack 安装:nova服务

    上一篇介绍了glance,并且成功创建了一个镜像,这一篇介绍Nova. 首先创建Nova用户,需要记得先source环境变量,然后创建Nova用户,并设置密码为nova [root@linux-nod ...

  3. MQTT服务器本地搭建

    1.1 初认识MQTT协议. 2.1 下载压缩包 前往EMQ下载地址:http://emqtt.com/downloads ,下载您的系统的版本,一般选择稳定版. 2.2 解压并运行 C:\Users ...

  4. includes() 方法

    字符串的includes()和数组中的includes()判断有没有括号里面的值,有的话为true,没有为false. 详细解析:https://blog.csdn.net/wu_xianqiang/ ...

  5. mysql数据库导入与导出

    导出 导出数据和表结构: mysqldump -u用户名 -p 数据库名 > 数据库名.sql mysqldump -uroot -p dbname > dbname .sql      ...

  6. 自定义View(四) ViewGroup 动态添加变长Tag标签 支持自动换行

    欲实现如下效果: 思路很简单就2步: 1.测量出ViewGroup的大小 2.找出子View的位置 若要实现动态添加标签view,就要实现ViewGroup的onMeasure().onLayout( ...

  7. 粒子动画——Pygame

    你是否也想做出下图这么漂亮的动态效果?想的话就跟着我一起做吧=.= 工具: Python--Pygame 仔细观察上图,你能发现哪些机制呢?再在下面对比一下是否跟你想的一样. 运行机制: 1.随机方向 ...

  8. Python:每日一题002

    题目: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万 ...

  9. Powerdesigner数据库建模的浅谈

    1.建立新模型 2.创建物理数据模型(可以选择数据库类型及版本) 3.建立表 左键点击Table这个图标,鼠标移动到空白工作区,再左键,一个表的视图就出来了,(连续左键,会出现多个表的视图),右键退出 ...

  10. [uboot] (番外篇)uboot之fdt介绍

    http://blog.csdn.net/ooonebook/article/details/53206623 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...