这也是C#代码吗?代码阅读性进阶

开发 后端
第二个技术点,流畅型接口, 对内是功能封装,对外是使用接口(API). 用Facade模式来看待,会更好理解。如果在功能实现内部使用Facade当然会头痛。

没有太多的罗嗦,代码本身已经足够。如果,要添几个标签的话就是: 中文化,流畅性接口(Fluent Interface),API.

只有几点补充说明:

1。 这都是真实可运行的代码,请看测试状态: 点击Login as guest

2。 测试使用Machine Specification, 重点是Establish部分。

3。仅仅使用于集成测试(用户故事);不建议业务领域和单元测试使用。

4。这里只列出最终使用代码(测试说明一切);避免细节/实现的干扰。实现请看: Examples.cs "一个“语法的实现 ”要“语法实现

文章发布后,很多的评论,特作出以下解释:

这一段代码的技术重点,首先是行为驱动开发(BDD), 偏重于需求描述(测试用例),而轻编程能力。

第二个技术点,流畅型接口, 对内是功能封装,对外是使用接口(API). 用Facade模式来看待,会更好理解。如果在功能实现内部使用Facade当然会头痛。

最后,才是使用中文。即使,不用中文,前两点也会很有用。

我是实践派,不是学院派。这是我实际项目的真实代码,不是为了装酷。

得心应手武器库

MSpec

本文所涉及使用的工具, 见前文:我的.Net武器库 ------ 新.Net架构必备工具列表

