【自然框架】之“元数据”的威力

 

定义
      元数据最本质、最抽象的定义为:data about data (关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。

      我的理解就是对数据进行说明、描述。不知道我的这个理解对不对?呵呵。

      SQL Server 里面有两个表,我们可以用这个SQL语句来查看一下,我们可以看到数据库里面的表和字段的信息。那么这些数据是不是可以看做是一种“元数据”呢?

SELECT TOP 100 PERCENT tbl.name AS 表名, col.name AS 字段名, tt.name AS 字段类型, 
      col.length
FROM dbo.syscolumns col INNER JOIN
      dbo.sysobjects tbl ON col.id = tbl.id INNER JOIN
      dbo.systypes tt ON col.xtype = tt.xtype
WHERE (tbl.xtype = 'u') AND (tt.name <> N'sysname')
ORDER BY tbl.name, col.colid

 

 

 

      有一些代码生成器,会根据这个信息来生成代码,但是我觉得这些信息还远远不够,就是说描述的还不够准确。当然了,如果只是生成实体类的定义,那还是够用的,但是如果还想要生成UI里面的代码,那就不够用了。因为我不知道一个字段在UI(具体一点,比如表单)里面会以什么控件出现?是文本框还是下拉列表框?不能准确说明,那就是信息不够详细,也就意味着生成出来的代码还需要手动的修改。一修改就带来了很多的问题,在这我就不想多说了,呵呵。

 

      自然框架里面的“元数据”指的是什么呢?简单的说就是表的说明、字段的说明。当然还有元数据的组合方式,比如一个表单里面需要哪些字段,而这些字段是可以从多个表里面获取。那么这个表、字段的说明和数据库里的那些有什么不同呢?描述更加详细。比如他描述了在表单里面是什么控件、数据的验证方式等等,而且还可以根据您的需要而酌情增加。

 

【表和字段的扩展信息】

 

 【一个功能节点(表单)里面需要的字段,可以是多个表里的字段】

 

      有了更加准确的描述,那么我们就可以做更多的事情,同时也可以做的更好,更准确。那么到底能做什么呢?请看下图:

 

【又补充了一个图】

 

      上面的图好像有点乱,能做的事情实在是太多了。当然您可能觉得维护些么多的元数据,成本太高了不划算,还不如直接写代码。还是写出来的代码用着放心,而且可以随心所欲的去调整。这个就是仁者见仁智者见智的事情了吧,不同的人会有不同的结论。我只能说我习惯于依赖元数据。当然您也可以反对,也欢迎您说出您的理由。

      这里有一个缺点,但是同时也是优点 —— 那就是太依赖元数据了。有了元数据,那么什么都好实现;没有了元数据,那就什么都做不了了。所以维护好元数据就成了重中之重!

      除了这些还可以做其他的事情,因为这个元数据是比较基础的,相信依据他,可以做出更多的事情。因为“只有想不到,没有做不到!”

 

ps:

      关于业务逻辑层,我觉得这一层的代码,代码生成器是不应该可以生成出来的,如果真的生成出来了,那是不是应该怀疑一下设计是不是有点问题呢?呵呵。逻辑呀,是要根据具体的情况,通过大脑的思考、判断,才能做出来的,对吧。代码生成器,有那么智能吗?至少现在还不行吧。所以我觉得业务逻辑就要自己亲自去写代码,呵呵。自然框架里面的业务逻辑也不是靠鼠标点出来的,也是需要手动编写的。

      关于代码生成器,我还是建议尽量不要用,能不用就不用,是在不行了再用,呵呵。只不过我以前确实写了几个“代码生成器”,当然只能算作半成品了。第一个是利用Excel,就是里面的公式。我的数据库文档就是用Excel来做的,里面有字段的说明,那么我就可以利用公式,来生成一些我需要的代码。这个是很简陋的,但是在当初还是比较好用的。

      后来用拼接字符串的方式写了一个,那可是真的折磨呀,不改上几个小时是弄不好的,现在看看那时候也是在是太笨了,呵呵。

      再后来才写出来了表单控件,有了表单控件,代码生成器也就没什么用处了,通通交给表单控件全权负责了。

      不过现在又要写代码生成器了,因为我想要生成定义实体类用的代码,呵呵。
 

 

 

时间: 2024-09-19 16:12:04

【自然框架】之“元数据”的威力的相关文章

【自然框架】元数据的数据库结构的详细说明和示例(三):项目与数据库字段的关联

  [自然框架]PowerDesigner 格式的元数据的表结构 [自然框架]元数据的数据库结构的详细说明和示例(一):项目描述部分 [自然框架]元数据的数据库结构的详细说明和示例(二):数据库描述部分     1.Manage_FunListCol(列表用字段) 字段名 中文名 类型 大小 默认值 说明 FunctionID 节点ID int 4 1 外键,关联节点 ColumnID 字段ID int 4 1 外键,关联字段 Sort 排序 int 4 1 同一节点下的排序 ColWidth

【自然框架】PowerDesigner 格式的元数据的表结构

  自然框架里的元数据 元数据的职责: 自然框架里的元数据有三个职责:描述数据库(字段.表.视图等),描述项目(功能节点.操作按钮等),项目和数据库的关系(一个列表页面里需要显示哪些字段.哪些查询条件等) 元数据的存储: 有两个存储元数据的地方,一个是数据库,另一个是实体类.   先看一下表结构图:[表结构图]   是不是比较眼熟,这个在以前的通用权限的地方已经介绍过了,只不过那个没有用PD画出来. 先看右面的两个表: Manage_Columns(字段描述表). 这个表主要是存放字段的说明的,

【自然框架】通用权限的视频演示(一):添加角色,权限到功能节点和按钮

      写了几个关于权限的东东,好像大家都不大理解,也不太清楚我的权限到底能做什么,所以想来想去还是弄点视频吧,就是屏幕录像,这样大家看起来就方便了吧.       为了大家便于观看视频,我先说一下视频的步骤.      1.添加角色,选择角色可以使用的功能节点和按钮.      2.选择用户,就是给角色里面添加用户.      3.用用户的账号登录,查看效果.      4.修改角色可以使用的按钮,查看效果.       这里举了一个很简单的例子--新闻维护,有两个角色,一个是"新闻维护&

【自然框架】 权限 的视频演示(二): 权限到字段、权限到记录

      继续.这里演示权限到字段和权限到记录.            权限到字段有两种安全级别,      1.低安全级别.有些项目不需要做到控制每一个字段是否显示,那么就可以采用这种级别.低安全级别就是:如果一个节点里面没有设置可以访问哪些字段,那么就默认为不需要做到控制字段的程度,就是说节点里的字段都是可以访问的.这么做是为了操作方便.       2.高安全级别.有些项目要求非常严格,要严格控制每一个字段是否可以访问,那么就可以采用这种安全级别.高安全级别:如果一个节点里面没有设置可以

【自然框架.重新开始】总体设计

  好久都没写博客了,出去体验了一下人生,呵呵. 最近加入了一个团队,打算把自然框架重新设计一下,以适应更广阔的需求. 首先是UI.UI一直是弱项,这个不解释了,那么怎么办呢?当然是拿来主义,easyUI.extJs等都很成熟了,拿来用就好.他们都是依据json,所以自然框架打算引入json以便于适应.   另一个就是权限的易于操作方面.以前对于部门方面的权限需求比较模糊,因为做过的项目没有太过涉及部门权限.这一次团队所在的公司,对于权限要求非常的,恩,你知道的,呵呵.所以如果能够完全应对的话,

【自然框架】——Demo(一)

  这是一个应用自然框架写的一个"配置信息管理程序",目的就是管理配置信息的,因为自然框架最主要的就是"配置信息"也就是元数据,那么这个配置信息要怎么管理?手动修改吗?那也太麻烦了呀.我不知道Hibernate 的XML有没有一个配套的管理程序,不过我的自然框架是需要一个程序来辅助管理一下配置信息的.   目前主要的功能有 1.根据数据库文档(Excel)来建立表,建立配置信息里的表的扩展信息.字段扩展信息. 2.查看数据库信息,表.存储过程.视图等. 3.修改表.

【自然框架】——思路、结构、特点的介绍(初稿,欢迎大家多提意见)

  开场白 面向过程:面向过程是"写代码",根据客户提出来的需求来写代码,包括函数.一步一步的写,都写完了,功能也就实现了. 面向对象:面向对象是"做设计",先不考虑细节,而是先做总体设计.都设计好了,再去实现细节. 举例来说,面向对象是设计一部汽车,而面向过程是设计一个流水线生产汽车.设计一部汽车是要考虑客户的需求,考虑众多因素,然后画图纸.并不考虑到底如何把汽车生产出来(至少不是重点).流水线的目的呢,就是要把汽车生产出来,至于汽车是如何设计的并不关心. 以前&

【自然框架】 页面里的父类—— 改进和想法、解释

  1. 从Control到GridView继承了多少层? (这个图可不是现做的,这是以前为了写QuickPager分页控件而弄的.http://www.cnblogs.com/jyk/archive/2009/04/29/1446033.html )        看上面的类图,远远超过三层了吧.如果简单的用"书上说,继承不能超过三层"."组合优于继承"来衡量的话,那么.Net框架能得到什么样的结论呢?      所以我说,简单的依靠"书上说"

【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。

  [类图] [命名空间]------------------[文件截图]     可能您会问,不就是弄个父类吗,怎么又是这么复杂呢?这个嘛,听我慢慢道来. (类图里面Tree.Main1.DataDelete1.DataForm1.DataList1不是父类,而是共用页面)       这个是依据自然框架的特点来设置的,目的就是把共用的代码都放到父类里面,减轻子类的代码量.就是最大限度的避免冗余代码,就是说相同的代码只出现在一处!       如果只设置一个父类,不能满足不同的需求,所以就根据