假如我是海洋

我对金色海洋的“框架”的最大批评是它的紧耦合。有没有可能即便捷、又松耦合呢?

先整理下海洋的目前需求:

(1) 尽量用鼠标拖拉,操作尽量简单

(2) 要集成权限管理,不同的权限看到的项不一样,能进行的操作也不一样

(3) 要集成验证

(4) 要有一个TreeView类似的控制板

(5) 要有一个List模式的项列表,要有分页

(6) 要有一个DetailList或FormView模式的单项查看、修改、插入的东东

(7) 强大的搜索选择框

(8) 客户需求发生变化了,要能够很方便的更改

在此基础上我再加几条:

(1) 要松耦合

(2) 要分层

假如我是海洋,我会这样设计这个系统。纸上谈兵,莫怪,没时间编码,我没那么复杂的需求,现有Asp.Net控件已经够我用了,我也没动力去编码实现。

系统结构:

clip_image002

系统分为四大View,要自己开发,与现有的那些Asp.Net 的View类似。具体功能在后面描述、

职责划分:

(1) Filter 负责权限控制。这个权限控制,分三方面:

a) 控制ListView中显示那些条,不同人看到的条数不一样,这是第一步过滤

b) 控制实体属性对用户的可见性,这是第二步过滤

c) 控制用户的行为,过滤四大View的几个标准行为

(2) DataSource负责提供数据和标准行为,DataSource的另一个责任是为IDE提供实体的元数据,这样方便IDE生成View部分的代码

(3) View就是显示了

(4) Database,linq2sql就不说了

下面说四大View:

(1) Dynamic View

这个类似于FormView,只是可以根据Filter动态生成。实质上就是一个FormView加上一步遍历Filter,找到那些没有授权的属性对应的子控件,把它从DynamicView中去掉。

(2) ListView

这个也就是现有的ListView加上一个Filter。

(3) TreeView

得新开发一个。设计一种树型数据结构的标准接口,然后再用Filter过滤节点,最后生成UI端的可见界面。

(4) SearchOptionsView

这个数据源就是实体类,根据Filter显示给用户一些可填项。然后动态的构造查询表达式。(貌似用linq有些困难,不熟悉linq,可能这里有点技术风险,实在不行,可以用上动态编译技术)。

下面来看看需求的实现情况:

l 尽量用鼠标拖拉,操作尽量简单: 数据库建模->biu的一下就生成数据库了->VS里拖一下,biu的一下就生成linq层了,然后拖DataSource,拖View,biu的一下又生成了。Filter也可完全由数据库权限表来生成。上面控件,全部都可以biu的一下生成。

l 要集成权限管理,不同的权限看到的项不一样,能进行的操作也不一样: Filter来负责

l 要集成验证:这个前面没讲,看加到哪一步吧,或者直接在实体上配置属性。

l 要有一个TreeView类似的控制板:有了

l 要有一个List模式的项列表,要有分页:有了

l 要有一个DetailList或FormView模式的单项查看、修改、插入的东东:可以

l 强大的搜索选择框:可以

l 客户需求发生变化了,要能够很方便的更改

加字段—写条sql语句,扔进数据库;给实体类加个属性,匹配一下,搞定;

删字段—改数据库,改实体类

改字段名字—该实体类的属性

……

l 要松耦合:是

l 要分层:是

几点评价:

(1) 对比金色海洋的原架构可能略微复杂一点点,仅靠鼠标也基本可以完成主要操作,但弹性要大太多太多了。各大View可以想怎么玩就怎么玩,而原架构UI层的限制性过大。

(2) 解耦比较彻底,分层比较清晰,这好处谁用谁知道啊。并且,这样解耦和分层,并不会增加什么工作量。都是 biubiubiu的就搞定了。(奥特曼!)

(3) 职责清晰,好维护

(4) 数据分离——数据库就是数据库,元数据就是元数据,UI数据就是UI数据,不混在一起,这样,搞什么不同语言的版本也好,搞什么别的花样也好,都留够了足够的空间

(5)4大View也可以分开用,适用性广了很多

那么,四大View之间关系怎么协调呢?写几个Mediator,实现最常用的几个场景即可。

上面这些话说起来轻巧,实现起来可不轻巧。:P

posted @ 2009-06-29 09:43  xiaotie  阅读(3391)  评论(35编辑  收藏  举报