简单干净的C#方法设计案例:SFCUI.AjaxValue()之一
之一,之二,之三
有很多时候,需要我们在代码中执行很多重复的工作,这时候要涉及到如何使用可复用的方法来解决重复性问题。
比如一个项目管理系统,要求在不同的页面的不同位置都能调整任务的估算工作量,而且要使用Ajax方法(因为每次调整后都要实时看到总计),应该如何做呢?
从操作步骤上看,大致分为这么几步:
0. 显示当前的值(应该看上去能修改的样子)
1. 点击当前值,弹出一个小窗口,里边是可能的取值(比如0.25, 0.5, 1, 2, 3,5……天),且显示为链接(因此用户会去点)
2. 点击其中一个链接(Ajax链接),执行某个Ajax功能
3. 若成功,应该返回新的数值
4. 如果需要,更新某些计算结果(如调整后的总工时等)
大致业务界面如下:
右边绿框中显示的就是当前值(上下还有很多这种当前值),所有工作完成后,需要刷新左侧带阴影区域(第一是黄框中的总额;此外由于这个任务还显示在左边的区域中,所以第二还要同步更新左边下面的蓝框中的数值)。
要一步一步地实现这些技术上并不太难,无非是
0. 把当前值显示为一个DIV
1. 点击当前值,用jquery toggle出一个另一个平时隐藏的DIV,里边放好了所有可能的取值
这些“可能的值”应该是用某种方法读取来的,否则容易乱;每个值,都是一个Ajax链接
2. 点击其中一个链接(Ajax链接),执行某个Ajax功能,这个功能应该是比如Efforts/AjaxSetEffortPlanned?itemID=XX&effortPlanned=YY之类的
3. 若成功,应该返回新的数值,所以把1中的每个Ajax链接的UpdateTargetID设为0中的DIV即可
4. 成功回来后刷新左边的区域,重新计算和现实(这里假设已经有了个js函数叫做function refreshLeftPad())
但是,如果有很多页面都要这个功能,而且以后还有其他的类似功能(调整当前负责人、完成状态之类的……),那么代码就会臃肿重复,怎么办呢?封装。
封装的原则
下面这个原则是我2001年的师傅关宏超说的,后来一直被我们发扬光大,叫做“最小信息原则”:
最小信息原则:方法接口应只传递最必须的业务信息。
包括两个层面:
1. 技术数据不要传递
2. 业务数据不能重复
到底说的是什么意思呢?请看下一篇
转载于:https://www.cnblogs.com/JPAORM/archive/2012/02/05/2510363.html
简单干净的C#方法设计案例:SFCUI.AjaxValue()之一相关推荐
- 简单干净的C#方法设计案例:SFCUI.AjaxLoadPage()之一
之一,之二 案例背景 本文将介绍如何通过一行代码实现下图中的功能. 红色框中是http://blog.csdn.net/cheny_com/article/details/7234619提到的Ajax ...
- 简单干净的C#方法设计案例:SFCUI.AjaxValue()之三
之一,之二,之三 之前讲到,方法声明为: @SFCUI.AjaxValue(story.ID, effortValue.ToString(), Effort.EffortPlannedValues, ...
- 简单干净的C#方法设计案例:SFCUI.AjaxValue()之二
之一,之二,之三 先重温一下原则: 最小信息原则:方法接口应只传递最必须的业务信息. 包括两个层面: 1. 技术信息不要暴露 2. 业务信息不能重复 业务信息分析 先别管技术问题,想一想做这个事情需要 ...
- 简单干净的C#方法设计案例:SFCUI.AjaxLoadPage()之二
合并显而易见的代码 所谓显而易见的代码,就是看上去和别处相同的代码. 在这个例子中,就是View'中初始页面显示的内容与未来刷新的内容重复:Controller中初始显示的运算和刷新的相同. Cont ...
- 弹性方法计算内力例题_长江大学土木工程专业2008年钢筋混凝土楼盖课程设计案例...
长江大学土木工程专业2008年钢筋混凝土楼盖课程设计案例 钢筋混凝土楼盖课 程 设 计 指 导 书长江大学2008 年 8 月目 录第 1 节 设计任务书一.设计任务二.设计内容三.设计条件四.进度安 ...
- DDD系列 实战一 应用设计案例 (golang)
DDD系列 实战一 应用设计案例 (golang) 基于 ddd 的设计思想, 核心领域需要由纯内存对象+基础设施的抽象的接口组成 独立于外部框架: 比如 web 框架可以是 gin, 也可以是 be ...
- 易于使用的人工智能_需求分析:如何使用这种易于启动的方法+一个案例研究...
易于使用的人工智能 by Turgay Çelik 由TurgayÇelik 需求分析:如何使用这种易于启动的方法+一个案例研究 (Requirement Analysis: how to use t ...
- 怎么把线稿提取出来_PS教程:提取线稿如此简单?三种方法总有一种适合你
原标题:PS教程:提取线稿如此简单?三种方法总有一种适合你 部落窝教育,每天学习PS独家原创视频 在PS出现之前,如果我们喜欢某个动漫角色大概只能通过临摹的方式将人物线条勾勒出来,但PS的出现将提取线 ...
- 数据挖掘:实用案例分析 下载_萌低龄,超实用“萌系”呈现技巧及设计案例分析...
关于讲师:钟文博 ,腾讯互动娱乐创意设计部高级设计师,擅长萌系产品的设计表达. 导语:不同的美术风格有着不同的受众偏好,游戏美术的风格对受众的吸引力和游戏玩法本身同样重要.在当下社会,萌系风格文化对社 ...
最新文章
- 万字长文!Jeff Dean亲笔盘点谷歌AI 2019:纵横16大方向,汇集重要开源算法(附链接)...
- C++实现的简单vector
- 全球及中国双特异性单抗行业发展可行性及项目调研评估报告2022-2027年
- 几种排序算法性能的比较
- Android监听作用,Android开发之CheckBox的简单使用与监听功能示例
- python 插入查找
- SQL Server 2008 Service Broker
- MySQL重做日志(redo log)总结
- 20135210——信息安全系统设计基础第一周学习总结
- 单片机编程技巧—状态机编程
- matlab积分器,MATLAB_SIMULINK__积分器相关操作
- 如何获取节假日的方法
- 基于DirectShow实现的视频捕捉与采集
- codeforces topcoder 指南
- 问:全局变量是否可以定义在被多个.c文件包含的头文件.h中?
- mysql url查找_Superl-url:一款开源、强大的关键词URL采集工具
- shell编程之特殊符号
- 国产数据库OpenGauss--内存优化表(MOT)实践
- 河北工业大学 计算机科学与技术,2021年河北工业大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...
- D3 天眼查 股权穿透 股权结构
热门文章
- 路由器setup模式
- 【计算机组成原理】课本总览
- windows系统 ping Telnet等系统自带命令无法使用原因及解决方法
- [转]非极大值抑制(Non-Maximum Suppression)
- 主流的数据可视化工具介绍
- java 绘制动态小球_JavaScript动画实例:动感小球
- oracle or 运算,Oracle Or子句
- php函数方法属性吗,为什么PHP属性不允许使用函数?
- mysql cluster常见问题访问_MySQL Cluster的常见问题
- python时间模块 dir(time)_python sys,os,time模块的使用(包括时间格式的各种转换)...