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. leetcode148

    class Solution { public: ListNode* sortList(ListNode* head) { multimap<int,ListNode*> mul; whi ...

  2. leetcode617

    这道题想了很久,并没有掌握思想,写了很多,也没有解决.先贴出思考的过程. class Solution { public: vector<TreeNode> v1; vector<T ...

  3. mvn多环境下的配置

    在应用中,我们经常会遇到本地,测试和生产3种不同的环境,因此需要去配置不同的application. 定义resources: <resources> <resource> & ...

  4. 【392】Python 列表解析

    参考: Python3 数据结构 | 菜鸟教程 列表推导式 列表推导式提供了从序列创建列表的简单途径.通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的 ...

  5. CSS 图像

    CSS 图像 <上一节下一节> 通过CSS可以控制图像的大小和对齐方式. 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用C ...

  6. myeclise 安装

    安装.破解步骤都在gaobo百度云/工具/开发工具 安装后配置环境变量:

  7. sessionStorage实现note的功能

    功能图如图所示: 文本域中输入点击保存后的结果如图所示: 点击读取后的结果图: 选择山羊对应的按钮进行修改并点击保存后的结果: 选择山羊养对应的单选按钮进行删除操作后的结果图: 点击清空后的结果: 源 ...

  8. MFC---关于string.h相关函数

    1.在VS2005中使用strcpy.strcat.sprintf出现如:mfc中'strcpy' was declared deprecated警告 这是因为VS2005中认为CRT中的一组函数如果 ...

  9. poj 2349 求最小生成树里面第m长的边

    题目链接:https://vjudge.net/problem/POJ-2349 题意: 题目就是要我们找到一个最小的值D,把图里面所有大于D的边去掉之后剩余的连通分支的数量为S.这个就是找这个图里面 ...

  10. FloatingActionButton FAB 悬浮按钮

    FloatingActionButton简称FAB,这是一种比较美观的按钮: 1.使用前: FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App最主要的 ...