如何选择适合的模型类型?

介绍

通过Oinone 7天从入门到精通模型的类型章节我们可以知道模型有抽象模型、存储模型、代理模型、传输模型这四种。但是在在定义模型的时候我们可能不知道该如何选择类型,下面结合业务场景为大家讲解几种模型的典型使用场景。

抽象模型

抽象模型往往是提供公共能力和字段的模型,它本身不会直接用于构建协议和基础设施(如表结构等)。

场景:都继承自动物这个抽象模型
package pro.shushi.pamirs.demo.api.model;

import pro.shushi.pamirs.meta.annotation.Field;
import pro.shushi.pamirs.meta.annotation.Model;
import pro.shushi.pamirs.meta.annotation.sys.Base;
import pro.shushi.pamirs.meta.base.IdModel;
import pro.shushi.pamirs.meta.enmu.ModelTypeEnum;

@Base
@Model.model(AbstractAnimal.MODEL_MODEL)
@Model.Advanced(type = ModelTypeEnum.ABSTRACT)
@Model(displayName = "动物")
public abstract class AbstractAnimal extends IdModel {

    public static final String MODEL_MODEL = "demo.AbstractAnimal";

    @Field.String
    @Field(displayName = "名称")
    private String name;

    @Field.String
    @Field(displayName = "颜色")
    private String color;
}
package pro.shushi.pamirs.demo.api.model;

import pro.shushi.pamirs.meta.annotation.Field;
import pro.shushi.pamirs.meta.annotation.Model;

@Model.model(Cat.MODEL_MODEL)
@Model(displayName = "猫")
public class Cat extends AbstractAnimal {

    private static final long serialVersionUID = -5104390780952634397L;

    public static final String MODEL_MODEL = "demo.Cat";

    @Field.Integer
    @Field(displayName = "尾巴长度")
    private Integer tailLength;

}
package pro.shushi.pamirs.demo.api.model;

import pro.shushi.pamirs.meta.annotation.Field;
import pro.shushi.pamirs.meta.annotation.Model;

@Model.model(Bird.MODEL_MODEL)
@Model(displayName = "鸟")
public class Bird extends AbstractAnimal {

    private static final long serialVersionUID = -5144390780952634397L;

    public static final String MODEL_MODEL = "demo.Bird";

    @Field.Integer
    @Field(displayName = "翼展宽度")
    private Integer wingSpanWidth;

}

存储模型

存储模型用于定义数据表结构和数据的增删改查(数据管理器)功能,是直接与连接器进行交互的数据容器。

场景:存储模型对应传统开发模式中的数据表,上面例子中的CatBirdd都属于传输模型,由于模型定义的注解@Model.Advanced(type = ModelTypeEnum.STORE)默认值就是存储模型,所以一般不用手动指定

代理模型

代理模型是用于代理存储模型的数据管理器能力,同时又可以扩展出非存储数据信息的交互功能的模型。

场景一:隔离数据权限
场景二:增强列表的搜索项
场景三:导入导出的时候增加其他特殊信息
场景四:重写下拉组件的查询逻辑做数据过滤

传输模型

传输模型不会在数据库生成的表,只是作为数据的传输使用,跟传统开发模式中的DTO有一点相似。

场景一:批量处理数据
场景二:处理一些跟数据表无关的操作,如:清理指定业务的缓存、查看一些系统监控信息,可以根据业务信息建立对应的传输模型,在传输模型上创建action动作
场景三:通过传输模型完成复杂页面数据传输

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/backend/6575.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(2)
nation的头像nation数式员工
上一篇 2024年4月6日 下午3:19
下一篇 2024年4月8日 下午10:15

相关推荐

  • 项目中排除掉特定的Hook和扩展点

    总体介绍 在共库共Redis的情况下,某些场景存在需要过滤掉特定Hook和扩展点(extpoint)的情况。本文介绍排除掉的配置方法 1. Oinone如何排除特定的Hook 配置: pamirs: framework: hook: excludes: – 排除的扩展点列表 示例: pamirs: framework: hook: excludes: – p…

    2024年5月13日
    50800
  • 查询时自定义排序字段和排序规则

    指定字段排序 平台默认排序字段,参考IdModel,按创建时间和ID倒序(ordering = "createDate DESC, id DESC") 方法1:模型指定排序 模型定义增加排序字段。@Model.Advanced(ordering = "xxxxx DESC, yyyy DESC") @Model.mod…

    2024年5月25日
    86000
  • JSON转换工具类

    JSON转换工具类 JSON转对象 pro.shushi.pamirs.meta.util.JsonUtils JSON转模型 pro.shushi.pamirs.framework.orm.json.PamirsDataUtils

    2023年11月1日
    39500
  • Oinone离线部署设计器镜像

    概述 Oinone平台为合作伙伴提供了多种部署方式,这篇文章将介绍如何在私有云环境部署Oinone平台Docker镜像。 本文以5.2.6版本为例进行介绍,使用amd64架构的体验镜像进行部署。 部署环境要求 包含全部中间件及设计器服务的环境要求 CPU:8 vCPU 内存(RAM):16G以上 硬盘(HDD/SSD):60G以上 仅设计器服务的环境要求 C…

    2024年11月1日
    20600
  • 如何把平台功能菜单加到项目中?

    概述 在使用Oinone低代码平台进行项目开发的过程中,会存在把平台默认提供的菜单加到自己的项目中。这篇文章介绍实现方式,以角色管理为例。 1. 低代码情况 即项目是通过后端代码初始化菜单的方式。 通常在 XXXMenu.java类通过@UxMenu注解的方式,代码片段如下: 此种情况与添加项目本地的菜单无区别,具体代码: @UxMenu(value = &…

    2024年4月19日
    94900

发表回复

登录后才能评论