使用的视屏演示:

  1. using System.Linq;  
  2. using Machine.Specifications;  
  3. using Skight.Arch.Domain;  
  4. using Skight.Arch.Domain.Core.Containers;  
  5. using Skight.Arch.Domain.Extensions;  
  6. using Skight.Arch.UserStories.Helpers;  
  7. using Skight.ES.Register.Presentation;  
  8. using Skight.ES.Register.Presentation.Modal;  
  9. using Skight.ES.Register.Presentation.Web.Application;  
  10. using Skight.ES.Register.Presentation.Web.ExamDistrictAdmin;  
  11. using Skight.ES.Register.Services;  
  12. using Skight.ES.Register.UserStories.Helpers;  
  13.  
  14. namespace Skight.ES.Register.UserStories.作为.考区组考人.我想查看考试从而可以了解考试信息  
  15. {  
  16.     [Subject("考试"), Tags("集成测试""用户故事")]  
  17.     public class 当浏览某考试界面 : CommandTestBase  
  18.     {         
  19.         private Establish that =  
  20.             () =>  
  21.             {  
  22.                 要.创建(示例.考区.省直);  
  23.  
  24.                 要.创建(示例.考试定义.计算机)  
  25.                     .添加科目(示例.科目.AutoCAD)  
  26.                     .添加科目(示例.科目.Windows2000)  
  27.                     .添加科目(示例.科目.WindowsExcel);  
  28.  
  29.                 要.创建(示例.考试.省直2012年1月计算机考试)  
  30.                     .设为电子化考试()  
  31.                     .设置考试起始时间(Date.Of(2012,1,1),Date.Of(2012,2,1))  
  32.                     .设置审核()  
  33.                     .设置考场容量(50)  
  34.                     .设置科目费用(Money.of(100))  
  35.                     .添加科目(示例.科目.AutoCAD)  
  36.                     .添加科目(示例.科目.Windows2000)  
  37.                     .添加科目(示例.科目.WindowsExcel)  
  38.                     .添加个人信息定义(示例.个人信息定义.姓名)  
  39.                     .添加个人信息定义(示例.个人信息定义.性别)  
  40.                     .添加个人信息定义(示例.个人信息定义.身份证)  
  41.                     .添加考场(示例.考场信息定义.考场01)  
  42.                     .添加考场(示例.考场信息定义.考场02)  
  43.                     .添加考场(示例.考场信息定义.考场03); ;  
  44.  
  45.                 var exam_service = Container.get<ExamService>();  
  46.                 subject = new ExamDetailGet(exam_service);  
  47.                 ui.load_context_data(Keys.Context.ExamDate.with_value(示例.考试.省直2012年1月计算机考试));  
  48.             };  
  49.  
  50.         private Because of =  
  51.             () =>  
  52.             {  
  53.                 subject.process(ui);  
  54.                 result = ui.get_model<ExamDetailDTO>(Views.DisplayExamDetail);  
  55.             };  
  56.  
  57.         private It 应该显示考试科目列表 =  
  58.             () => result.Subjects.Select(s=>s.Code)  
  59.                       .ShouldContainOnly(示例.科目.AutoCAD.Code, 示例.科目.Windows2000.Code, 示例.科目.WindowsExcel.Code);  
  60.  
  61.         private It 应该显示考试开始日期 =  
  62.             () => result.BeginDate.ShouldEqual(Date.Of(2012, 1, 1));  
  63.         private It 应该显示考试结束日期 =  
  64.             () => result.EndDate.ShouldEqual(Date.Of(2012, 2, 1));  
  65.  
  66.         private It 应该显示是否电子化考试 =  
  67.             () => result.IsElectronicExam.ShouldBeTrue();  
  68.         private It 应该显示是考试考场容量 =  
  69.             () => result.ExaminationRoomCapacity.ShouldEqual(50);  
  70.  
  71.         private It 应该显示是否考试报名需要审核 =  
  72.             () => result.NeedInspection.ShouldBeTrue();  
  73.         private It 应该显示考试默认科目费用 =  
  74.             () => result.DefaultCharge.ShouldEqual(Money.of(100));  
  75.  
  76.         private It 应该显示报考人员信息项目 =  
  77.             () => result.PersonalInfoDefs.ShouldContainOnly(示例.个人信息定义.姓名, 示例.个人信息定义.身份证, 示例.个人信息定义.性别);  
  78.  
  79.         private It 应该显示考试相关考场信息 =  
  80.             () => result.Scenes.ShouldContainOnly(示例.考场信息定义.考场01, 示例.考场信息定义.考场02, 示例.考场信息定义.考场03);  
  81.  
  82.         private static ExamDetailGet subject;  
  83.         private static ExamDetailDTO result;  
  84.     }  

原文链接:http://www.cnblogs.com/Wonner/archive/2012/07/19/CSharp_In_Chinese.html

【编辑推荐】

  1. C#、LINQ与ADO.NET主从表比对操作
  2. C#几个经常犯错误汇总
  3. C#开发高性能Log Help类设计开发
  4. C#使用委托调用实现用户端等待闪屏
  5. 浅谈C#结构
责任编辑:张伟 来源: 卓越之行的博客
相关推荐

2022-03-09 15:48:13

Java代码

2009-04-03 10:25:32

C#XML扩展代码

2009-09-01 10:37:51

C#项目代码C#代码规范

2009-08-13 17:36:54

编译C#代码

2009-08-06 09:32:03

C#代码协同执行

2009-09-02 17:12:06

C#关机代码

2011-04-13 17:31:16

C#.NET

2009-09-07 06:48:13

C#透明窗体

2009-08-14 16:54:19

C# Hello Wo

2009-08-19 15:38:59

C#代码

2009-08-31 14:44:30

2009-08-03 13:53:30

C#调用Excel

2009-09-02 14:06:14

C#文件传送

2009-09-02 17:24:44

C#关机代码

2009-03-12 13:49:30

DataTemplatWPFC#

2020-07-15 14:51:39

代码C+开发

2009-08-18 13:35:06

C#枚举文件

2009-08-03 16:58:59

C#不安全代码

2009-08-03 18:37:30

Nant和Nunit构

2009-08-06 10:55:46

C#代码解释器
点赞
收藏

51CTO技术栈公众号