介绍
通过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;
}
存储模型
存储模型用于定义数据表结构和数据的增删改查(数据管理器)功能,是直接与连接器进行交互的数据容器。
场景:存储模型对应传统开发模式中的数据表,上面例子中的Cat
和Bird
d都属于传输模型,由于模型定义的注解@Model.Advanced(type = ModelTypeEnum.STORE)
默认值就是存储模型,所以一般不用手动指定
代理模型
代理模型是用于代理存储模型的数据管理器能力,同时又可以扩展出非存储数据信息的交互功能的模型。
场景一:隔离数据权限
场景二:增强列表的搜索项
场景三:导入导出的时候增加其他特殊信息
场景四:重写下拉组件的查询逻辑做数据过滤
传输模型
传输模型不会在数据库生成的表,只是作为数据的传输使用,跟传统开发模式中的DTO有一点相似。
场景一:批量处理数据
场景二:处理一些跟数据表无关的操作,如:清理指定业务的缓存、查看一些系统监控信息,可以根据业务信息建立对应的传输模型,在传输模型上创建action动作
场景三:通过传输模型完成复杂页面数据传输
Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/backend/6575.html
访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验