火星人代码示例:系统设置(asp.net MVC3中View的复用示例)
功能简介
最终功能如图:
上面一行两张图,是火星人的用户故事树配置界面,在每个用户故事的后面都有一个按钮(悬停可见),点击后出现操作菜单,其中一部分是新建下级故事菜单。
若用户选择左侧,菜单上只包括一个项目“通用故事”;若选择右侧,则包括很多故事(受当前故事类型的约束,这个比较复杂以后再说)。
这段代码,等一下将会出现关键字“StoryTreeType”,左侧叫做“Simple”(简单树),右侧叫做“Leveled”(等级树)。
下面一行两张图,是火星人的状态链配置界面,在上面提到的操作菜单上,除了能新建故事之外,还能将当前故事转移到另外一个状态。
若用户选择左侧,菜单上只包括与开发相关的状态(新建-待开发-开发中-开发完毕-部署完毕);做选择右侧,则会出现所有状态(新建后有审批等环节,而部署过程也包括多个状态)。
这段代码,等一下将会出现关键字“StatusList”,左侧叫做“DevelopmentOnly”(仅包含研发状态),右侧叫做“All”(所有)。
很显然,不只是这两排界面很类似,这四个界面和背后的模型都非常相近,下面谈谈如何以最小代码实现这个配置功能。
Controller部分的代码略过,重点看Model和View的封装。
第一步:开发出StoryTreeType部分的Model代码后续及总结后续做完这些,_StoryTreeType1.cshtml这个文件名已经不妥了,因为它可以1行代码完成任何系统配置(包含一个标题,若干可选项,一组描述,一张图片),所以下一步需要修改它的名字,并且放到合适的地方。不过就我们自己的习惯而言,我们会先改动名字,然后就放在原来使用它的地方。直到下一次真正被重新使用,再商量放在什么地方合适。这句话的官方说法叫做“Use it before reusing it“,如果它现在就管这四个界面,就让它好好管着,等日后再说。总结整个过程包括写作本博客,大约耗时2小时。可能有人会问:不过就是4个页面嘛,就是拷贝粘贴,也用不了1个小时啊,为什么要这么费劲?有这么几个原因:1. 未来我们大约会有20多个这样的设置页面,按上面介绍的封装,每生成一页只需要在View中添加一行代码。2. 由于我们还没有美术人员,所以未来可能会改动页面效果,而这些页面都需要保持相同的风格。3. 未来技术上可能也会做一些改动,比如那个Config,这些改动都不希望去修改很多代码。
其实,整个火星人的产品,就是在这种积木代码中产生的,有很多意想不到的地方都是只要1~2行代码就能调用出来(故事树、组织结构图、燃尽图、所有菜单(每个菜单都是延迟加载的)……)
这种习惯一旦养成了,代码就会越来越精练,而编写过程也越来越简单。