`
444878909
  • 浏览: 637926 次
文章分类
社区版块
存档分类
最新评论

面向概念编程浅谈:最大限度的UI代码共用

 
阅读更多

现在是 2012-01-29 15:44,今天是年后第一天来公司,木有什么事情做;所以将这篇文章写下来;

一直有 面向对象编程:将程序的编码变得人性化,万物化,理解化;

面向方面编程:AOP,动态的扩展对象的方法(可能我这方面的理解还不够全面)

今天,我所提出的这个变成观念,我在网上找是否有某位先行者已经提出,结果暂时发现木有,所以就抢先一步提出的啦;

为什么会有那么多的编程观念?

面向对象,或多或少的依赖了编程语言的高级,就比方说:会有人说 C#,JAVA 将面向对象表现到了极致,但不会去说C面向对象怎样的优秀(对C了解不很多,一直认为是一个面向过程的语言,可能我的理解有误);

面向方面,或多或少的将程序的逻辑分开化,不至于出现主代码和辅助代码混淆无章的局面,或多或少的方便的日后的维护(因为对AOP的了解暂时不深,所以也不说得太多,希望各位抛砖引玉,举一个完全便于理解AOP的例子帮助我分析)

作为一个一直工作在底层的码工,自己在开发项目和维护项目时也总结了或多或少的经验;

编程观念的出现,或多或少都依赖了程序语言的进化;如果要我回答为什么有那么多编程观念的出现:我的答案是:节省软件开发中思维的理解时间,方便了日后的维护时间——节省软件的开发;

本文所提出的变成观念,也是为节省软件开发时间和编码量提出的;

究竟什么是本文所说的 面向概念编程?

比方说,我之前开发了一个简单的网站,网站后台截图如下:

产品管理页面

产品编辑页面


如上,我们要写这样的一个产品管理,总共两个页面:熟悉了编码规范和公用代码的 程序员熟练的话,编码出来其实也很快!

于是,我们又写了 如下的

文章管理页面


文章编辑页面

也不难,于是我又写出了

产品分类管理


产品分类编辑

这个地方那个下来列表因为实现了 级联,所以多花了点时间,不过也解决得很轻松;

于是乎,我想这样写了很多的 管理/编辑 配套的页面,管理数据;

假如,我是说假如:有一天,网站后台要实现权限管理,针对 删除,添加,编辑 增加权限;

于是,我就要重写 所有的页面,修改代码,编译,发布,测试——好了,页面越多,时间越长!!

究竟有什么方法可以让后面 假如的内容,维护时间变短呢??!!

有几个方案如下:

1.上面的 管理/编辑的页面都是代码生成器生成的,我只需要修改代码生成器的代码,就能立刻生成出我想要的新代码,且出错率也不会太大!

2.上面所有的管理/编辑 的页面,实际上只有两个页面:我只需要修改这两个页面,所有的 产品,文章,产品分类都同时实现了 我想要的权限管理!

3.将需要添加的全县部分代码 尽可能的公共,每个页面仅需添加几行就可以了,这样修改几十个页面难度也不大!

很多程序员可能会选择 第三种,这种一次性的做法,以后维护,以后再加咯;

选择第一种的前提,是 这套 管理/编辑的页面,有一个代码生成器——你有代码生成器吗?

第二种——怎么可能!产品,文章,产品分类….. 都不一样的对象结构,怎么可能公用界面!!

本文提到的 面向概念编程 就是针对的 第二种,且现在我已经编码成功!

面向概念编程 就是针对 不同的界面UI,抽象出最基本的相似点,进行一个UI的公用(至少,我现在的这个变成观念在UI方面复用代码方面,节省开发时间到极致);——因此,这也算是一种面向UI功能的编程

针对上面的功能,于是我就面向 “管理 和 编辑,管理就是一个 GridView,编辑就是一个 Table表格”的这个概念进行的编程;

对的,你已经发现,上面所有的界面都是GridView + Table 的 管理+编辑的组合,界面唯一的不同就是 GridView 中的列不同,Table 中的控件不同;

面向概念编程 本文作者是第一人吗?

当然不是。这一思想的创始人我不知道是谁,但是我知道:金蝶就运用了这一思想,我的前公司的软件也运用了 这一思想:

参与过金蝶 EAS 或BOSS 开发的人员一定知道,金蝶的那些单据界面,几十个输入控件(包括复杂数据控件),然后保存单据之类——这些,完全不是程序员编码实现的,而是 程序员傻瓜式的拖拽控件,配置出来的

——最后:什么外购入库单,产品发货单 在程序中用得是一个 WinForm ——但你觉得不是!

金蝶的这个概念就是:一个单据,保存/审核/反审核(概念不会包括 单据是什么具体单据)

当然,金蝶的强大远不止本文所述的这么简单;

前公司的 新版本产品 代码量不比 旧版本产品 代码量多,可能还要少很多;一样:配置式的傻瓜式编程!

——公用一个 WinForm,但是在展示在界面上时,却让人感觉:这肯定不是一个界面!

新版产品的概念就是:很多条形码数据,右侧现实条码预览/打印 (概念不会包括这些条码是 外购入库的条码,还是最简单的产品条码)

说真的,很感谢在前公司学到的这些;

包括本文提到的 WebForm 的这种抽象,

综上,本文作者 只是一个 后来者,并将这种编程方式(这种针对UI的编程方式)观念化的一个人;

综上,本文提到的概念是 一种相对更针对 界面UI的编程观念;

如何实现刚才提到的 第二种 方式公用界面?

编辑页面,我的代码已经写完了,奈何代码在自己的电脑上,等回家时,再将代码和截图堪上来;

具体思想是:编辑页面 SuperEidt.aspx (界面代码不超过25行) 管理页面 SuperManage.aspx (界面代码不超过30行)

SuperEidt.aspx?configKey=product 就会现实 产品编辑所需要的控件

SuperEidt.aspx?configKey= article 就会现实 文章编辑所需要的控件

没错,通过 configKey 来加载配置,创建控件,加载对象

包括 级联下拉控件,图片切割上传 等复杂控件 都自动生成,且 都是公共代码(不针对产品,不针对文章,不针对产品分类)

——要想修改权限控制,我只要修改一下 SuperEidt.aspx 的代码,当场就OK了,维护起来是不是也方便了呢??

最后可能还会加一个配置界面,专门进行傻瓜式配置: 产品名称-文本框;产品类型-级联下拉列表;产品明细-富文本;…….

好了,没有代码在这里空写;多写无益……

有兴趣的朋友等待 相关文章和代码的堪出……

舒小龙

2012-01-2916:45

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics