敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(中)
这是松结对编程的第22篇(专栏目录)。
接前文
业务代码
- public static MvcHtmlString StatusFiltersDropdownList(WebViewPage page)
- {
- var allStatuses = Status.AllStatuses().ToList();
- const string key = "statusIds";
- var currentStatusIds = page.ParameterOf(key);
- //Status groups filters on the top.
- var linksLeft = new Dictionary<string, IEnumerable<Status>>
- {
- {"所有状态", allStatuses},
- {"所有正常", allStatuses.Where(i => i.IsNormal)},
- {"所有开放", allStatuses.Where(i => !i.IsClosed)},
- {"所有故事板", allStatuses.Where(i => i.IsDisplayedOnKanban)},
- };
- var linksListLeft = AddToList(page, key, currentStatusIds, linksLeft);
- var linksRight1 = new Dictionary<string, IEnumerable<Status>>
- {
- {"0", null},
- {"所有已放弃或推迟", allStatuses.Where(i => !i.IsNormal)},
- {"所有关闭", allStatuses.Where(i => i.IsClosed)},
- {"所有非故事板", allStatuses.Where(i => !i.IsDisplayedOnKanban)}
- };
- var linksListRight1 = AddToList(page, key, currentStatusIds, linksRight1);
- //Single status filters on the bottom.
- linksListLeft.Add(new MvcHtmlString("<hr/>"));
- linksListLeft.AddRange(allStatuses.Where(i => i.Value >= 0)
- .Select(status => status.Link(outerLink: page.MergeParameter(key, "_" + status.ID + "_"), title: status.Value.ToString(),
- displayAsBoldText: "_" + status.ID + "_" == currentStatusIds)));
- linksListLeft.Add(new MvcHtmlString("<hr/>"));
- linksListLeft.AddRange(allStatuses.Where(i => i.Value < 0)
- .Select(status => status.Link(outerLink: page.MergeParameter(key, "_" + status.ID + "_"), title: status.Value.ToString(),
- displayAsBoldText: "_" + status.ID + "_" == currentStatusIds)));
- //Current value text
- var currentValueText = "";
- MvcHtmlString currentValue = null;
- currentValueText = linksLeft.SingleOrDefault(i => i.Value != null && currentStatusIds == i.Value.Aggregate<Status, string>(null, (current, status) => current + "_" + status.ID + "_"))
- .Key ?? currentValueText;
- currentValueText = linksRight1.SingleOrDefault(i => i.Value != null && currentStatusIds == i.Value.Aggregate<Status, string>(null, (current, status) => current + "_" + status.ID + "_"))
- .Key ?? currentValueText;
- if (!string.IsNullOrEmpty(currentValueText))
- {
- currentValue = new MvcHtmlString("<b>" + currentValueText + "</b>");
- }
- else
- {
- var status = allStatuses.SingleOrDefault(i => currentStatusIds == "_" + i.ID + "_");
- currentValue = status != null
- ? MFCUI.Image(status.Title, "/MFC/Items/STAT/STAT16.png", showText: true, cssClassOfText: "bold", textColor: status.Color)
- : new MvcHtmlString("<b style=\"color: #169; \">请选择</b>");
- }
- var ddl = MFCUI.DropdownListHtml(page, currentValue, linksListLeft, linksListRight1, null, "200px");
- return new MvcHtmlString("状态:" + ddl);
- }
有一个被调用的函数在这里:
- private static List<MvcHtmlString> AddToList(WebViewPage page, string key, string currentStatusIds, Dictionary<string, IEnumerable<Status>> linkList)
- {
- var linksList = new List<MvcHtmlString>();
- foreach (var link in linkList)
- {
- var statusIds = link.Value == null ? "" : link.Value.Aggregate<Status, string>(null, (current, status) => current + "_" + status.ID + "_");
- linksList.Add(link.Value == null
- ? null
- : MFCUI.Link(link.Key, page.MergeParameter(key, statusIds), displayAsBoldText: statusIds == currentStatusIds));
- }
- return linksList;
- }
这样封装的代码没有复用价值,但可以减少维护时的阅读量。
关于注释
业务逻辑代码
- subItems = statusIds == null
- ? ItemsUnder(repository, rootID, includeHidden: includeHidden)
- : ItemsUnder(repository, rootID, includeHidden: includeHidden).Where(i => i.Status != null && statusIds.Contains("_" + i.Status.ID + "_"));
这是它唯一被真正使用的地方。尽管我们会对很多东西进行筛选,但都不需要写任何一行代码了,因为这行代码位于“很多东西”的底层。日后如果技术上有什么变动,就修改它就可以了。
实现业务变更
敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(中)的更多相关文章
- L型代码结构案例:Link访问权限(上)
这是松结对编程的第20篇(专栏目录). 本文探讨Link访问权限的最佳实现方法,力求外观干净且封装良好. 这些代码将位于L型代码结构(参见松结对编程系列中的定义)的下层,调用者无需理解其原理. 顺便说 ...
- shell编程系列26--大型脚本工具开发实战
shell编程系列26--大型脚本工具开发实战 大型脚本工具开发实战 拆分脚本功能,抽象函数 .function get_all_group 返回进程组列表字符串 .function get_all_ ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- shell编程系列19--文本处理三剑客之awk中的字符串函数
shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...
- 《Windows核心编程系列》十三谈谈在应用程序中使用虚拟内存
在应用程序中使用虚拟内存 Windows提供了以下三种机制对内存进行操控: 一:虚拟内存.最适合来管理大型对象数据或大型结构数组. 二:内存映射文件.最适合用来管理大型数据流,以及在同一机 器上运行的 ...
- 安卓APP开发简单实例 结对编程心得
开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...
- 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程: Java 班级:1352 姓名:黄伟业 学号:20135215 成绩: ...
- 实验三 敏捷开发与XP实践
实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验 ...
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
随机推荐
- libctemplate——C语言模块引擎简介及使用
前言 由先声明此libctemplate不是Google那个ctemplate.这个库是用C语言实现的,只有一个实现文件和一个头文件.Gooogl的ctemplate是C++实现的,和线程还扯上了关系 ...
- StandardServiceRegistryBuilder
org.hibernate.boot.registry.StandardServiceRegistryBuilderhibernate4.3 Configuration cfg = new Confi ...
- CI源码引用使用--php引用demo,静态变量和引用关系
CI源码引用使用在Common.php中,加载配置和类的方法 function &test() { static $a = ''; if (!$a) { $a ...
- Git关联远程GitHub仓库
一.本地安装GIT版本控制软件 二.配置Git,设置用户信息 git config --global user.name "jack" git config --global us ...
- 实现Word的列表样式
1.创建列表,但是不要求在文档视图中显示的层级列表 1)首先是要先把层级建立好,然后选中要编号文字.开始->段落->多级列表,选择一个列表样式,会默认所有的编号文字都是一级: 2)选择&q ...
- 2016最新Java笔试题集锦
更新时间:2015-08-13 来源:网络 投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...
- hg vs git :这个世界除了svn还有别的
最近想用版本控制软件来保存汉化文件,但又觉得SVN太麻烦,于是想到了最近较为流行的分布式版本控制工具.而Git和Mercurial(意思为水银的,于是经常缩写为Hg)自然是其中最为流行的工具.大名鼎鼎 ...
- 自己挖坑自己跳 之JsonMappingException: (was java.lang.NullPointerException) (through reference chain:)
在Web项目中,我们经常会设计一些与界面相对应的JavaBean作为Entity,而为了兼容前台传入的空值,有些字段我们会用包装类型而不是基本类型.可是往往我的Entity已经设计完成,很多时候我们会 ...
- L1、L2范式及稀疏性约束
L1.L2范式及稀疏性约束 假设需要求解的目标函数为: E(x) = f(x) + r(x) 其中f(x)为损失函数,用来评价模型训练损失,必须是任意的可微凸函数,r(x)为规范化约束因子,用来对模型 ...
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-A
有了这块知识,应该对各类WEB框架有更好的理解吧..FLASK,DJANGO,WEBPY.... #!/usr/bin/env python from BaseHTTPServer import HT ...