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. ASP.NET MVC5 之路由器

    这篇博客介绍的很详细 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_1.html

  2. 【Leetcode 3】Longest Substring Without Repeating Characters0

    Description: Given a string, find the length of the longest substring without repeating characters. ...

  3. 实现微信小程序的wxml文件和wxss文件在phpstrom的支持

    最近下载了微信小程序准备好好看看,但是发现微信小程序用的后缀名是不一样的,.wxml代表的就是平时用的.html,.wxss代码的就是平时用的.css.但是phpstorm无法识别,为了更方便的码代码 ...

  4. ansj --词性说明

    背景 Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ICTCLAS 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高.工具支持词性标注,所以就可以依据词性进行 ...

  5. JS——try catch throw

    本例检测输入变量的值.如果值是错误的,会抛出一个异常(错误).catch 会捕捉到这个错误,并显示一段自定义的错误消息: <script> function myFunction() { ...

  6. 在Mac安装Scheme

    我也不知道安装的是Scheme这门语言还是编程环境还是其他的什么东西,反正能在控制台运行Scheme代码了.... 谁能告诉我怎么在sublime使用scheme.... 原地址 首先下载安装MIT- ...

  7. java web项目和java项目的区别(看清IDE本质)

    想必大家在使用MyEclipse时对这两个概念不去深究.只知道是Java EE类的基本都是Web项目,而Java应用程序就是Java项目.而且很多人都愿意使用MyEclipse作为开发工具,且不说大家 ...

  8. 使用TFS創建團隊項目

    使用微軟賬號登錄Team Service,關聯一個TS賬戶,用來存放你所有的項目,可以從瀏覽器中直接訪問,地址類似yourname.visualstudio.com. 詳細鏈接 在TS賬戶主面板中,可 ...

  9. Redis 之sentinel运维监控

    有三台redis服务器6379.6380.6381,配置6379为主服务器,6380与6381都为6379的从服务器.如果主服务器6379挂掉了,我们怎么办? 方式一:手动修改从服务器的配置,将638 ...

  10. centOS安装python3 以及解决 导入ssl包出错的问题

    参考: https://www.cnblogs.com/mqxs/p/9103031.html https://www.cnblogs.com/cerutodog/p/9908574.html 确认环 ...