Tiny框架中。对模型本向没有不论什么强制性约束,也就是说你能够把不论什么类型的对象作为模型。也不必实现不论什么接口。

因此简单的说,你定义一个类。里面有一些描写叙述业务属性或处理的内容,就能够说它是模型了。  可是要想在引擎中跑起来,这么做显然是不够的,首先你得让引擎知道。这是个模型。

这须要通过定义模型定义文件来声明出来。

  1. <model-define id="EntityModel" name="EntityModel" title="实体模型"
  2. model-class="org.tinygroup.entity.entitymodel.EntityModel"
  3. error-page="/model/modelError.pagelet"
  4. validate-error-page="/model/modelValidateError.page"
  5. model-infomation-getter="modelInfoGetter" model-loader-bean="entityModelLoader" model-to-bean="entity2Table">
  6. <model-processor-defines>
  7. <model-processor-define name="modify" title="改动" record-mode="Single">
  8. <model-processor-stage name="select" title="改动"
  9. service-processor="entityViewModelModifyStageSelectServiceProcessor"
  10. view-processor="defaultModelViewProcessor" parameter-builder="entityOperationModifyStageSelectParameterBuilder"></model-processor-stage>
  11. <model-processor-stage name="save" title="保存" need-validate="true"
  12. service-processor="entityViewModelModifyStageSaveServiceProcessor"
  13. view-processor="defaultModelViewProcessor" parameter-builder="entityOperationModifyStageSaveParameterBuilder"></model-processor-stage>
  14. </model-processor-define>
  15. </model-processor-defines>
  16. </model-define>

复制代码

上面就是实体模型的描写叙述文件。

上面就是实体模型的描写叙述文件。

1

2

3

4

5
<model-define id="EntityModel" name="EntityModel" title="实体模型"

    model-class="org.tinygroup.entity.entitymodel.EntityModel"

    error-page="/model/modelError.pagelet"

    validate-error-page="/model/modelValidateError.page"

    model-infomation-getter="modelInfoGetter" model-loader-bean="entityModelLoader">

上面定义了实体模型的类型,中英文名称,相应的类的名字。错误展现页面,校验错误的展现页面,模型信息获取接口实现Bean,模型加载接口实现Bean。   也能够觉得。这里是模型的元数据定义及其相关处理的实现。当中ModelInfomationGetter接口主要是用于给引擎获取相关信息。我们前面有讲,模型实现类本身不须要实现模型引擎的不论什么接口。可是模型引擎总是要获取模型的相关信息的,因此,在引擎扩展中须要提供ModelInfomationGetter的实现类来提供相关信息,这种设计是为了避免对模型有侵入;ModelLoader接口用于加载模型文件。因为引擎不知道模型文件的格式。因此怎样加载,也仅仅能通过扩展来处理。

1

2

3

4

5

6

7

8
<model-processor-define name="modify" title="改动" record-mode="Single">

    <model-processor-stage name="select" title="改动"

        service-processor="entityViewModelModifyStageSelectServiceProcessor"

        view-processor="defaultModelViewProcessor" parameter-builder="entityOperationModifyStageSelectParameterBuilder"></model-processor-stage>

    <model-processor-stage name="save" title="保存" need-validate="true"

        service-processor="entityViewModelModifyStageSaveServiceProcessor"

        view-processor="defaultModelViewProcessor" parameter-builder="entityOperationModifyStageSaveParameterBuilder"></model-processor-stage>

< /model-processor-define>

上面定义了实体模型改动处理的定义。在Tiny Mda引擎中。它觉得一个模型上能够有若干个处理,每一个处理又能够分成若干个步骤(至少须要一个)。

每一个步骤又分为三个处理过程(三个处理过程不是所有须要的),參数处理、服务处理、展现处理。  比方上面的改动操作,就定义了两个步骤,由于改动的处理过程是这种:


步骤1:页面请求要对某条记录进行改动,參数处理构建了服务调用的參数。然后调用数据获取服务进行处理;服务处理之后把要改动的记录信息返回。界面展现处理显示改动界面给用户。


步骤2:页面请求提交记录改动,參数处理构建了服务调用的參数,然后调用保存服务进行处理;服务处理之后把要改动情况返回;界面展现提交用户已经改动完成。


须要指出的是,

1 record-mode="Single"

记录模型是指操作时针对的记录情况,一共同拥有三种:None,Single,Multiple。分别表示,不须要记录,须要一条记录,须要多条记录。

OK。从模型定义的角度来说,这些就已经完毕了。

Tiny框架从来不觉得。完毕的东西是不须要改动的,因此,还提供了模型扩展的功能。

