一线品牌皮具新闻 架构上如何设计周围模型和数据模型?
首页 龙8娱乐官方网站手机版一线品牌皮具动态 一线品牌皮具新闻 一线品牌皮具简介
  • 首页
  • 龙8娱乐官方网站手机版一线品牌皮具动态
  • 一线品牌皮具新闻
  • 一线品牌皮具简介
  • 一线品牌皮具新闻 架构上如何设计周围模型和数据模型?
    发布者:admin浏览次数:

      

    依稀记得吾第一次设计一个体系的时候,画了一堆UML(Unified Modeling Language,同一建模说话)图,面对Class Diagram(其实就是周围模型),纠结了益久,不晓畅如何落地。 由于,倘若遵命这个类图去落数据库的话,望首来很稀奇,有点繁琐。 可是不遵命这个类图落库的话,又不晓畅这个类图画了有什么用。

    扪心自问,你有众久异国画数据模型和周围模型了?

    现在回想首来,吾那时的纠结源自于吾对周围模型和数据模型这两个主要概念的不明了,先前望过DDD(周围驱动设计),内里一句话吾觉得讲的很不错,一个类型能够充当众个角色,这个角色能够是显式的(实现了某个接口或基类),也能够是隐式的(承担的详细职责和上下文决定)。

    但是每次在新的需求下来,出设计方案的时候在数据模型和周围模型上会延宕一些时间,根本因为在于对这两个概念杂沓。也由于如此,在设计方案或者在开发过程中会屡次修改数据模型的设计,由于倘若底层的逻辑、概念、理论基础没搞明了的话,其构建在其上的体系也会展现题目,专门厉重的题目。

    借鉴DDD(周围驱动设计)的一些设计原则,吾觉得有必要花时间仔细隐微这两个概念,协助行家在工作中,更益的做设计决策。

    一  概念定义

    数据模型:面向持久化,数据的载体。关注的是周围知识,是营业周围的中央实体,表现了题目域内里的关键概念,以及概念之间的有关。周围模型建模的关键是望模型能否显性化、清亮的外达营业语义,扩展性是其次。

    周围模型:面向营业,走为的载体。关注的是数据存储,一切的营业都离不开数据一线品牌皮具新闻,都离不开对数据的CRUD,数据模型建模的决策因素主要是扩展性、性能等非功能属性,无需太甚考虑营业语义的外征能力。

    一个强调的是实体,另一个强调的是有关,再细想下吾们当初建模的时候都是用啥的啥图-ER图,这下子就被徐徐带偏了。设计的数据模型内里带了实体声明也带了营业有关,两者最先杂沓。

    是的,二者实在有一些共同点,未必候周围模型和数据模型会长的很像,甚至会趋同,这很平常。但更众的时候,二者是有区别的。精确的做法答该是有认识地把这两个模型区别开来,别离设计,由于他们建模的现在的会有所分歧。

    如下图所示,数据模型负责的是数据存储面向DB,其要义是扩展性、变通性、性能。而周围模型负责营业逻辑的实现,其要义是营业语义显性化的外达,以及足够行使OO的特性添加代码的营业外征能力。

    途中标识灰色的片面其实还能够细分,营业到模型之间也可进走拆分,涉及到一些命名,这边就不做伸开。

    在平时开发过程中,吾们在许众的体系营业设计上,并没很益的处理数据模型和周围模型的有关,逆而在设计的时候一个是把数据模型当周围模型,另一个是把周围模型当数据模型。

    二  错把周围模型当数据模型

    比来在优化矮代码那块的元数据优化一线品牌皮具新闻,内里涉及到一些元数据存储、拓展题目。这块逻辑大致能够浅易概括:

    数据外单设计时候,用户能够动态配置列的属性以及对列属性根据对答的数据类型动态匹配响答函数。

    对于这个规则,周围模型很浅易,就是挑供了列基本配相新闻和属性配相新闻配置数据,如下图所示:

    倘若遵命这个思路下去就会存在两张外meta_field_definition、meta_field_attribute 两张数据外,一张用来存储列的基础定义,另一张用来定义列的属性配置以及拓展。

    倘若吾们这个干了,吾们就犯了把周围模型当数据模型的舛讹,这边设计一张数据外有余。在正本的元数据列定义外内里加属性配置字段fd_attribute 以Json的形态存储,再基础外单的基础上加拓展外fd_extend_feature(现在营业用不上行为基础保留的拓展字段)

    调整后有什么益处:一线品牌皮具新闻

    最先,一张外单的维护成本一定比众张外的维护成本矮

    其次,其数据的扩展性更益。比如:针对某栽数据类型要声援某栽定制的营业配置和函数声援,倘若是一张外,吾们就必要去属性外内里不息添加新的营业声援配置。但是倘若吾们修改为一张外在原有的元数据中保持不变在属性拓展内里以JSON格式添加配置即可。

    可是,在营业代码内里,倘若是基于JSON在处事情可不那么美益。吾们必要把JSON的数据对象,转换成有营业语义的周围对象,云云,吾们既能够享福数据模型扩展性带来的便捷性,又不失周围模型对营业语义显性化带来的代码可读性。

    三  错把数据模型当周围模型

    实在,数据模型最益尽量可扩展,毕竟,改动数据库可是个大工程,不管是加字段、减字段,照样加外、删外,都涉及到不少的工作量。

    拿上面的案例来讲

    能够仔细到fd_extend_feature 拓展外所创建的,便于对外的垂直拓展补充。JSON字段也益,垂直外也益,固然能够很益的解决数据存储扩展的题目,但是,吾们最益不要把这些扩展(features)当成周围对象来处理,否则,你的代码根本就不是在面向对象编程,而是在面向扩展字段(features)编程,从而犯了把数据模型当周围模型的舛讹。更益的做法,答该是把数据对象(Data Object)转换成周围对象来处理。但是在处理改字段的时候,倘若屡次操作addFdExtendFeature、getFdExtendFeature是一栽典型的把数据模型当周围模型的舛讹示范。

    四 总结

    在平时设计和开发中吾们答该是把周围模型、数据模型区别开来,让他们各司其职,从而更相符理的架构吾们的行使体系。其中,周围模型是面向周围对象的,要尽量详细,尽量语义清晰,显性化的外达营业语义是其主要义务,扩展性是其次。而数据模型是面向数据存储的,要尽量可扩展。

    回归到主题一个类型能够充当众个角色,这个角色能够是显式的(实现了某个接口或基类),也能够是隐式的(承担的详细职责和上下文决定),

    数据模型:面向持久化,数据的载体。

    周围模型:面向营业,走为的载体。

    【编辑保举】一线品牌皮具新闻

    Linux从头学:如何通知 CPU,代码段、数据段、栈段在内存中什么位置? 让吾们一首晓畅Linux上Numa架构 面试必问的 JVM 运走时数据区,你懂了吗? 手把手教你用Python获取新冠疫情数据并进走可视化 像查询数据库相通查询你的 Linux 操作体系新闻