首先我想跟大家分享一下我们团队的代码检查流程。1. 项目经理随时会检查成员的代码,如果发现有不符合规范的代码,会在注释里面加todo。比如,假设leo的代码不符合规范,那么项目经理就会加注释://todoleo: refactor below code to match the standard of defining a class in JS2. 每个成员随时会检查属于自己的todo项,然后修改代码。比如,leo会把项目里所有todoleo的项列出来,然后一个一个检查。检查完了之后,将todo改成review。3. 项目经理会检查所有的review。如果代码没有问题了,就会删除这个revi Read More
写在前面:1. 本文中单元测试用到的数据库,在执行测试之前,会被清空,即使用空数据库。2. 本文中的单元测试都是正确通过的。要理解EF的事务机制,首先要理解这2个类:TransactionScope和DbContext。DbContext是我们的数据库,通常我们会建一个类MyProjectDbContext继承自DbContext,里面包含所有的数据库表。这个类相当于定义了一个完整的数据库。下面通过一些单元测试来看看这2个类是如何工作的。 1 [Test] 2 public void Can_Rollback_On_Errors_In_Different_Context() 3 { 4 ... Read More
删除确认:Are you sure you want to delete this product?操作成功:The product was deleted/saved successfully.出错了:Error occurred: … … Read More
下面2段代码的功能是一模一样的,但写的方式不一样。你更喜欢那一段呢?为什么?代码1:1 public ActionResult ApplicationDetails(long applicationId)2 {3 var model = new ApplicationDetailsViewModel(applicationId)4 .BuildPhones()5 .BuildEducationHistories()6 .BuildReferences()7 .BuildWorkHistories();8 retur... Read More
最近对面向对象有了个新的领悟,特在此分享给大家。如果这个思想不对或者已经out了,还请不要笑话。本文的示例代码将以ASP.NET MVC为基础的,如果你没有MVC的基础,也不会影响阅读,因为本文探讨的核心是面向对象中的一个设计思想。下面我先以一个简单的例子来描述它。案例:有时我们的一个项目包含多个网站,比如有一个管理员用的站点,有一个公司客户使用的站点,这2个站点会部署到不同的服务器。这2个站点都有一个注销登录的action。你可能首先想到,用一个UserControllerBase类来封装这个logout action,以实现代码的重用。这当然是我们首先考虑到的。但是,有时候这2个站点的co Read More
项目中有下面这样一段代码,大家看有什么问题:1 public class TemplateService2 {3 public Template Add(Template template)4 {5 //do save it to db6 return template;7 }8 }上面的代码我们可能经常都在写,好像看不出有什么问题。但我认为上面这个Add方法读起来就不通顺。如果代码是上面这么写的,那么调用的代码可能就像下面的这样:var service = new Template... Read More
在我们的项目架构中,数据库访问通常是用entity framework(EF),另外有一个很重要的service层,主要用于跟EF交互,也会在这一层封装大部分的业务逻辑。通常情况下,我们会用一个接口将某个service的成员提出来,然后通过IOC获取该service的实现。由于service层主要为UI层提供服务,为了让调用者直接的看到可用的方法,因此往往某个service会包含某个模块的所有方法和属性,于是这个service会变得非常庞大。举个例子,比如我们有一个IProductService,用于为product模块提供数据服务。这个product模块下面包含多个子模块,比如该produc Read More