比方。上面的模型扩展,框架内建已经支持了添加、改动、删除、复制加入,等等处理,可是能够预想到,开发者肯定须要别的处理,比方:Excel导出、PDF导出。图表显示等等。同一时候,有的开发者会发现现有的实现并不满足须要,可是假设把原来的模型进行破坏性改动,对于开发与公布来说又会带来很多新的问题。


为此,Tiny框架提供了模型扩展及覆盖机制。

模型扩展定义文件与模型定义文件除了根标签不一样之外,其他全然一样;

1

2

3

4

5
<model-define-extend id="entityModel">

   <model-processor-defines>

.....

   </model-processor-defines>

< /model-define-extend>

假设原有模型中存在中相同的模型操作,则会被覆盖,假设原来的模型操作中不存在,则会被新增。

至此。就知道了在Tiny框架中,怎样扩展新的模型类型或者已有的模型进行扩展或覆盖。




大量的处理,都是在模型扩展中完毕的。那么模型引擎都完毕什么事情呢?

1.模型体系定义

定义模型实现类能够是不论什么对象,定义模型上能够能够进行不同类型操作,定义模型的载入体系。

2.模型解释执行

因为模型上定义了各种操作,在人机交互过程中要驱动模型引擎及模型扩展的各种实现与扩展的协作执行,终于给用户完整的要机交互。

3.数据校验扩展

模型引擎定义了前面及后台数据校验的规范与规则,使得前后台数据校验都能够通过模型定义来完毕。保证了前后台数据校验的一致性及有效性(众所周知,前台数据校验是不可靠的,后台数据校验提高成本的)。


4.权限控制体系

因为模型定义了各种各样的处理。实际上就会对数据进行各种影响,出于安全的考虑,必须对当中的一部分或所有进行权限控制。

MDA模型定义及扩展的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数

    11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...

  2. Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  3. WPF 3D模型的一个扩展方法

    原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...

  4. Sequelize模型定义

    定义 定义模型与表之间的映射,使用 define 方法. Sequelize 会自动增加 createdAt 和 updated 属性,这样能知道一个实例的创建时间和最终修改时间.如果不想自动生成,可 ...

  5. Entity Framework 6 Recipes 2nd Edition(11-1)译 -> 从“模型定义”函数返回一个标量值

    第11章函数 函数提供了一个有力代码复用机制, 并且让你的代码保持简洁和易懂. 它们同样也是EF运行时能利用的数据库层代码.函数有几类: Rowset Functions, 聚合函数, Ranking ...

  6. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集

    11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...

  7. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列

    11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...

  8. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...

  9. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

随机推荐

  1. 【HTML5】基于HTML5的高性能动画与游戏

    其实这篇文章类似版本早在12年就在网上各处出现了,也随着HTML5的兴起,HTML的新特性也是倍受开发者们追捧,自然相关HTML5的高性能动画与游戏的相关文章也是层出不穷的,笔者也是在12年接触的相关 ...

  2. Codeforces 792D

    题意:给定一棵拥有n个节点的满二叉树(即n==2^x-1),q个查询,每次给出一个节点的编号,再给出一个由L,R,U组成的字符串序列,依次表示向左子节点.右子节点.父节点移动,如果移动不合法,则忽略. ...

  3. Oracle(一)

    1.树形表,查询 所有的下边的记录 情景:根据当前记录的ID,要查询其所有子记录,每个子记录再查询当前子记录的所有子记录,如果有的话,一直迭代下去 当前表结构: CREATE TABLE " ...

  4. [转]Oracle Client 11g安裝經驗

    本文转自:http://www.dotblogs.com.tw/shadow/archive/2011/11/08/54759.aspx 開發環境:本機(Win XP)的ASP.net 4 WebSi ...

  5. 实现X*N

    #include<iostream> using namespace std; double foo(int n,double x) { if(1==n) { return x; } el ...

  6. 控制台——对WIN32 API的使用(user32.dll)

    Win32 API概念:即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface).所有在Win32平台上运行的应用程序都可以调用这些函 ...

  7. iOS开发中如何实现同步、异步、GET、POST等请求实操演示!

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  8. ASP.NET 缓存(Cache)

    ASP.NET提供了在一个ASP.NET应用程序基本上缓存信息的编程功能.该功能和Application对象相似,但它具有在ASP.NET应用程序的生命周期内动态维护缓存信息的能力.在应用程序中缓存数 ...

  9. 在CentOS下搭建Android 开发环境

    在CentOS下搭建Android 开发环境 目录 1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.ADT安装 1.4.Android SDK安装 1.5.Android NDK ...

  10. 【转载】HTTP 基础与变迁

    原文地址:https://segmentfault.com/a/1190000006689489 HTTP HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...