OpenMBEE是一个用于支持系统工程师进行并发协作设计的软件平台,它通过集成化的软件应用程序和服务,实现了工程模型和文档的一致性、可追溯性和精确性,从而提高了系统工程的效率和质量。本文将对Open-MBEE中部分模块进行分析,以更加了解其功能与逻辑。
Data模块
-围绕下面数据结构、用户结构、角色,进行各实体类的定义与数据库表的映射
-对各实体类之间的关系(即一对多、多对一、多对多)进行了详细划分
-大多都提供了创建时的初始化方法与修改信息需要的getter和setter方法
-在Scope中使用枚举类型管理commits与node
基本数据结构:
-org(组织) -> project(项目) -> Commits and Branches(分支)
用户结构:
-group(组) -> user(用户)
Role(角色):
权限集合
-实体按顺序分为:分支及对应组和用户、组、Project的元数据键对、组织及对应组和用户、权限、项目及对应组和用户、角色、用户、提交及相应枚举类型,节点及相应枚举类型
1、globle(全局数据)
1)base
-定义了一个Java抽象类Base,它用作其他实体类的基类。这个基类包含的字段和注解,用于数据库中的实体映射和JSON序列化/反序列化。
-提供两个Instant类型的字段,用于存储实体创建与最后修改的时间戳,在实体每次更新时会自动设置这个字段的值。
-提供Getter和Setter方法,获取和设置实体的id字段 created字段 modified字段
-重写equals方法以提供自定义的相等比较逻辑,hashCode方法也被重写以提供与equals方法一致的哈希码逻辑
2)Branch
-一个JPA实体类,映射到数据库中的branches表。
-存储系统中分支信息
-包含分支的ID信息。判断分支是否继承某些属性或权限
-定义一个@ManyToOne关系,表示这个Branch关联到多个Project实体。
-定义两个@OneToMan关系,表示这个Branch关联到多个BranchGroupPerm实体/ BranchUserPerm实体
-提供构造函数,用于创建Branch对象时初始化
-为每个字段提供标准的getter和setter方法,用于访问和修改字段的值。
3)BranchGroupPerm
-一个JPA实体类,映射到数据库中的“branch_group_perms”表。
-存储分支(Branch)与组(Group)之间的权限关系,相关的角色(Role),继承(inherited)信息。
-定义三个@ManyToOne关系,表示这个权限关联到一个Branch实体/Group实体/Role实体。多个权限可关联一个对应实体
-提供构造函数,用于创建BranchGroupPerm对象时初始化
-为每个字段提供了标准的getter和setter方法
4)BranchUserPerm
-一个JPA实体类,映射到数据库中的“branch_user_perms”表。
-存储分支(Branch)与用户(User)之间的权限关系,相关的角色(Role),继承(inherited)信息
-定义三个@ManyToOne关系,表示这个权限关联到一个Branch实体/User实体/Role实体。
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
5)Group
-一个JPA实体类,它映射到数据库中的“groups”表。
-存储系统中的组(Group)信息,用于用户分组
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
6)Metadata
-一个JPA实体类,它映射到数据库中的“metadata”表
-存储与Project实体相关的元数据键值对
-包含元数据的键、元数据的值信息
-定义一个@ManyToOne字段,表示元数据关联到一个Project实体
(元数据在软件开发中通常用于存储关于程序或数据的额外信息,这些信息可能对于程序运行不是必需的,但对于理解、配置或管理程序却是非常有用的)
-为每个字段提供了标准的getter和setter方法
7)Organization
-一个JPA实体类,映射到数据库中的“organizations”表
-存储系统中的组织(Organization)实体。
-包含组织的名称、唯一标识符、组织是否是公开等信息
-定义三个@OneToMany字段,表示这个组织包含的项目集合/组权限集合/用户权限集合
-可忽略某些字段。用于那些不应该暴露给客户端或不需要从客户端接收的字段
-为每个字段提供了标准的getter和setter方法
8)OrgGroupPerm
-一个JPA实体类,它映射到数据库中的“org_group_perms”表
-存储组织(Organization)与组(Group)之间的权限关系
-定义三个@ManyToOne字段,表示这个权限关系关联的组织
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
9)OrgUserPerm
-一个JPA实体类,映射到数据库中的“org_user_perms”表
-存储组织(Organization)与用户(User)之间的权限关系
-定义三个@ManyToOne字段,表示这个权限关系关联的组织、用户、角色
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
10)Privilege
-一个JPA实体类,映射到数据库中的“privileges”表。
-存储系统中的权限(Privilege)
-包含权限的名称并保证唯一性
-定义一个@ManyToMany字段,表示这个权限关联的角色集合
11)Project
-一个JPA实体类,映射到数据库中的“projects”表。
-存储项目的基本信息和关联的其他实体。
-包含项目基础属性、项目基本信息、、名称、唯一ID、相关的文档ID、连接到项目资源(如数据库)的连接字符串、项目所属的组织、项目关联的分支集合、项目关联的元数据集合、项目关联的组权限集合、项目关联的用户权限集合
-关联实体,表示项目所属的组织。
-集合属性,用于存储与项目关联的多个对象,如分支、元数据、组权限和用户权限。
-布尔属性,用于标记项目的特定状态或属性。
-包含项目是否继承某些属性或设置信息
-提供一个标记表示项目是否已被删除。在实际应用中,通常不会直接删除记录,而是标记为已删除状态,以便于数据恢复或审计。
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
12)ProjectGroupPerm
-一个JPA实体类,映射到数据库中的“project_group_perms”表。
-存储项目与组之间权限关系的实体类
-定义了三个@ManyToOne字段,表示与Project、Group和Role实体之间的多对一关系。
-一个Project类型字段,表示这个权限关系所属的项目
-一个Group类型字段,表示这个权限关系所属的组
-一个Role类型字段,表示这个权限关系关联的角色
-一个布尔类型的字段,表示这个权限关系是否是继承的。
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
13)ProjectUserPerm
-一个JPA实体类,映射到数据库中的“project_user_perms”表。
-存储项目与用户之间权限关系的实体类
-定义三个@ManyToOne字段,表示与Project、User和Role实体之间存在多对一关系表
-一个Project类型的字段,表示这个权限关系所属的项目
-一个User类型的字段,表示这个权限关系所属的用户。
-一个Role类型的字段,表示这个权限关系关联的角色。
-一个布尔类型的字段,表示这个权限关系是否是继承的
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
14)Role
-一个JPA实体类Role,映射数据库中的roles表
-存储角色的实体类
-定义Role与Privilege之间存在多对多的关系
-分别表示与这个角色相关联的项目用户权限、项目组权限、组织用户权限、组织组权限、分支用户权限和分支组权限。
-一个Set类型的字段,表示这个角色所拥有的权限集合。
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
15)User
-一个JPA实体类,映射到数据库的users表。
-存储用户的实体类
-包含用户的用户名、邮箱、名和姓、是否为管理员、用户密码、用户是否启用
-定义用户与项目、组织、分支的权限关系
-提供构造函数,用于创建对象时初始化。
-为每个字段提供了标准的getter和setter方法
16)Webhook
-一个与特定项目关联的webhook,其中webhook由其URL标识,映射到数据库中的"webhooks"表
-提供构造器与Getter 和 Setter 方法
2、scopes(范围数据)
范围数据通常与特定的函数、类或模块相关联,并且只在这些作用域内有效。
1)Branch
-一个JPA实体类,它映射到数据库中的branches表
-包含主键字段、分支的描述、分支的ID、文档ID、分支的名称、父分支的引用ID、父分支的提交ID、分支的创建或修改时间戳、分支是否是一个标签、分支是否已被删除等信息
-提供构造器与Getter 和 Setter 方法
2)Commit
-一个JPA实体类,它映射到数据库中的commits表
-包含时间戳、提交ID、分支ID、创建者、注释和提交类型。
-提供Getter 和 Setter 方法
3)CommitType
-用于表示和管理不同类型的commit,并为每种类型分配了一个唯一的整数值,与数据库中的committypes表进行映射
-定义枚举常量、枚举字段存储与每个枚举常量关联的整数值
-枚举构造函数、初始化枚举实例的id字段
-根据整数值获取对应枚举实例、获取枚举实例的id字段的值
4)Node
一个JPA实体类,它映射到数据库中的noods表
-涉及版本的控制,文件信息更改功能
5)Nodetype
-定义了一个名为NodeType的Java枚举类型,它代表了一系列可能的节点类型,与数据库中的nodetypes表进行映射
-定义枚举常量,存储枚举常量关联的整数值
-枚举构造函数
-根据整数值获取对应枚举实例,获取枚举实例的id字段的值