重构Web Api程序(Api Controller和Entity)

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个私有方法:

时间: 2024-10-12 19:29:55

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

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

一:张小龙的野心:用小程序重构web 一 很多年以前,张小龙写了一款软件:Foxmail. 这款软件当年有数百万用户,这是一个相当庞大的量,因为彼时网民也只有千万当量级的规模. 我是一个非常忠实的用户,因为直至今天,我还在使用Foxmail. 但有理由相信,当年使用客户端(软件)收发邮件的用户,越来越多的,已经改变为用web来收发邮件. 打开一个网址,输入用户名和密码,看邮件发邮件,我相信是PC互联网时代中后期大多数用户的习惯. Foxmail这样的软件,最终被web服务击败. 二 移动互联网时

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

http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有

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

1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP)  2. ASP.NET

ASP.NET MVC Web API 学习笔记---第一个Web API程序---近来很多大型的平台都公开了Web API

1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP)  2. ASP.NET

[转] ASP.NET WEB API程序在VS启动或发布到IIS后启动后发生 - Could not load file or assembly &#39;System.Web.Http.WebHost’异常,无法正常访问

Just do Copy Local = true in the properties for the assembly(System.Web.Http.WebHost) and then do a redeploy, it should work fine. http://stackoverflow.com/questions/20323107/could-not-load-file-or-assembly-system-web-http-webhost-after-published-to-

asp.net web api 构建api帮助文档

1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架. 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目引入了MVC框架开发包,使得项目看起来杂乱. 2)自带的Help Pages框架无法针对Odata控制器生成API文档. 3 问题解决方案 1)独立Help Pages项目,以插件形式添加服务 步骤1,添加类ServiceAssembliesResolver,获得服务集 /// <summary>

Pomelo开发中Web客户端开发API简介

使用pomelo做服务端开发时,无论什么客户端,只要能遵循与服务端的线上协议,就能够与服务端建立通信.pomelo内建提供的sioconnector和hybridconnector都定义了自己的协议格式,其中sioconnector用于socket.io的通信,hybridconnector则用来处理websocket和tcp的连接通信.为了方便客户端的开发,pomelo提供了部分平台的客户端SDK,主要包括用于Web端的JavaScript的SDK以及基于C/C++语言开发的libpomelo

Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具

做为一个程序员可能在学习技术,了解行业新动态,解决问题时经常需要阅读英文的内容:而像我这样的英文小白就只能借助翻译工具才能理解个大概:不禁经常感慨,英文对学习计算机相关知识太重要了!最近发现IBM的云平台Blumemix,并且提供语言翻译的服务,感觉不错,就拿来研究学习一下:这里就分享一下我的研究学习过程,如何使用Python调用REST API打造自己的在线翻译工具,并演示如何把它发布到云平台上,让每个人都可以通过网络访问使用它. 应用效果展示 您可以通过点击效果图片的链接访问它. 构建一个类

HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是cookie有下面几个问题: a:大小:cookies的大小被限制在4KB b:带宽:cookies随HTTP事务一起被发送,因此会浪费一部分发送的cookies时使用的带宽. c:复杂性:要正确的操纵cookies是很困难的. Web Storage分为两种: <1>sessionStorage 将数