一些关于系统架构实现的胡言乱语

前一阵子在写一个通用属性管理器,用于我们系统框架内的组件属性的管理。写着写着,忽然冒出了一些想法,在这里贴出来,希望大家能够来探讨。

首先准备只是写一个普通的属性管理器,通过关键字来获得某一个属性的值,就像 COM+ 里面的 SPM 。这样我们可以通过一个集中的界面来维护整个框架内的组件属性。可以管理一些共享的属性,比如连接字符串、公司名称、 WEB 界面的缺省 CSS 文件名之类的。

 1<step(“ ”)="" 进化=""> 设计的时候,觉得如果属性很多,管理起来不方便,后来决定使用命名空间来区分。于是变成了一个支持命名空间的属性管理器。后来发觉组件并不一定知道别的命名空间,这样访问一些共有的变量就很麻烦(不能在  VS.NET  的智能列表里面列出系统已注册的属性空间,需要程序员自己记住这些变量的命名空间),而这是我们开发的初衷。而且属性的安全也是一个问题,一个恶意的组件可以破坏掉整个系统。 
 2
 3<step(“ ”)="" 第二次进化=""> 自然而然的,我想到了属性的权限,组件只能在自己的命名空间里面读写,只有一些拥有特殊权限的组件才能够读写整个命名空间。考虑了半天,准备使用  windows  的安全机制来实现。只有指定的用户才能够激活一些全局管理类实例(幸好  VB.NET  在这方面比较方便)。呵呵,是不是觉得很复杂了?我也这样想。对于全局属性,我决定使用继承来实现,也就是命名空间级别的继承,子空间自动只读继承父空间的所有属性,这样一些共有属性就可以很方便的管理和读取了。 
 4
 5<step(“ ”)="" 新的想法=""> 写到这里,我忽然有了一个新的想法。既然属性可以这样自动化继承,类是不是也可以呢?其实现在这样的属性管理,只要类通过申明处于不同的属性空间,就可以得到不同的配置属性,来实现不同的特征。比如订单类,订单组件通过读取当前属性来构造自己。这样通过处于不同的属性空间层次,就可以得到不同的订单特征。我觉得这是一个很有意思的想法,我更希望类能够直接被继承,通过一些特殊的配置,让类具备新的行为。在命名空间内,通过装配和继承,可以实现很多新的特征和功能。在完美的世界里,可以不需要修改代码,就直接修改商务流程。在这个时候,属性的功能被扩大了,属性必须包括  Overrideable,NotOverridable  之类的特征。 
 6
 7<step(“ ”)="" 细节=""> 出于这个目的,我看了  SQLServer  的  MetaDataService  。很可惜,这个东西似乎与可以实现我的想法,可是资料却极少,  MS  自从  2002  后就没有更新过,看上去像被放弃了。 
 8
 9我的最终目的是实现这样一个系统: 
10
111.  框架系统提供基本的服务,包括所有基本类型的实现(数据库访问,基本数据类型,通讯,一些通用商务对象  …….  的实现) 
12
132.  开发人员可以通过一个  GUI  管理器来派生和扩展这些类,来得到符合自己要求的对象。当然,作为一个程序员,可以把自己写的类型插入到系统,来得到额外的功能。  (  这里面涉及到一个类型之间交互的问题,我还没有好的想法  ) 
14
153.  业务顾问在  Visio  里面画出业务流程图,然后开发人员可以把最终商务类和这些流程联系起来(呵呵,受  Biztalk  影响)。 
16
174.  系统引擎知道如何处理派生类,并且流程能够在商务流程变动的时候,重新编译。(这句话可能比较模糊,因为我发觉自己也很难把确切的想法表述出来) 
18
195.  所有的类型,都可以实现安全管理。通过类型命名空间和安全命名空间的映射来实现权限继承和管理 
20
21<step(“ ”)="" 补充=""> 当然,需要一个强大的缓存管理器来解决由此带来的性能冲击,这个缓存管理器我已经有了一些想法,不过已经超出了本文的范围,以后再讲吧。 
22
23<step(“ ”)="" 结束=""> 对于这样的一个框架系统,我只是有一些朦胧的想法,还没有完全可行的方案。只是趁着自己还没有完全忘记,把它写下来,希望能够抛砖引玉,和大家一起探讨。 
24
25我在  VB.NET  版,叫做  bucher(  无人永生  )  。</step(“></step(“></step(“></step(“></step(“></step(“>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus