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

 

开场白
  面向过程:面向过程是“写代码”,根据客户提出来的需求来写代码,包括函数。一步一步的写,都写完了,功能也就实现了。

  面向对象:面向对象是“做设计”,先不考虑细节,而是先做总体设计。都设计好了,再去实现细节。

  举例来说,面向对象是设计一部汽车,而面向过程是设计一个流水线生产汽车。设计一部汽车是要考虑客户的需求,考虑众多因素,然后画图纸。并不考虑到底如何把汽车生产出来(至少不是重点)。流水线的目的呢,就是要把汽车生产出来,至于汽车是如何设计的并不关心。

  以前“自然框架”就是按照面向过程的思路来实现的(因为当时只会面向过程),虽然功能实现了,想要达到的目的也基本完成了,但是自己也说不明白,给人的感觉就是雾里看花,没有一个整体的印象。原因很简单——没有按照面向对象的方式做总体设计。

  一个想法要想生存的更长久,那么就必须能够得到更多人的认可。那么首相就要能够让更多的人能够了解,都不了解呢怎么可能得到认可呢?

而一个框架想要更强大那么就必须能吸引更多人的加入,一个人的能力毕竟是有限的,众人拾柴火焰高。那么前提条件还是能够让更多人了解,了解框架的基本思路、各种强大的功能。

  所以最近这些日子又重新设计了一下,重新考虑整理,在逐步整理的过程中也了解到了MVC的意图。

 

自然框架的说明

一、 目的
 针对增删改查密集型的项目,做到快速开发、快速维护的目的。
 企业定制开发的项目效果更显著!

 

二、 特点之一:摆脱“拖拽控件”的烦恼!
  什么?您说拖拽控件很简单?!I服了U。如果一个表单有50个控件(字段),那么要拖拽50次,然后要做设置,不管你是用向导还是后台写代码,都是要设置一下的对吧。控件的宽度、高度,文本框的最大字符数,下拉列表框的Item的设置,控件和字段的对应等等。而这样的表单有多少呢?10个、50个、100个?项目越大数量也就越多。有的表单要单列,有的要双列,有的要合并TD。更有甚者一开始要单列,后来觉得宽度上有点浪费,要改成双列,但是改成双列后看着还不如单列顺眼,于是又让你改回去!
  那么一个项目做完了要拖拽多少次?如果客户的需求有了变化,又要改多少次?这就是我所说的烦恼!

  自然框架的第一个目的就是要摆脱这些烦恼,单列、双列?设置属性即可。宽度、高度、最大字符数、Item的填充,这些统统的都是设置属性,简单方便,而且还有一个配套的程序(配置信息管理程序)来辅助修改这些属性。那么是如何实现的呢?请看下面的说明。

 
 

 

  这个看起来有点像MVC,我对MVC也不太了解,虽然看了《深入浅出设计模式》,但还是比较模糊,所以这里就不往MVC上面套用了。

  自定义控件可以理解为UI,也可以理解为View。它包括分页控件、表单控件、查询控件、数据显示控件、操作按钮组、流程按钮组等。这些控件的特点就是不需要在代码里做详细的设置,而是根据“元数据”自动绘制。
  把“数据显示控件”和GridView做一下对比:GridView需要在.aspx页面里面设置第一列显示哪个字段的内容,第二列显示哪个字段的内容…… ,然后在后台设置数据源、绑定控件。每一次使用GridView的时候都需要做类似的设置,这样做就很麻烦了(至少我认为是比较麻烦,呵呵)。而“数据显示控件”不需要做这些设置,他是根据“元数据”的内容来自动绘制的。而元数据也不是在代码里面设定的,而是存放在了一个容器里面,需要的时候(也就是运行的时候)才提取出来,供“数据显示控件”使用。
  这样做的优点就是可以在运行时决定显示什么样的数据,也就是说当客户的需求有变化的时候根本不用修改代码,更不用重新编译,只需要修改一下“元数据”就可以了。

 

  “模型”:里面存放的是“元数据”,也就是“配置信息”。
  元数据对于自然框架来说是很重要的,就好比音乐文件之于MP3播放器;子弹之于枪支。没有音乐文件MP3播放器能做什么?没有子弹,枪就是一块废铁。如果没有元数据,那么自然框架也就是一大堆控件、类库的集合体。元数据让控件活了起来,把各个部分有机的结合在一起,发挥强大的功能!

“元数据”的作用是要对字段、控件进行描述和对应。结构图如下:
 
【图一:字段和控件】
 

 

【图二:控件的特殊信息】

 
【图三:功能模块的信息】

 

  ORM里面是把实体类和表对应起来,把类和表作为同一级别,属性和字段作为同一级别。最小单位是表,字段是不能独立存在的,也不能够拆分重组。这是一只困扰我的问题,我觉得如果能够把字段作为最小单位,让他们可以灵活的拆分组合,需要哪些字段就把哪些字段组合在一起,这样就简单多了,延迟加载也就完全没有必要了。

  所以在自然框架里面字段是最小单位,字段和类是同一级别,而表只是字段的一个“标识”,标识一下这个字段是哪个表的,遇到相同的字段名区分一下而已。然后根据需要把字段集合起来。比如一个小模块的列表页面需要字段1、字段2,那么就把这两个字段放在字典(Dictionary)里面,以供使用。这样就很灵活了。
而字段和控件的对应则采用父类和子类的方式来对应的。字段信息作为父类,控件信息作为子类。根据环境分为了三类:添加/修改、查询、数据列表。于是就有了图一。

  控件是各种各样的,属性也是五花八门的,有一部分是相同的,那么就按照分类变成了图一里的三个类的属性。但是有些属性是很不相同的,那么怎么办呢?没办法又定义了一套类,于是有了图二里的几个类。

 

  ColumnsInfo就是对字段的描述;FormInfo是对表单的描述,就是表单控件和表单控件里的布局的描述,包括添加、修改的表单,和查询功能的表单,ModInfo就添加、修改里用的信息,FindInfo是查询需要的信息。合起来就是字段和控件的对应关系。ORM说的是实体类和关系(表)的对应,而我这里要做的是字段和控件直接对应起来。

  ORM是用实体类与XML或者实体类与特性来实现对应的,我这里完全采用类的属性来做对应。这样做的优点就是避免了“类爆炸”,把类爆炸换成了“实例爆炸”。实体类是随着功能的增加而增加,再怎么抽象也是难以限制数量。

  而这里种类就是一个,功能再多,表再多,类的种类就是这样的,不会随之增加,增加的是实例,这样就很方便管理了。

 

 

  “容器”:上面说的其实是内存里的容器,内存里的数据是不能永久保存的,断电就没有了,所以要找一个能够永久保存的容器。可能您想到的是XML,但是我想到的是关系型数据库。为什么用关系型数据库呢?因为我可以利用“关系”来避免冗余,提高利用率。同一个表里的同一个字段,可能在多个地点(比如表单、查询、列表,另一个页面的查询、表单、列表)出现,需要多次出现的怎么办?字段名、字段大小、类型,甚至是对应的控件都是一致的,怎么能够避免这种“重复”(即冗余)呢?用关系型数据库里的关系来解决就很容易了。数据结构如下:(是不是有点眼熟,对,在前面的“通用权限”里面就提到过。)
 

 

  这个结构和上面的类的结构是对应的,但是他们却不是一一对应的。类的设计是按照类型、结构来设计的,同类的放在一起,其他的放在另一个类里面。而数据库设计是按照数据的异同来设计的。同样的数据放在一起,不一样的放在另一个表里面。

  所以就导致了类和表没有一一对应的结果。

 

  管理:这里没有用MVC里的“控制”,因为我感觉这个和“控制”还不太一样,所以用“管理”这个词,避免混淆。控件也好,模型也好,添加数据的功能也罢,他们是怎么配合的,又是怎么工作的?这就由“管理”来全权负责了。

 

   “管理”是一个黏合剂,他把控件、元数据、容器、提取数据、保存数据、查询数据等粘合在一起。这个也就是MVC里的C的作用。当然了和MVC还不大一样,只是有点“神似”罢了。

  “管理”首先从容器里面把配置信息提取出来放到“元数据”里,并且缓存起来(Cache),然后把元数据设置给控件,控件就可以根据配置信息来绘制表单了。
当用户点击“保存”等按钮的时候,就会通知“管理”启动保存数据的“进程”,依据元数据(配置信息)来拼接参数化的存储过程,生成存储过程的参数,最后调用“数据访问函数库”实现保存数据的功能。

 
三、 特点二:摆脱“拼接SQL语句”、设置存储过程参数、取值赋值的烦恼!

  不管您使用SQL语句、参数化SQL语句,还是存储过程,还是linQ to SQL ,都需要拼接字符串,当然了存储过程和linQ to SQL是直接写,虽然没有拼接但是还是要写呀。而且保存数据(添加、修改)的时候还需要把控件里的值(就是用户输入的信息)提取出来,对了还要做验证。我很懒,我觉得这些都很麻烦,我知道有“代码生成器”这个东东,但是他是治标不治本,只能更快的生成代码,而不能根本上解决这个烦恼。

  不用写直接就出来了该多好呀,另外一点就是,如果需求有变化了,应对起来也要非常容易才行,不能改一个小地方比整个重做一遍还难,这是绝对不行的哦。
最半边是显示数据,右半边是添加、修改数据。可以根据元数据来拼接参数化SQL语句,并且生成需要的存储过程的参数。这些都是根据元数据自动运行的,不需要根据不同的功能而作修改,只需要修改元数据就可以了。而元数据本质上就是记录,对元数据的维护就相当于对记录的增删改查,恩又绕回来了。

 

 

 

 

 ========================================

 

【视频】配置信息管理 的 使用方法(一):数据库文档(Excel)的格式说明 (2009-11-26 18:28)
【视频】配置信息管理 的 使用方法(二):建表、添加元数据 (2009-11-27 18:15)
【视频】配置信息管理 的 使用方法(三):查看和修改元数据、查看数据库的表视图存储过程等信息 (2009-11-27 20:09)
【视频】配置信息管理 的 使用方法(四):功能节点维护 (2009-11-27 21:50)
【视频】配置信息管理 的 使用方法(五):配置程序之列表、分页控件、按钮 (2009-11-27 23:04)
【视频】配置信息管理 的 使用方法(六):实现添加、修改、查询 (2009-11-28 08:31)
时间: 2024-10-22 22:16:23

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

【自然框架 免费视频】资源角色的思路介绍(整理了一下以前帖子的目录,请刷新)

  请大家不要忘记点推荐!   源码下载: 自然框架的源代码.Demo.数据库.配置信息管理程序下载 这里介绍一下资源权限的思路,我们来设计一个场景,这个场景大家比较常见的,也是我遇到过的.我们来通过这个简单的实例,来看看资源权限可以如何实现. 资源权限,就是同样的一个表,一些人可以看到一部分信息,另一些人可以看到另一部分信息,还有些人可以看到全部信息,还有--.总之就是根据员工的权力,进行适当的筛选.可以看到一部分,或者可以看到全部.一级可以做什么样的操作(增删改查,导出等).   这里先只介

【自然框架 NatureFramework】 项目结构、命名空间和命名规范

  请注意,这里说的是自然框架内部代码的项目结构,并不是说给客户做开发的时候,也需要这些项目.在给客户开发的时候,只需要引用编译后的dll 即可. 一.项目结构   自然框架的基本的思路还是共用函数,数据访问函数库.元数据管理.基础控件扩展.元数据控件(依据元数据动态创建的控件),用户登录.在线.权限管理,分页控件,页面基类构成. 这个并没有按照三层(分层)的要求去做,只是感觉这么分可以更清晰一些.把功能相当比较独立的部分做成一个项目.有一点MVC(不是asp.net MVC)的味道.我不想依据

【自然框架】添加数据的思路和流程 —— 流水线式

      自然框架里面,添加数据的思路.流程:   1. 根据元数据绘制表单. 2. 用户看到表单后就可以录入数据了. 3. 在前台使用正则来做验证. 4. 通过后提交给后台. 5. 本着提交过来的数据都不可信的原则,在后台还要再次进行验证. 6. 验证合格后,设置一个中断点.请注意这一步. 7. 根据元数据,拼接成参数化的SQL,以及存储过程的参数,再根据用户输入的数据设置参数值. 8. 都准备好了之后就可以通过ADO.net提交给数据库了.   以上看似步骤很多,其实除了第六步之外,都是自

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

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

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

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

【自然框架.视频】基础设置(二)下载演示程序用的数据库,和数据表结构简介

  本来想这个月做一套视频演示的,但是现在看来是做不出来了.客观原因是家里拆迁.买房子.搬家,确实有点忙:主观原因是自己还是比较懒.   虽然有客观原因,但是主要的还是主观原因.既然没做好,那就不要找理由,而要为能够做好找点方法!   今天是第二个视频-- demo用的数据库的下载,下载后附加数据库以及数据库里表(元数据.人员.角色等)的简介.   下周就要去北京了,估计视频的进度就可以加快了.大约三天一个吧.   自然框架一定会坚持下去!会一直开源,且免费!  

【自然框架】注册会员活动——第一份代码的修改建议(第一版)

  前情回顾:       自然框架开源社区的第一次活动--实现会员注册 (活动介绍)     自然框架开源社区第一次活动的资源包  (内含数据库设计.数据库文档.实例代码)     参与方式   (可以在这里报名参加)     人员表设计思想 -- 也许会有点帮助 (数据库的设计思路)     [自然框架]开源社区活动,会员注册的第一份代码!  (第一份代码的 原版代码)       下载"好坏"的会员注册完整代码.("好坏"提供的原始版代码)     下载我的修

【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图

      好像以前做的那个数据库设计大家都没太看懂,究其原因似乎大家都比较习惯使用PowerDesinger来设计.而我用Excel画出来的图大家看着特别别扭,而且还没有总体的图,也没有ER图,所以大家也就没有心情看了吧.呵呵.      PowerDesinger学习了一下,感谢Hayden Han 写的<PowerDesigner使用教程 -- 概念数据模型 >,通过这个文章学会了如何使用PowerDesinger来画ER图,这回画出来的应该是ER图了吧,呵呵.除了ER图,还有表关联图,

【自然框架】之通用权限(一):简介、数据结构

        这次要写一整套的权限方面的文章了,无论我的想法好与不好,先写出来请大家来评判.这个系列我要详细的说明我的权限的思路.想法.实现方式.代码和Demo.可能有人会说,通用是达不到的,最多只能无限接近.恩,对于我来说,能够无限接近就可以了,当然我知道如果要达到这个目标并不是一件容易的事情,有难度才有挑战,才有意思.所以我会在权限方面不断的努力,不断的无限接近通用.也请大家多多帮忙,毕竟一个人的力量是有限的.              通用权限想要写的文章目录:(这是第一章)   1.