框架那些事儿(3)——控件库
从简单的入手对我来说是必要的。因为我并不是说有很多的经验和技巧。而通过简单的东西中却可以积累出经验来。是一种比较靠谱的做法。
最简单的要数控件库了。因此接下来我说一下我对控件库的看法。
在很多人看来,控件库应该是跟数据没有关系的。是一种见凡.NET写的Web应用就可以用的一个库。
我是持有不同看法的,我认为一个用于框架的控件库,只要满足该框架的规范就可以了。
例如以人员选择控件为例,人员的选择是需要人员数据的,一般来说,你是不知道目标应用会如何取数据的,为了使这个控件通用,你需要定义好取人员数据的接口。不同的应用需要使用该控件时提供一个该接口的实现来实现控件的重用。注意,我这里用了“一般来说”。因为如果我在框架中制定了对组织结构的规范,那我是知道框架中所有的应用是如何取得人员数据的。因此我也就没必要去再定义人员选择的接口规范。当然你会说这样的话不用框架就不能使用该控件了呀。呵呵,那可是我的目的呀,不用框架你就是不能使用的,我是逼着你用的。
接下来分享一些经验。
1. 很多人都做过控件了,能拿过来用是一件无比惬意的事情。当然前提是要拿个好用的,兼容性好的,有源代码的。
2. 自己还是要做控件的。不断的积累,控件将会越多。所以这时要注意,你要让自己做的控件的使用方式是一致的,也就是说要制定自己的一套控件规范。对于控件来说,很多人希望它后台能进行控制,前台也能控制,还希望它不能太复杂,能支持换肤,甚至多语言。因此规范要包括这些方面。这里举个例子:如何让控件的前台使用方式一致呢?
很容易想到的是,后台有什么方法前台也尽量提供,并且命名保持一致(首字母由大写转为小写以满足前台规范)。这样用以保持前后台的一致性。
如何取得前台对象,使得使得取前台对象的方式一致呢?例如<web:MyControl runat="server" ID="MyControl1" /> 在前台如何以一致的方式取得它的控件对象呢?这是要经过思考的。在你写第一个控件之前要想好的。我的办法是统一通过 %ID%_control 的方式取得前台对象。这是一种规范。规范会约束你,但那绝对也是为了你。
因为这系列文章定位为 Think, 这里不会有代码的实现。具体的实现部分将会在 Framework-XXX 中体现。例如控件的具体实现将在 Framework-Controls 中详细讨论。