這也是C#代碼嗎?代碼閱讀性進(jìn)階
沒有太多的羅嗦,代碼本身已經(jīng)足夠。如果,要添幾個(gè)標(biāo)簽的話就是: 中文化,流暢性接口(Fluent Interface),API.
只有幾點(diǎn)補(bǔ)充說明:
1。 這都是真實(shí)可運(yùn)行的代碼,請(qǐng)看測(cè)試狀態(tài): 點(diǎn)擊Login as guest
2。 測(cè)試使用Machine Specification, 重點(diǎn)是Establish部分。
3。僅僅使用于集成測(cè)試(用戶故事);不建議業(yè)務(wù)領(lǐng)域和單元測(cè)試使用。
4。這里只列出最終使用代碼(測(cè)試說明一切);避免細(xì)節(jié)/實(shí)現(xiàn)的干擾。實(shí)現(xiàn)請(qǐng)看: Examples.cs "一個(gè)“語(yǔ)法的實(shí)現(xiàn) ”要“語(yǔ)法實(shí)現(xiàn)
文章發(fā)布后,很多的評(píng)論,特作出以下解釋:
這一段代碼的技術(shù)重點(diǎn),首先是行為驅(qū)動(dòng)開發(fā)(BDD), 偏重于需求描述(測(cè)試用例),而輕編程能力。
第二個(gè)技術(shù)點(diǎn),流暢型接口, 對(duì)內(nèi)是功能封裝,對(duì)外是使用接口(API). 用Facade模式來看待,會(huì)更好理解。如果在功能實(shí)現(xiàn)內(nèi)部使用Facade當(dāng)然會(huì)頭痛。
最后,才是使用中文。即使,不用中文,前兩點(diǎn)也會(huì)很有用。
我是實(shí)踐派,不是學(xué)院派。這是我實(shí)際項(xiàng)目的真實(shí)代碼,不是為了裝酷。
得心應(yīng)手武器庫(kù)
MSpec
本文所涉及使用的工具, 見前文:我的.Net武器庫(kù) ------ 新.Net架構(gòu)必備工具列表
使用的視屏演示:
- using System.Linq;
- using Machine.Specifications;
- using Skight.Arch.Domain;
- using Skight.Arch.Domain.Core.Containers;
- using Skight.Arch.Domain.Extensions;
- using Skight.Arch.UserStories.Helpers;
- using Skight.ES.Register.Presentation;
- using Skight.ES.Register.Presentation.Modal;
- using Skight.ES.Register.Presentation.Web.Application;
- using Skight.ES.Register.Presentation.Web.ExamDistrictAdmin;
- using Skight.ES.Register.Services;
- using Skight.ES.Register.UserStories.Helpers;
- namespace Skight.ES.Register.UserStories.作為.考區(qū)組考人.我想查看考試從而可以了解考試信息
- {
- [Subject("考試"), Tags("集成測(cè)試", "用戶故事")]
- public class 當(dāng)瀏覽某考試界面 : CommandTestBase
- {
- private Establish that =
- () =>
- {
- 要.創(chuàng)建(示例.考區(qū).省直);
- 要.創(chuàng)建(示例.考試定義.計(jì)算機(jī))
- .添加科目(示例.科目.AutoCAD)
- .添加科目(示例.科目.Windows2000)
- .添加科目(示例.科目.WindowsExcel);
- 要.創(chuàng)建(示例.考試.省直2012年1月計(jì)算機(jī)考試)
- .設(shè)為電子化考試()
- .設(shè)置考試起始時(shí)間(Date.Of(2012,1,1),Date.Of(2012,2,1))
- .設(shè)置審核()
- .設(shè)置考場(chǎng)容量(50)
- .設(shè)置科目費(fèi)用(Money.of(100))
- .添加科目(示例.科目.AutoCAD)
- .添加科目(示例.科目.Windows2000)
- .添加科目(示例.科目.WindowsExcel)
- .添加個(gè)人信息定義(示例.個(gè)人信息定義.姓名)
- .添加個(gè)人信息定義(示例.個(gè)人信息定義.性別)
- .添加個(gè)人信息定義(示例.個(gè)人信息定義.身份證)
- .添加考場(chǎng)(示例.考場(chǎng)信息定義.考場(chǎng)01)
- .添加考場(chǎng)(示例.考場(chǎng)信息定義.考場(chǎng)02)
- .添加考場(chǎng)(示例.考場(chǎng)信息定義.考場(chǎng)03); ;
- var exam_service = Container.get<ExamService>();
- subject = new ExamDetailGet(exam_service);
- ui.load_context_data(Keys.Context.ExamDate.with_value(示例.考試.省直2012年1月計(jì)算機(jī)考試));
- };
- private Because of =
- () =>
- {
- subject.process(ui);
- result = ui.get_model<ExamDetailDTO>(Views.DisplayExamDetail);
- };
- private It 應(yīng)該顯示考試科目列表 =
- () => result.Subjects.Select(s=>s.Code)
- .ShouldContainOnly(示例.科目.AutoCAD.Code, 示例.科目.Windows2000.Code, 示例.科目.WindowsExcel.Code);
- private It 應(yīng)該顯示考試開始日期 =
- () => result.BeginDate.ShouldEqual(Date.Of(2012, 1, 1));
- private It 應(yīng)該顯示考試結(jié)束日期 =
- () => result.EndDate.ShouldEqual(Date.Of(2012, 2, 1));
- private It 應(yīng)該顯示是否電子化考試 =
- () => result.IsElectronicExam.ShouldBeTrue();
- private It 應(yīng)該顯示是考試考場(chǎng)容量 =
- () => result.ExaminationRoomCapacity.ShouldEqual(50);
- private It 應(yīng)該顯示是否考試報(bào)名需要審核 =
- () => result.NeedInspection.ShouldBeTrue();
- private It 應(yīng)該顯示考試默認(rèn)科目費(fèi)用 =
- () => result.DefaultCharge.ShouldEqual(Money.of(100));
- private It 應(yīng)該顯示報(bào)考人員信息項(xiàng)目 =
- () => result.PersonalInfoDefs.ShouldContainOnly(示例.個(gè)人信息定義.姓名, 示例.個(gè)人信息定義.身份證, 示例.個(gè)人信息定義.性別);
- private It 應(yīng)該顯示考試相關(guān)考場(chǎng)信息 =
- () => result.Scenes.ShouldContainOnly(示例.考場(chǎng)信息定義.考場(chǎng)01, 示例.考場(chǎng)信息定義.考場(chǎng)02, 示例.考場(chǎng)信息定義.考場(chǎng)03);
- private static ExamDetailGet subject;
- private static ExamDetailDTO result;
- }
- }
原文鏈接:http://www.cnblogs.com/Wonner/archive/2012/07/19/CSharp_In_Chinese.html
【編輯推薦】