简单干净的C#方法设计案例:MFCUI.CheckBoxLink(二)

方案2

第一步:写一个新的函数名在原来的代码下面
第二步:把原来的代码拷贝到下面
两步下来,如图:
    @this.MergeParameter(
    @MFCUI.ImageLink("突出显示故事板上的状态", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon: true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight"))) 
    if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))
    {
        @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))
    }
第三步:从函数括号后面开始删除不想暴露的信息,能“活下来”的,就是真正的参数。
删除的结果:
@this.MergeParameter("突出显示故事板上的状态", "[取消]", "highlight", "OnBoard")
其他的要么总是一个值,要么重复了。
问题来了:如果一个参数多数时候是某个值,而其他时候则是另外一个怎么办?用缺省参数。
比如我们的ImageLink居然只有Url而没有ImageUrl,怎么知道显示什么图片呢?因为如果url是http://localhost:53979/Agile/StoryBoard/TeamStoryBoard?teamID=103&highlight=OnBoard,而且又没有指定ImageUrl(是个缺省参数),我们会尝试使用http://localhost:53979/ Resources/Images/Agile/StoryBoard/TeamStoryBoard16.png,这样如果能把图标全部井井有条地放在目录里边,每个连接都会自动去搜索自己的图标,除非刻意指定(我们只有10%情况需要指定)。这种做法就可以实现90%情况下的 信息隐匿
第四步:建立这个函数,并把三行代码拷贝到里边
        public static MvcHtmlString MergeParameter("突出显示故事板上的状态", "[取消]", "highlight", "OnBoard")
        {
            @MFCUI.ImageLink("突出显示故事板上的状态", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon : true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight"))) 
            if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))
            {
                @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))
            }
        }
第五步:动手改造
        public static MvcHtmlString MergeParameter(this WebViewPage page, string title, string titleToCancel, string parameter, string value)
        {
            var span = new TagBuilder("span");
            span.InnerHtml +=
                MFCUI.ImageLink(title, page.MergeParameter(parameter, value),
                                displayAxTextUseCheckIcon: true,
                                displayAsText: !String.IsNullOrEmpty(page.ParameterOf(parameter))).ToString();
            if (!String.IsNullOrEmpty(page.ParameterOf(parameter)))
            {
                span.InnerHtml += MFCUI.Link(titleToCancel, page.MergeParameter(parameter, null));
            }
            return new MvcHtmlString(span.ToString());
        }
第六步:测试
注意测试的时候保留原来的代码,重新开一行:
    @MFCUI.ImageLink("突出显示故事板上的状态", this.MergeParameter("highlight", "OnBoard"), displayAxTextUseCheckIcon : true, displayAsText: !String.IsNullOrEmpty(this.ParameterOf("highlight"))) 
    if (!String.IsNullOrEmpty(this.ParameterOf("highlight")))
    {
        @MFCUI.Link("[取消]", this.MergeParameter("highlight", null))
    }
    <br/>
    @this.MergeParameter("突出显示故事板上的状态", "[取消]", "highlight", "OnBoard")
好处是随时可以比照代码看看有什么问题。

整个1~6步过程花费了10分钟,测试成功了,不过……我们发现当看到这个界面时,自己一点都不想点击那个取消,而是想点击那个Check图标:

所以,能不能改成去掉“取消”,直接点击Check图标?完了,需求变更,全泡汤了。

另外:@this.MergeParameter(...)这个函数名字也不伦不类,谁猜得到要生成一个链接需要用this(WebViewPage)的函数呢?所以应该改一下位置。完了,设计重构,全泡汤了。
很可惜,这是开发的常态,就是需求总是在变化,设计总是在重构!关键在这时候,我们是想面对一行代码,还是散装的几行代码?(如果没有ImageLink,会有更多代码)何况里边还有很多重复的,可能需要改动和不需要改动的地方。

这就是信息隐匿的目的:尽量把再次调用、需求变更、设计重构的时候,安全、高效地修改最少的地方、最少的文字。

怎样修改,请看下篇。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值