从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor
首先是FreeTextbox
此控件是生成的控件(相对于复合控件),不论是toolbar还是toolbaritem,都不是以子控件的形式存在,因此有更好的性能。这种方式的缺点是,不能很好的利用现有的Asp控件,降低了用户自定义控件的方便性。如,我想在toolbari上加上combox,必须自己实现。
视图状态,视图状态的管理是令人头疼的问题,弄不好就会加大视图状态的大小。从Freetextbox对视图状态的实现来看,它的实现中规中矩,完全符合ms推荐的实现方式。但是,是否每个toolbaritem都有必要实行视图状态?其实从Freetextbox的实现分析,大部分的实现是不必要的,因为他们都不会改变。如果把这些实现剔除,Freetextbox的代码会简单很多。
子控件的实现方式,此控件不存在子控件,toolbaritem被定义为实现了IstateMananger的类,每个Item都是一个类,如Bold,Italic等。
总之,这个控件的服务器段代码,十分符合MS推荐的控件实现方式,它的内部实现,类似于ASP的服务器控件实现。也符合常人的思路,代码比较容易理解。结构也不错可以给80分。
其次,Radtoolbar
此控件用的是复合控件。每个toolbaritem都被实现为子控件,并且暴露给客户。从用法来看比较像asp的一些复合控件,即子控件要在aspx中声明。但这种方式对客户来说,用起来很不方便,因为要写许多声明代码。
视图状态,此控件对视图状态的管理,可以说坏到了极点。它竟然通过把控件的属性序列化为xml,然后把xml作为视图状态。这就造成,任何一个细微的改变,都会把视图状态项记为dirty,造成整个xml序列被序列化的客户端。再者xml本身就包含许多不必要的文本,如<sdds>ss</sdds>。可以看到元素名称是很浪费空间的。这就造成此控件的视图状态,会比标准的asp实现大十倍左右。
子控件的实现方式,子控件是通过序列化的方式从配置文件读取。子控件没有细分,如没有类似于Bold,Italic的项。只被粗略分成了Toolbarbutton,toolbarseprator等。
总之,这个控件实现没有细看,因为不论从哪方面来说,它都算不上优秀。50分。
AboutEditor
这个控件的实现类似于Freetextbox,也不是复合控件。
视图状态,他没有为toolbarItem实现视图状态,因为这几乎没必要。
子控件,他同样不存在子控件,与freetextbox的不同在于,他没有细化每个toolbaritem。
总之,此控件和freetextbox很相似,我没有细看。
最后是Cuteeditor
看了他的demo,很震撼,应该是所有editor中效果最好的。
Cuteeditor用复合控件实现,缺点是增加了控件树的开销,效率没有生成控件高。优点就是,客户实现自定义功能较方便。
由于用子控件,大部分视图状态都可以交给webcontrol管理。
他对子控件的实现我认为不算太好,简单的控件都从一个基类派生,这点如果还算不上缺点,那么他对Forecolor等的实现方式,确实不算好。
总之cuteeditor是功能里面最强大的。但是他的实现,很难让人理解。不像Freetextbox,有中规中矩的实现。60分。
看了几个实现,可以说实现方式五花八门,除去视图状态不谈,只要把htmlrender到客户端,控件就算完成了。这就造成实现控件的方式很多。应该怎么写,确实值得思考。
Freetexbox,占去了大概一周的时间,这段时间我仔细看了他最新版本,以及更早版本的代码,它的实现和符合正常人的思路,很容易理解。对他的实现了解太多,以至于不想参考他的实现了。主要是怕写完代码和他特别像。从结构上来看,它的缺点我认为主要在于,把子控件的生成操作,都延迟到了父控件,造成父控件逻辑负杂。我最初的想法是,在Init的时候,构造一个xmldocument,然后每个子控件通过xml的方式,增加xmldoc的节点,最后再返回xmldoc给父控件。
Cuteeditor用了两三天的时间,他的代码很乱,几乎不符合常人的思路。尤其他为了防止破解,故意调整了几个类的顺序,如Editor,嵌套了四五层的内部类,让人看起来很头痛。从他的html看,也不像其他控件一样,能得到许多有用信息。
由于他的效果最好,并且我看了好久都没有头绪,觉定从他下手,写一个类似的editor。
其他的几个控件,和这两个相比都差很远,忽略。
经过近一个月的努力,控件开发终于过半,对cuteeditor的研究也更深入了,觉得他的许多实现确实很诡异,也让人眼前一亮。增加到80分。
Cuteeditor特点
首先,它对资源文件的处理方式来看,他没有采用.net的资源文件,也不是通过自己定义资源管理类来在用到资源时本地化。而是通过重写Textwriter的innerwriter和response的filter实现。细节上,他用到了Idispose接口和using语句,这样在缓冲去满,或者dispose时,自动实现资源的本地化。简直是绝了,我一直没有想过能这样用dispose和这样实现资源。
其次,对事件的处理,这也是cuteeditor做的很好的地方,它把所有的postbackdate和postbackevent,封装到了两个隐藏域中,这两个隐藏域是两个webcontrol,他的值为post的数据和事件。这就使新增事件及其简便。只要加上postback=ture,就可以处理回发。
其次,对脚本的管理,他的脚本都是动态加载的,因此不能调试。又是一个防止破解的招数。
通过httphandler,他托管了*.js的加载。
再次,配置文件的管理,他在运行时,会把几个配置文件加载到一个xmldoc中,实现统一管理。Js也实现了类似功能。
还有,Gizip,以及缓存的管理方式,都和一般人的不同,感兴趣的自己去看源码。
类似的诡异实现还有很多。
我写的editor,主要在下面几点做了改进:
首先是,子控件的管理上,他的管理方式不算好。我把类似ForeColor的控件都抽出了基类。
其次,我认为应该让客户更简单的自定义控件。因此在这点上也有改进。
再次,net2.0已有的功能不再自己实现,如Gizp,在2.o已经有了Gizpstream。
我希望用Ma.js重写他的客户端脚本,因此在服务器端尽量做些支持。
看了回复才知道还有个RadEditor,看了他的代码和效果。发现它才是最好的。90分吧
其中,界面满分20。cuteeditor和Radeditor都是20分。freetextbox10分
服务器端代码部分,ce60,freetextbox70,radeditore70。满分80
转载于:https://www.cnblogs.com/neil-zhao/archive/2008/07/23/1250011.html
从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor相关推荐
- OCX控件开发及WEB Javascript如何使用OCX控件
一.OCX控件开发 1.使用IDE版本: VS2010 2..基于MFC技术 开发OCX控件. 3..基本OCX开发过程 3.1.打开VS 2010 新建项目,选择MFC模板,"MFC ...
- 今天你写控件了吗?----ASP.net控件开发系列
今天你写控件了吗?----ASP.net控件开发系列之开篇 早段时间,同事之间很流行打CS,所以那段时间的问候变成了"今天你杀XX了吗?" 控 件开发也许是程序员最能发掘自己创造力 ...
- 使用ActiveX控件开发网页常见的问题
1. 什么是ActiveX 控件? Microsoft® ActiveX™ 控件是由软件提供商开发的可重用的软件组件.使用 ActiveX控件,可以很快地在网址.台式应用程序.以及开发工具中加入特殊的 ...
- .net控件开发系列
此系列我将尽我所能写下去吧,跟大家分享学习控件开发.也希望大家对我多提意见,让我们共同进步 net控件开发系列 1.net组件开发系列(-)之 ...
- asp.net控件开发基础系列
本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...
- 从软件角度看央视“赢在中国”节目的那套投票系统
中央二套的"赢在中国"的这套鼓励年轻人创业的励志节目真的很不错,我也断断续续看了几场.感觉柳传志和张瑞敏评论的很到位.周宇具备很强的闯劲的勇者,很有激情,很能感染团队中的每个成员, ...
- 一起谈.NET技术,asp.net控件开发基础(20)
上面我们讨论了数据绑定控件的做法,但都未涉及到asp.net2.0中数据源控件的用法,让用惯了数据源控件的人可能感觉不适应.这次我们就开始讨论在asp.net2.0中,我们该如何重新定义数据绑定控件. ...
- 海康威视视频ocx控件开发总结
因工作需要,需要开发一个海康威视的视频ocx控件,嵌入到intouch,组态王一类的组态软件中使用. 之前从没做过ocx控件的开发,连MFC的开发也没做过,折腾了几天,终于基本完成.记录一下这个过程. ...
- 从android研发角度看鸿蒙应用开发
最近公司开发任务,要求做一款现有应用配套的鸿蒙FA,于是开始了我的鸿蒙开发之路.在这里记录并分享我从一个android开发工程师的角度,对鸿蒙和android在开发编码阶段的同与异. android转 ...
最新文章
- 功能性农业实用技术 谋定·农业大健康-李喜贵:粤黔东西协作
- 计算机行业就业前景局限性,市场缺口很大的3个大学专业,一毕业就很吃香,就业前景很光明!...
- (十七)深入浅出TCPIP之HTTP和HTTPS
- 并发不是并行,它更好!
- 2021年中国电竞运动行业发展报告
- 蓝桥杯 ADV-85 算法提高 算术运算
- python数学实验与建模_Python数学
- avalon 笔记---Mr.wing
- Linux下配置静态IP地址,设置DNS和主机名
- mac的java代码生成器为什么文件路径是这样的
- 用python实现代码雨(电影黑客帝国里的效果,代码可直接运行)
- 交直流配电网潮流计算matlab,干货丨交直流混合配电网潮流计算(含分布式电源)...
- 分层采样(stratified sampling)
- mtk6592处理器怎么样,mtk6592参考设计原理图下载
- 系统日报-20220421(Databricks 缘何成功?)
- 叙述两个计算机技术的应用,《计算机技术与应用基础》复习题附答案.doc
- 多层卷积后感受野的计算
- TOGAF企业架构的主要内容——上海信息化培训中心
- 《Serverless 与容器决战在即?有了弹性伸缩就不一样了》
- 优学院电子商务理论与实务试题及答案
热门文章
- mysql 横向排列,mysql横向转纵向、纵向转横向排列的方法
- Pytorch MNIST直接离线加载二进制文件到pytorch
- Catalan数(卡特兰数)
- Linux下python升级步骤
- html中高与行高的区别,深入了解css的行高Line Height属性
- url 特殊字符 传递参数解决方法
- 产品经理思维模型:文化母体、品牌寄生、超级符号
- linux6如何分区,CentOS6.9安装 硬盘分区方案与分区步骤
- jsp实现数据禁用和只读
- java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串