Insus.NET较习惯做法,是在程序完成之后,抽一些少时间对写好的代码重新审视。比如这些天写的Web Api的程序来说,发现有很多值得重构代码。

开发ASP.NET MVC程序,与数据相关有关联的一般是在控制器与Entity实体之间。

初步重构是把Api控制器OrdersController.cs的程序移至实体OrderEntity.cs中去:
第一
重构public IEnumerable<Order> Get()方法,

此方法移至Entity:

这样一移动,那在控制器的Get()方法,就可以改为:

第二
 重构public void Post(Order o)方法:

在实体添加

控制器方法重构之后:

第三
重构控制器OrderController另一个方法public void Post(Order o):

把引方法移至实体:

在控制器中的方法被重构之后:

第四
重构public void Put(Order order)方法,把此方法移至Entity中去,并创建一个新方法,稍作一些小修改:

在实体OrderEntity中新建的public void Update(Order order, string fileVirtualPath)方法:

重构之后,方法体内代码,可使用2句即可,并删除移走的代码:

第五,最后一个需要搬移的是Delete()方法:

在实体类中,创建一个全新的Delete()方法:

被重构之后,在控制器看到的Delete()方法,简洁多了。更多的逻辑处理代码不必在控制方法呈现。

最后OrderController.cs类别重构好的类,如下,删除注解的代码,下机标记1至标记5就是我们上面所重构过的方法:

现在我们可以关闭OrderControler.cs类,打开OrderEntity类,对这个类进行重构。找到下面三个方法中
public void AppendDataToExistingJsonFile(Order order, string fileVirtualPath)
public void Update(Order order, string fileVirtualPath)
public void Delete(Order order, string fileVirtualPath)

下面的代代码有冗余,如:

把它写成一个私有方法:

看到上面代码示例中的红色箭头否,说明三个方法内已经引用了重构好的代码了。

接下来我们又发现四个方法
public void PostAndSaveToFile(Order order, string fileVirtualPath)
public void AppendDataToExistingJsonFile(Order order, string fileVirtualPath)
public void Update(Order order, string fileVirtualPath)
 public void Delete(Order order, string fileVirtualPath)
中,下面这段代码是将List<Order>对象写成json文件,它们在这个OrderEntity类中,已经显冗余了:

写成一个私有方法:

这样四个方法均可以删除冗余部分的代码,引用这个私有的方法即可,不过第一个方法,public void PostAndSaveToFile(Order order, string fileVirtualPath)
引用此方法,有些问题,因为重构好的方法传入的参数是List<Order>,因此需要做些修改,如下:

还有
public void AppendDataToExistingJsonFile(Order order, string fileVirtualPath)
public void Update(Order order, string fileVirtualPath)
public void Delete(Order order, string fileVirtualPath)
三个方法中有一个功能是相同的,就是读取Json文件,并转换为List<Order>对象,虽然代码不一相同,但是我们是可以把它写成一个统一的:

这样子,三个方法就可以引用此方法:

在Update()和Delete()方法,还有2句,是实现删除文件的功能:

 if (System.IO.File.Exists(newFilePhysicalPath))
{
File.Delete(newFilePhysicalPath);
}

可以重构写成一个私有方法并对程序重构如下:

OK,最后整理一下4个私有方法:

重构Web Api程序(Api Controller和Entity)的更多相关文章

  1. 重构Web Api程序(Api Controller和Entity)续篇

    昨天有写总结<重构Web Api程序(Api Controller和Entity)>http://www.cnblogs.com/insus/p/4350111.html,把一些数据交换的 ...

  2. 张小龙的野心:用小程序重构web|小程序好处及可能的不足

    一:张小龙的野心:用小程序重构web 一 很多年以前,张小龙写了一款软件:Foxmail. 这款软件当年有数百万用户,这是一个相当庞大的量,因为彼时网民也只有千万当量级的规模. 我是一个非常忠实的用户 ...

  3. 重构Web Api程序(Api Controller和Entity) 续篇(2)

    一代好的程序,是几经修改与重构出来的.有关此篇Insus.NET对前面所在修改与重构,还是没有觉得很完美简洁.特别对是存在的json文件进行修改或是删除时,我们原先是从文件读取数据,修改或是删除数据, ...

  4. 重构Web Api程序(Api Controller和Entity) 续篇(1)

    经过一系列重构,你眼明的话,还是可以看到还有重构的地方,如: string newFileName = "~/Temp/" + Guid.NewGuid().ToString() ...

  5. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  6. 使用MVC 5、Web API 2、KnockoutJS、Ninject和NUnit开发、架构和测试Web应用程序

    做一名微软软件开发人员就像在国际煎饼屋订早餐一样.每道菜都有一堆煎饼,你必须从各种各样的煎饼和糖浆口味中选择.对于web应用程序,解决方案堆栈是一组软件子系统或组件,用于交付功能完整的解决方案(无论是 ...

  7. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  8. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  9. ASP.NET Core 1.0开发Web API程序

    .NET Core版本:1.0.0-rc2Visual Studio版本:Microsoft Visual Studio Community 2015 Update 2开发及运行平台:Windows ...

随机推荐

  1. iOS--页面跳转(UITableView)

    本文只要实现运用(UITableView)表格实现页面的传值,同时运用了代理(委托)传值. 目录文件列表如下: AddressBookViewController.h #import <UIKi ...

  2. 第二个activity

    Android四大组件 Activity BroadCastReceiver Service ContentProvider 创建第二个Activity 创建第2个Activity的过程 1. 创建c ...

  3. Java 线程池

    系统启动一个线程的成本是比较高的,因为它涉及到与操作系统的交互,使用线程池的好处是提高性能,当系统中包含大量并发的线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系 ...

  4. iOS带动画的环形进度条(进度条和数字同步)

    本篇写的是实现环形进度条,并带动画效果,要实现这些,仅能通过自己画一个 方法直接看代码 为了方便多次调用,用继承UIView的方式 .m文件 #import <UIKit/UIKit.h> ...

  5. 项目管理之道--纪我的新书《PMP项目管理认证学习指南(第4版)》出版并预祝大卖!

    新年伊始,我最新的项目管理书籍——<PMP项目管理认证学习指南(第4版)>也出版了,真是新年新气象啊!翻译英文书籍是一件任重道远的工作,除了要具备扎实的基本功,熟悉相关的领域外,还需要细致 ...

  6. TinyPNG---一个压缩PNG的神站

    如何把网页中要用到的图片压缩到最小,这是前端攻城师们在写网页时都会考虑的一个问题,今天小坊给各位带来了给前端攻城师们真正的良心网站---TinyPNG. 只需要简单的两步就可以把你要压缩的PNG格式图 ...

  7. HTML基础(三)——css样式表

    CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控制精确, ...

  8. SQL Server 2014新特性——事务持久性控制

    控制事务持久性 SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久. 完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端. 延迟持久,事务提交是异步的,在 ...

  9. jQuery自动完成组建Autocomplete

    一,属性介绍 * minChars (Number) 在触发autoComplete前用户至少需要输入的字符数.Default: 1,如果设为0,在输入框内双击或者删除输入框内内容时显示列表* wid ...

  10. MySQL客户端工具 SQLyog

    我最喜欢它的History功能,把执行过的操作对应语句都输出出来,一些麻烦的语句用GUI操作后,还能保存对应的sql语句.不错! 官网:http://www.webyog.com 下面是官方的介绍:S ...