当前位置: 首页 > news >正文

面向概念编程浅谈:最大限度的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

相关文章:

  • C#实现字符串相似度比较[Levenshtein Distance算法]
  • windows下编译boost库
  • 创建和使用动态链接库
  • boost.python的基本使用方法
  • swig+python的用法
  • Lua For Windows 环境配置及使sciTE支持中文
  • 获取Libgdx源码和demos
  • libgdx demo 分析:superjumper
  • cocos2d-x基础一 Android环境配置和HelloWorld的运行
  • cocos2d-x基础二
  • 一种Web UI 的代码设计思路
  • cocos2d-x基础三 播放动画
  • 在SVN中偷偷发个LGame的C# Beta版(意味着支持WP7和XBOX之类了)
  • C#实现WORD文档的内容复制和替换
  • Java与C#开发上的一些差异与转换方法
  • 2017前端实习生面试总结
  • Apache的80端口被占用以及访问时报错403
  • eclipse的离线汉化
  • JS 面试题总结
  • js面向对象
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 简单数学运算程序(不定期更新)
  • 组复制官方翻译九、Group Replication Technical Details
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)Android开发优化---------UI优化
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (7)摄像机和云台
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (bean配置类的注解开发)学习Spring的第十三天
  • (function(){})()的分步解析
  • (Java)【深基9.例1】选举学生会
  • (vue)页面文件上传获取:action地址
  • (二)学习JVM —— 垃圾回收机制
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)memcache、redis缓存
  • .CSS-hover 的解释
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET6实现破解Modbus poll点表配置文件
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • //TODO 注释的作用
  • @在php中起什么作用?
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [20170705]diff比较执行结果的内容.txt
  • [Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件
  • [BZOJ] 2044: 三维导弹拦截
  • [C++]指针与结构体
  • [HDU3710]Battle over Cities
  • [HEOI2013]ALO
  • [Jquery] 实现温度计动画效果
  • [MZ test.16]P1 评测