CN114385145A - 一种Web***后端架构设计方法及计算机设备 - Google Patents
一种Web***后端架构设计方法及计算机设备 Download PDFInfo
- Publication number
- CN114385145A CN114385145A CN202111672968.5A CN202111672968A CN114385145A CN 114385145 A CN114385145 A CN 114385145A CN 202111672968 A CN202111672968 A CN 202111672968A CN 114385145 A CN114385145 A CN 114385145A
- Authority
- CN
- China
- Prior art keywords
- defining
- class
- package
- layer
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Web***后端架构设计方法及计算机设备。该方法包括:建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;定义实体类包;定义配置类包;定义工具类包;定义资源文件;定义代码生成规范;定义类和类的继承;定义调用关系。本发明实施例提供的技术方案,提供了一套功能完整而又小巧灵活的Web后端架构,数据库设计完成后,在架构设计的基础上,可以通过代码模板快速生成高可用性的新项目,避免了传统信息化***中反复创造轮子的问题。
Description
技术领域
本发明实施例计算机技术领域,尤其涉及一种Web***后端架构设计方法及计算机设备。
背景技术
随着互联网技术的快速发展,前后端分离的Web***逐渐得到业界的广泛采用。这种前端与后端分离的目的之一是做到专业化分工,提高项目的质量和开发效率,还可以降低前端对后端的依耐性。
现阶段的Web后端项目开发过程中,开发人员为了实现项目功能,通常非常依赖自身的编程能力,且需要耗费大量时间,也即计算机行业中常说的“重复造轮子”。即使程序员想要在公开的文档社区中参考他人封装好的组件,寻找轮子的过程也并不轻松;好不容易找到一个轮子,也学不会用法;好不容易能运行,很多地方与需求不一致,但是又不会改,最后还是变成自己写轮子。
这种情况的最佳体现,就是曾经有一段时间遍地开花的PHP框架。每一个写框架的人都认为自己写的框架才是最好的轮子,甚至很多PHP新人,对几个成熟框架浅尝辄止后,也纷纷投身写框架的行列。成品大部分看过去却是大同小异,只是语法层面更符合作者本人的习惯,而缺乏大量的测试以及文档社区,最终的结果就是一个半成品然后无疾而终。
现有技术需要提供一套合理的前后端分离架构,在架构设计的基础上帮助程序员快速生成新项目,避免传统信息化***中反复创造轮子的问题。
发明内容
本发明实施例提供一种Web***后端架构设计方法及计算机设备,以实现Web***后端新项目的快速生成。
第一方面,本发明实施例提供了一种Web***后端架构设计方法,该方法包括:
建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;其中,所述app层用于对外提供接口服务,和前端或第三方进行交互,接收传入参数、返回操作结果;所述bll层用于业务逻辑的控制、增删改查动作日志的详细记录;所述dal层用于数据库访问;
定义实体类包,包括:查询参数实体和数据访问实体;
定义配置类包,包括:SpringBoot的配置项、全局异常、过滤器、***、注解、枚举和配置;
定义工具类包,包括:自定义的工具类、雪花算法生成器和日期时间格式转换器;
定义资源文件,所述资源文件用于放置dal层的映射文件和程序的配置文件;
定义代码生成规范,包括:将完全由模板生成的代码,部分由代码模板生成的代码和全部手写代码划分到不同包中进行保存;其中,所述完全由代码模板生成的代码禁止修改,所述部分由代码模板生成的代码只生成一次,后续允许修改;
定义类和类的继承,包括:生成代码的包中的类继承于顶级父类,只生成一次的代码继承于生成代码的包中的类;
定义调用关系,包括:当bll包中的类调用bll包中的类,和/或bll包中的类调用dal包中的类时,split包中的类只能调用split包中的类,unity包中的类只能调用unity包中的类。
第二方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明实施例中任一所述的Web***后端架构设计方法。
本发明实施例通过建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;定义实体类包;定义配置类包;定义工具类包;定义资源文件;定义代码生成规范;定义类和类的继承;定义调用关系。提供了一套功能完整而又小巧灵活的Web后端架构,数据库设计完成后,在架构设计的基础上,可以通过代码模板快速生成高可用性的新项目,避免了传统信息化***中反复创造轮子的问题。
附图说明
图1为本发明实施例一提供的一种Web***后端架构设计方法的流程图;
图2为本发明实施例二提供的一种Web***后端架构设计方法的流程图;
图3是本发明实施例三提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种Web***后端架构设计方法的流程图,可适用于Web后端项目的开发过程。在具体的Web后端项目开发工作中,开发人员首先根据本发明实施例所提供的方法制定Web***后端架构,然后将通用的必须手写的代码放入其中。接下来配置代码模板,具体包括分别配置数据库、配置工程名称、配置生成文件夹(即配置要生成的代码到什么位置),其中的生成文件夹是按照架构中指定的项目目录来生成的,最后点击生成。后续如果数据库表结构有更新,只需要重新配置代码模板,重新生成(纯生成的)受影响的代码即可。
Web***后端架构设计方法具体包括如下步骤:
S101、建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;其中,所述app层用于对外提供接口服务,和前端或第三方进行交互,接收传入参数、返回操作结果;所述bll层用于业务逻辑的控制、增删改查动作日志的详细记录;所述dal层用于数据库访问;
其中,Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架。本发明实施例采用通用的三层架构,即控制层(app)、业务逻辑层(bll)和数据访问层(dal)三层架构,采用SpringBoot作为主框架,MyBatis作为数据访问层框架。三层架构中大部分的类可用代码生成器根据数据库表生成而来。
S102、定义实体类包,包括:查询参数实体和数据访问实体;
其中,实体类包(ent)里面的实体和数据库中的表是一一对应的,例如数据库中使用用户表,相应的ent中就会有用户表(user)的generate类和继承的extend类,及parameter(参数,用于查询时传参的)类。
S103、定义配置类包,包括:SpringBoot的配置项、全局异常、过滤器、***、注解、枚举和配置;
其中,配置类包中的文件用于提供相应的功能。各功能包中的类继承于配置类包的中的类。
S104、定义工具类包,包括:自定义的工具类、雪花算法生成器和日期时间格式转换器;
其中,工具类包中的文件用于提供JAVA开发中常用的工具类。
S105、定义资源文件,所述资源文件用于放置数据访问层的映射文件和程序的配置文件;
S106、定义代码生成规范,包括:将完全由模板生成的代码,部分由代码模板生成的代码和全部手写代码划分到不同包中进行保存;其中,所述完全由代码模板生成的代码禁止修改,所述部分由代码模板生成的代码只生成一次,后续允许修改;
本发明实施例在架构设计中提取了很多通用代码,可以用CodeSmith等工具制作成代码模板,再批量生成。所以最终整个工程中的代码可以大致分为三类:第一类是全部手写的代码,比如配置类包(set)、工具类包(utl)中的;第二类是完全由模板生成的代码,比如generate包中的,这些包中的代码禁止人为修改;第三类是部分由代码模板生成的代码,比如split包中的,这些包中的代码只会生成一次,后续可人为在此生成基础上修改。
S107、定义类和类的继承,包括:生成代码的包中的类继承于顶级父类,只生成一次的代码继承于生成代码的包中的类;
其中,继承关系与项目目录结构中的层级相对应,用于标明整个后端同一层间不同包的继承关系。通常在每一层中的顶级父类只有一个,生成代码的包中的类会继承于顶级父类,只生成一次的代码会继承于生成代码包中的类。
S108、定义调用关系,包括:当bll包中的类调用bll包中的类,和/或bll包中的类调用dal包中的类时,split包中的类只能调用split包中的类,unity包中的类只能调用unity包中的类。
本实施例的技术方案,通过建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;定义实体类包;定义配置类包;定义工具类包;定义资源文件;定义代码生成规范;定义类和类的继承;定义调用关系。提供了一套功能完整而又小巧灵活的Web后端架构,数据库设计完成后,在架构设计的基础上,可以通过代码模板快速生成高可用性的新项目,避免了传统信息化***中反复创造轮子的问题。
在上述技术方案的基础上,所述定义代码生成规范还包括:
定义extend包下的类允许手动更改;
定义generate包下的类不允许手动更改;
除纯手写的代码外,定义unity包下的类不允许手动更改;
除完全由模板生成的代码外,定义split包下的类允许手动更改;
除base包和custom包外,定义app、bll、dal、ent、xml包下的类和文件都是根据数据模型实体用代码模板生成的。
需要说明的是,由于第二类代码在整个开发过程中会不停的更新,为了将生成的和手写的代码区分开、同时防止手写代码被覆盖,将代码划分到不同的包里。开发人员应遵循下面的规定,以保证代码的安全性和规范性:
1.凡是extend包的都可以手动更改。
2.凡是generate包下的类都不可以手动更改。
3.unity包下的都不可以手动更改,包括映射文件。第1种情况除外。
4.split包下的都可以手动更改,包括映射文件。第2种情况除外。
5.app、bll、dal、ent、xml下的类、文件都是根据数据模型实体,用代码模板生成,以下情况除外:
1.base包下都是父类,可以手动更改,但更改会影响到所有子类。
2.custom包下的都是自定义类,不受代码模板控制。
在上述技术方案的基础上,所述定义代码生成规范还包括:
定义dal包和xml包中,未经架构师同意不允许新加类;
定义未经架构师同意不允许在app,bll,ent,config的第一层中新建包或类,第二层中新建的包放到custom包中;
定义config包和utl包中的类未经架构师同意不允许修改。
需要说明的是,关于手动新增类或新增包应遵循下面的规定:
1.未经架构师同意,dal、xml包中严禁新加类。
2.未经架构师同意,不允许在app、bll、ent、config的第1层中新建包或类,第二层中新建的包要放到custom中(没有custom的需新建)。
3.未经架构师同意,config和utl包中的类不能修改。
其中,generate包下的split包,不是在同一个项目中的不同时间进行扩展,因为初次代码生成后、dal层下的split包并不能再次生成了。这里是为了在不同的项目中积累扩展,比如后期发现有些unity不好实现时可以放这里。
通过建立Web框架的基本层次结构并定义严谨的代码生成规范,本实施例的技术方案能够减少根据该架构生成的项目在使用过程中出现调用错误等问题。避免由于开发人员的设计失误导致项目整体处于不可用状态。
实施例二
图2为本发明实施例二提供的一种Web***后端架构设计方法的流程图,本实施例在上述实施例的基础上进行优化,如图2所示,本发明实施例二提供的方法进一步增加了对Web架构中各具体功能的定义,该方法包括:
S201、建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;其中,所述app层用于对外提供接口服务,和前端或第三方进行交互,接收传入参数、返回操作结果;所述bll层用于业务逻辑的控制、增删改查动作日志的详细记录;所述dal层用于数据库访问;
S202、定义实体类包,包括:查询参数实体和数据访问实体;
S203、定义配置类包,包括:SpringBoot的配置项、全局异常、过滤器、***、注解、枚举和配置;
S204、定义工具类包,包括:自定义的工具类、雪花算法生成器和日期时间格式转换器;
S205、定义资源文件,所述资源文件用于放置数据访问层的映射文件和程序的配置文件;
S206、定义代码生成规范,包括:将完全由模板生成的代码,部分由代码模板生成的代码和全部手写代码划分到不同包中进行保存;其中,所述完全由代码模板生成的代码禁止修改,所述部分由代码模板生成的代码只生成一次,后续允许修改;
S207、定义类和类的继承,包括:生成代码的包中的类继承于顶级父类,只生成一次的代码继承于生成代码的包中的类;
S208、定义调用关系,包括:当bll包中的类调用bll包中的类,和/或bll包中的类调用dal包中的类时,split包中的类只能调用split包中的类,unity包中的类只能调用unity包中的类。
S209、定义事务控制,包括:在app层和bll层的顶级父类中加入针对事务的支持。
由于在app、bll层的顶级父类中加入了针对事务的支持,所以在开发中只要继承于这两个类的部分,如无特殊情况都无需再做单独的事务处理。
S210、定义约束控制,包括:将外键约束时的删除动作配置成级联处理,将更新动作配置成不做级联处理。
在实际开发中发现,因为存在很多删除传递的问题,只用程序控制级联删除可以说非常困难而繁琐。比如删除应用领域GpDomain,会级联删除页面组件GpControl,而删除页面组件GpControl又会级联删除角色组件GprRoleControl,等等一级级传递下去,这样代码生成是控制不了的。
而如果将外键约束都统一配置成了Restrict,在程序中写级联删除的逻辑是不可行的,因为如果子表中有记录,是无法删除的,所以对级联删除应设置为级联处理Cascade。
在严格的工程开发中,外键约束应该是必须的。除非用逻辑删除,物理上的级联删除应该交给数据库控制,才能根本上保证数据逻辑上的完整性、有效性。不过无论选择程序控制还是数据库控制,无论是Cascade还是SetNull,最终的删除动作还是要根据实际业务来确定。
而在级联更新时,当前的数据模型中没有非主键为外键的情况,所以对级联更新直接在数据库中设置为不做级联处理NoAction即可。
S211、定义异常处理,包括:
bll层在每个方法中将捕获的操作异常封装成自定义的全局异常抛出,并在finally块中记录日志;
在set包中注册全局异常处理器;
其中,所述全局异常处理器用于捕获所有的应用异常,将异常转换成约定的格式,返回给前端。
其中,bll层会在每个方法中捕获操作异常,然后封装成自定义的全局异常GlobalException抛出,同时在finally中记录日志。之后,在set包中用@ControllerAdvice注册一个全局GlobalExceptionHandler来捕获所有的应用异常,对捕获到的异常进行处理,将异常转换成约定的格式,返回给前端,此时的状态码是500HttpStatus.INTERNAL_SERVER_ERROR。
因此如无特殊情况,前端在诸多ajax的Success方法中无需再判断操作是否成功,直接进行其他交互逻辑的处理即可,因为如果后端有异常都会使用error方法。
目前的bll层中,凡是可以正常执行dal层方法未报异常的,都认为操作执行成功。或者说,无特殊情况,使用ajax的success方法的默认都是成功的操作。
例如请求删除某条记录,但这条记录已被其它请求删除掉了,执行本次删除动作实际是删除了0条记录;再比如批量修改5条记录,有2条已经不存在,实际修改了3条;还有查询时查询出0条符合查询条件的数据,这些程序都是返回成功的。
在写操作时,日志中会记录具体传入数量和实际操作成功的数量,并根据数量是否相同返回不同提示。
S212、定义字典解析,包括:
增加自定义注解和自定义JSON解析器,用于进行字典编码解析,以处理返回给前端JSON数据中的字典项;
或,当bll层返回的是封装的统一类型的返回结果ResultModel对象,且其中的内容为List<map>时,编写一个工具类,用于进行字典编码解析。
对于字典项的解析,在当前架构中提供了两套方法。
第一种是,增加自定义注解DictionaryConvertAnnotationDictionaryConvert、自定义JSON解析器JacksonDictionarySerializer,实现针对字典编码解析的功能,以处理返回给前端JSON数据中的字典项。具体调用方法为在实体类属性中增加如下注解:
@DictionaryConvertAnnotation(typeId="dc1f9015660bcbcee7f1dfc1a5dea1ea",codeField="isMarriageCode")
@JsonSerialize(using=JacksonDictionarySerializer.class,nullsUsing=JacksonDictionarySerializer.class)
private String isMarriageValue;
第二种是,当bll层返回的为ResultModel对象,data中为List<map>时,编写一个工具类DictionaryConvertUtil,用工具类进行解析。具体调用方式为,将返回的数据和要转换成的实体对象传入:</mapResultModel resultModel=gpUserUntbll.getListBySQL(map);
resultModel.setData(DictionaryConvertUtil.convertMapListToTextList(GpUser.class,resultModel.getData()));
S212、定义返回格式,包括:
将bll层中的方法返回和app层中的方法返回,统一为ResultModel对象,所述ResultModel继承于日志类实体;
在bll层将操作日志写入数据库的同时将所述操作日志返回给app层;
app层将操作日志处理后返回给前端;
在ResultModel类中对返回结果进行处理,包括:使用JSON注解对返回给前端的结果进行过滤,和/或添加布尔型的字段来区分操作是否成功。
其中,操作日志包含操作结果。
S213、定义列表排序,包括:
为SQL中涉及的每个列设定别名;为列表提供展示用的查询接口;
前端根据列别名展示,并将列别名做为参数传给后端,由后端的程序控制排序。
在日常产品设计时,往往要求所有列表出中现的列均可以排序。因此在该架构中,SQL中涉及的列都要有别名。如果不用别名的话,涉及两张表连接查询,那么必然要传入表的别名,否则可能出现Column'update_time'in order clause is ambiguous这种错误。传入表的别名,不利于前后端统一控制。
本发明实施例所提供的Web***后端架构设计方法还可以包括:
定义缓存处理,包括:
如果当前的程序未集成Redis,使用SpringBoot自带的缓存机制。
本发明实施例所提供的Web***后端架构设计方法还可以包括:
如果业务中有大量一旦初始化后不可再轻易写入的设计,如Web展示的有应用配置、服务接口、静态链接、***组件、字典设计,后端程序有枚举、常量等等。对这些部分的修改新增删除,往往伴随着程序的变动。对于枚举部分,java的枚举这种数据结构类型的语义是静态的、固定的、不易修改的一类数据,动态加载枚举项破坏了代码的可读性。对于字典部分,字典数据原则上是不能删改,只能增加的,因为历史数据中已经使用了之前的字典项。应用配置、服务接口、静态链接、***组件、数据字典、枚举、常量的增加必然伴随着程序的变化。注意这里的数据字典和上面的字典数据是两个概念,这里是有哪些数据字典类别,上面是指具体某个类别的数据字典包含的数据项。
本发明实施例所提供的Web***后端架构设计方法中,常见的校验主要包括以下几种情况:必填的是否为空,数值类型是否正确,长度是否正确,唯一的是否重复,特殊格式身份证号、手机号、邮箱、链接地址等等。
后端暂时没有简单高效的办法逐个而又统一的对接受的参数进行校验,如果输入不合规,在向数据库提交写入时会发生异常。我们对这些异常进行捕获、并统一处理后再返给前端。如果加入元数据的管理功能,则可以定位到具体哪个字段校验失败,并给出相对友好提示的。
本发明实施例所提供的Web***后端架构设计方法中,当前架构中有批量新增、批量修改的通用方法,在这些方法中是不会判断某个属性值是否为NULL的,都是直接写入。
在树形结构的拖拽功能中,当把子节点拖拽到根节点后,后台(updateListWithDff方法)无法把fartherId修改为null。这个是通用代码模板和架构的问题,之前一直存在,就是说当用户想修改某个字段为空值时,当前的程序会认为客户没有修改这个字段。
本发明实施例所提供的Web***后端架构设计方法采用以下4种办法:
1.特殊的地方写特殊sql,不用通用方式处理。但是这种方式代码会显得太不够灵活了以及冗余。
2.每次更新操作前,先从数据库查出原来的数据,需要更改的字段再重新赋值,然后再进行全字段的更新操作(不需判空),这种方法性能会稍微低一点。
3.业务层判断前端参数是否为空,如果为空的话就赋一个特殊的值(比如-1这种)进行替换,这样的话当前端传的是空值时也能更新成功。但这容易让人理解起来比较困难,且如果需要记录修改操作时,也会不太准确。逻辑是创建一个枚举,设定编码规则,如果想赋值为NULL,编码就是-1;如果想赋值为空字符串,编码就是-2,以此类推。同时在业务层,对特定的允许赋值为NULL或空字符串的参数进行判断,如果参数会为NULL或空字符串,就给赋值成-1或-2。
4.使用map进行参数传递,然后写入:<if test="_parameter.containsKey(age)">。这样即使新的参数为NULL,只要map中有这个key,就可以更新成功。但是用实体传参时,无法实现功能。
本实施例的技术方案,提供了一套功能完整而又小巧灵活的Web后端架构,同时定义了各具体功能的实现方法。数据库设计完成后,在架构设计的基础上,可以通过代码模板快速生成高可用性的新项目,避免了传统信息化***中反复创造轮子的问题。
实施例三
本实施例提供了一种计算机设备,可以用于Web***后端架构设计的情况。图3是本发明实施例三提供的一种计算机设备的结构示意图。参见图3,该计算机设备包括:
一个或多个处理器310;
存储器320,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器310执行,使得所述一个或多个处理器310实现如实施例一或二提出的Web***后端架构设计方法。
图3中以一个处理器310为例;处理器310和存储器320可以通过总线或其他方式连接,图3中以通过总线连接为例。
存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的Web***后端架构设计方法对应的程序指令/模块。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的Web***后端架构设计方法。
存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提出的计算机设备与上述实施例提出的Web***后端架构设计方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见实施例一或二,并且本实施例与实施例一或二具有相同的有益效果。
注意,上述仅为本发明实施例的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明实施例不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明实施例的保护范围。因此,虽然通过以上实施例对本发明实施例进行了较为详细的说明,但是本发明实施例不仅仅限于以上实施例,在不脱离本发明实施例构思的情况下,还可以包括更多其他等效实施例,而本发明实施例的范围由所附的权利要求范围决定。
Claims (10)
1.一种Web***后端架构设计方法,其特征在于,包括:
建立Web框架的基本层次结构,所述基本层次结构包括:app控制层、bll业务逻辑层和dal数据访问层;其中,所述app层用于对外提供接口服务,和前端或第三方进行交互,接收传入参数、返回操作结果;所述bll层用于业务逻辑的控制、增删改查动作日志的详细记录;所述dal层用于数据库访问;
定义实体类包,包括:查询参数实体和数据访问实体;
定义配置类包,包括:SpringBoot的配置项、全局异常、过滤器、***、注解、枚举和配置;
定义工具类包,包括:自定义的工具类、雪花算法生成器和日期时间格式转换器;
定义资源文件,所述资源文件用于放置dal层的映射文件和程序的配置文件;
定义代码生成规范,包括:将完全由模板生成的代码,部分由代码模板生成的代码和全部手写代码划分到不同包中进行保存;其中,所述完全由代码模板生成的代码禁止修改,所述部分由代码模板生成的代码只生成一次,后续允许修改;
定义类和类的继承,包括:生成代码的包中的类继承于顶级父类,只生成一次的代码继承于生成代码的包中的类;
定义调用关系,包括:当bll包中的类调用bll包中的类,和/或bll包中的类调用dal包中的类时,split包中的类只能调用split包中的类,unity包中的类只能调用unity包中的类。
2.根据权利要求1所述的方法,其特征在于,所述定义代码生成规范还包括:
定义extend包下的类允许手动更改;
定义generate包下的类不允许手动更改;
除纯手写的代码外,定义unity包下的类不允许手动更改;
除完全由模板生成的代码外,定义split包下的类允许手动更改;
除base包和custom包外,定义app、bll、dal、ent、xml包下的类和文件都是根据数据模型实体用代码模板生成的。
3.根据权利要求2所述的方法,其特征在于,所述定义代码生成规范还包括:
定义dal包和xml包中,未经架构师同意不允许新加类;
定义未经架构师同意不允许在app,bll,ent,config的第一层中新建包或类,第二层中新建的包放到custom包中;
定义config包和utl包中的类未经架构师同意不允许修改。
4.根据权利要求1所述的方法,其特征在于,还包括:
定义事务控制,包括:在app层和bll层的顶级父类中加入针对事务的支持。
5.根据权利要求1所述的方法,其特征在于,还包括:
定义约束控制,包括:将外键约束时的删除动作配置成级联处理,将更新动作配置成不做级联处理。
6.根据权利要求1所述的方法,其特征在于,还包括:
定义异常处理,包括:
bll层在每个方法中将捕获的操作异常封装成自定义的全局异常抛出,并在finally块中记录日志;
在set包中注册全局异常处理器;
其中,所述全局异常处理器用于捕获所有的应用异常,将异常转换成约定的格式,返回给前端。
7.根据权利要求1所述的方法,其特征在于,还包括:
定义字典解析,包括:
增加自定义注解和自定义JSON解析器,用于进行字典编码解析,以处理返回给前端JSON数据中的字典项;
或,当bll层返回的是封装的统一类型的返回结果ResultModel对象,且其中的内容为List<map>时,编写一个工具类,用于进行字典编码解析。
8.根据权利要求1所述的方法,其特征在于,还包括:
定义返回格式,包括:
将bll层中的方法返回和app层中的方法返回,统一为ResultModel对象,所述ResultModel继承于日志类实体;
在bll层将操作日志写入数据库的同时将所述操作日志返回给app层;
app层将操作日志处理后返回给前端;
在ResultModel类中对返回结果进行处理,包括:使用JSON注解对返回给前端的结果进行过滤,和/或添加布尔型的字段来区分操作是否成功。
9.根据权利要求1所述的方法,其特征在于,还包括:
定义列表排序,包括:
为SQL中涉及的每个列设定别名;为列表提供展示用的查询接口;
前端根据列别名展示,并将列别名做为参数传给后端,由后端的程序控制排序。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-9中任一所述的Web***后端架构设计方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111672968.5A CN114385145A (zh) | 2021-12-31 | 2021-12-31 | 一种Web***后端架构设计方法及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111672968.5A CN114385145A (zh) | 2021-12-31 | 2021-12-31 | 一种Web***后端架构设计方法及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114385145A true CN114385145A (zh) | 2022-04-22 |
Family
ID=81199853
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111672968.5A Pending CN114385145A (zh) | 2021-12-31 | 2021-12-31 | 一种Web***后端架构设计方法及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114385145A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115712413A (zh) * | 2022-11-15 | 2023-02-24 | 广东中设智控科技股份有限公司 | 低代码开发方法、装置、设备及存储介质 |
-
2021
- 2021-12-31 CN CN202111672968.5A patent/CN114385145A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115712413A (zh) * | 2022-11-15 | 2023-02-24 | 广东中设智控科技股份有限公司 | 低代码开发方法、装置、设备及存储介质 |
CN115712413B (zh) * | 2022-11-15 | 2024-04-19 | 广东中设智控科技股份有限公司 | 低代码开发方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10769165B2 (en) | Computing data lineage across a network of heterogeneous systems | |
US7454435B2 (en) | Systems and methods for granular changes within a data storage system | |
JP2020522790A (ja) | 異種にプログラムされたデータ処理システムの自動依存性アナライザ | |
US7831614B2 (en) | System and method for generating SQL using templates | |
US20210256079A1 (en) | Adapting database queries for data virtualization over combined database stores | |
US10445675B2 (en) | Confirming enforcement of business rules specified in a data access tier of a multi-tier application | |
US11514009B2 (en) | Method and systems for mapping object oriented/functional languages to database languages | |
CN111488143A (zh) | 一种基于Springboot2代码自动生成装置和方法 | |
CN109710220B (zh) | 关系型数据库查询方法、装置、设备及存储介质 | |
Sroka et al. | Translating relational queries into spreadsheets | |
CN114385145A (zh) | 一种Web***后端架构设计方法及计算机设备 | |
CN113987337A (zh) | 基于组件化动态编排的搜索方法、***、设备及存储介质 | |
CN116628066B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
EP3293645A1 (en) | Iterative evaluation of data through simd processor registers | |
CN111008011A (zh) | 一个面向电力平台应用开发的***构建器 | |
Sharma et al. | FLASc: a formal algebra for labeled property graph schema | |
US11093492B1 (en) | System and method of fetching data from an external program | |
Dyer et al. | Boa: An enabling language and infrastructure for ultra-large-scale msr studies | |
CN114281797A (zh) | 基于敏捷低代码平台快速创建基层数据汇聚仓库的方法 | |
CN110647518B (zh) | 一种数据源融合计算方法、组件及装置 | |
CN116795859A (zh) | 数据分析方法、装置、计算机设备和存储介质 | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 | |
Troelsen et al. | Exploring Entity Framework Core | |
CN116756184B (zh) | 数据库实例处理方法、装置、设备、存储介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |