简单干净的C#方法设计案例:SFCUI.AjaxValue()之二

之一之二之三

先重温一下原则:

最小信息原则:方法接口应只传递最必须的业务信息。

包括两个层面:

1. 技术信息不要暴露

2. 业务信息不能重复

业务信息分析

先别管技术问题,想一想做这个事情需要哪些数据才能完成?

1. 原来的值是多少(显示用)

2. 可能的值有哪些(选择用)

3. 点一个值后,应该执行什么操作(这个是核心业务)

4. 返回后做什么(刷新用)

还有一些问题哪去了?

5. 返回的值刷新到哪里?这个调用者不管,他让我们安排,显示也是我们显示(比如一个DIV),刷新自然就是刷新我们显示的那个位置。

6. 如果返回后什么都不做怎么办?看着办。

最终方法接口设计为:

        public static MvcHtmlString AjaxValue(int id, string value, string[] values, string urlFormat, string ajaxOnSuccess = null)

怎么多了个ID?因为要显示很多个这种Ajaxalue, 用ID来区分。
urlFormat是什么?他是用来定义生成的Ajax链接的格式的,请看下面的调用(略微存在一些问题的):

    @SFCUI.AjaxValue(story.ID, effortValue.ToString(), Effort.EffortPlannedValues, "/SFC/Efforts/AjaxSetEffortPlanned?itemID=" + story.ID + "&value={0}", ajaxOnSuccess: "refreshLeftPad");

这几个参数顺序说明是:story.ID修改谁的值,effrotValue当前值,...EffortPlannedValues可能的值,"...."AjaxLink的href格式{0}里边未来将放着被选择的value,ajaxOnSuccess是正确返回调用的函数。

接口设计原则的分析

从理论上说,在任何 cshtml中放置这句话,就具备了所有的业务信息,剩下的全是技术问题,在这个方法里边解决,外面一概不管,这就叫做“技术信息不要暴露”的子原则。
怎么前面说“略微存在一些问题”呢?因为story.ID在这个里边出现了两遍,第一次是一个整数参数传递进去了,第二次是用来生成了urlFormat传递进去了,第二次多余,应该改成:

    @SFCUI.AjaxValue(story.ID, effortValue.ToString(), Effort.EffortPlannedValues, "/SFC/Efforts/AjaxSetEffortPlanned?itemID={0}&value={1}", ajaxOnSuccess: "refreshLeftPad");

这样里边在0放置id,1放置value,就能拼凑出AjaxLink来。

现在,再删除任何一个字母和标点符号信息就不够了,这就叫做“业务信息不能重复”子原则。

掌握了这个原则,就能在第一时间确认接口的参数(本人喜欢称之为“外观”),然后开工编写。

当然有时候不能第一次就写出最简练的接口,那么可以尝试先“散装”一下,是一个函数,还是一堆DIV,先写出来再说,写完了,再封装成最简形式。

下一篇,会大致说一下AjaxLink里边的实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值