当前位置:网站首页>Coding style: SSM environment in MVC mode, code hierarchical management
Coding style: SSM environment in MVC mode, code hierarchical management
2020-11-09 23:48:00 【Cicada smile】
In this paper, the source code :GitHub· Click here || GitEE· Click here
One 、 Layering strategy
MVC Pattern and code layering strategy ,MVC The full name is ModelViewController The model - View - controller , As a software design paradigm , Using a business logic 、 data 、 The interface displays the separated method organization code , Gather business logic into a component , While improving and personalizing the interface and user interaction , No need to rewrite business logic , It's a development model , But it's not the layered pattern of code in actual development , Usually SSM The framework's back-end code layers are as follows :
- controller Control layer : Define the server interface , In and out , And some input parameters ;
- service Business services layer : Assemble business logic , Business verification , The parameter model needed to build the control layer ;
- dao Data interaction layer : Provide the data query method needed by the service layer , Dealing with logic related to data interaction conditions ;
- mapper Persistence layer : be based on mybatis The framework needs native support , The most commonly used persistence layer component at present ;
Two 、 Control layer
1、Rest The interface style
Based on the logic of resource access and processing , Use different styles of annotations . For example, new resources , to update , Inquire about , Delete .
/**
* newly added
*/
@PostMapping("/insert")
public Integer insert (@RequestBody BaseInfo baseInfo){
return baseInfoService.insert(baseInfo);
}
/**
* to update
*/
@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
@RequestBody BaseInfo baseInfo) {
if (id<1){
return "error";
}
baseInfo.setId(id);
return "update="+baseInfoService.update(baseInfo);
}
/**
* Primary key query
*/
@GetMapping("/detail/{id}")
public InfoModel detail(@PathVariable(value = "id") Integer id) {
return baseInfoService.detail(id) ;
}
/**
* Delete primary key
*/
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable(value = "id") Integer id) {
baseInfoService.delete(id) ;
return "SUS" ;
}
2、 Interface reuse
High reuse of interfaces is not recommended , For example, add, delete, modify and check all the interfaces , The basic principle of , Different client side operations , For independent interfaces .
/**
* List loading
*/
@GetMapping("/list")
public List<BaseInfo> list() {
return baseInfoService.list(new BaseInfoExample()) ;
}
/**
* List search
*/
@PostMapping("/search")
public List<BaseInfo> search (@RequestParam("userName") String userName,
@RequestParam("phone") String phone) {
return baseInfoService.search(userName,phone) ;
}
For example, common list Interface ,list Usually, there will be conditional loading search Mechanism , And the search criteria are complex , It is suggested that there are two interfaces , From a practical point of view , Most of the scenarios are only used list Interface , Rarely used search Search for .
3、 In and out
Verification client must be conditional , For example, a certain condition is required , If there are questions , Quickly block the request link , The program entrance control layer intercepts and returns .
@PutMapping("/update/{id}")
public String update(@PathVariable(value = "id") Integer id,
@RequestBody BaseInfo baseInfo) {
if (id<1){
return "error";
}
baseInfo.setId(id);
return "update="+baseInfoService.update(baseInfo);
}
The parameters are less than three , It can be displayed directly into the reference , If there are three or more parameters, entity classes can be used to encapsulate them .
@PostMapping("/search")
public List<BaseInfo> search (@RequestParam("userName") String userName,
@RequestParam("phone") String phone) {
return baseInfoService.search(userName,phone) ;
}
4、 Processing parameters
The basic principle of the processing degree of the output parameter format , Servers as public resources , Avoid unnecessary operations , For example, the client can judge whether the return value is empty ,null etc. , Or some common format processing , Use the client to share the server pressure properly .
3、 ... and 、 Business services layer
1、 Business verification
For example, pass in the order number , Through the database layer query , No order data , This is called a business nature exception , There's no problem with the code itself , But business logic doesn't work properly .
public InfoModel detail(Integer id){
BaseInfo baseInfo = baseInfoDao.selectByPrimaryKey(id) ;
if (baseInfo != null){
DetailInfoEntity detailInfoEntity = detailInfoDao.getById(id);
if (detailInfoEntity == null){
LOG.info("id="+id+" Missing data DetailInfo");
}
return buildModel(baseInfo,detailInfoEntity) ;
}
LOG.info("id="+id+" The data is completely missing ");
return null ;
}
2、 Assemble business logic
Usually, the service layer is a complex piece of logic , Used to splice business core steps , It can be determined by business logic that , Step by step, step by step , Avoid doing a lot of object creation and requirement data query at the program entrance .
public int insert (BaseInfo record){
record.setCreateTime(new Date());
int insertFlag = baseInfoDao.insert(record);
if (insertFlag > 0){
DetailInfoEntity detailInfoEntity = new DetailInfoEntity();
detailInfoEntity.setUserId(record.getId());
detailInfoEntity.setCreateTime(record.getCreateTime());
if(detailInfoDao.save(detailInfoEntity)){
return insertFlag ;
}
}
return insertFlag;
}
3、 Data model construction
Usually, the business layer is more complex , If you want to quickly understand the business layer , Can be used for complex business methods , In this paper, we provide a method to return the parameters to build , It is used to process the parameters returned by the service layer to the control layer , This will make the heavy service layer approach clearer .
private InfoModel buildModel (BaseInfo baseInfo,DetailInfoEntity detailInfo){
InfoModel infoModel = new InfoModel() ;
infoModel.setBaseInfo(baseInfo);
infoModel.setDetailInfoEntity(detailInfo);
return infoModel ;
}
Four 、 Data interaction layer
1、 Reverse engineering
Here to use mybatis Frame or mybatis-plus Frame as a reference . If it is mybatis frame , It is suggested that the template code of reverse engineering should not be modified by user , If you need a custom method , stay mapper and xml Level to customize an extension file , Used to store custom methods and SQL Logic , This avoids the strong discomfort caused by large changes in the table structure .
Now, of course, most of them will mybatis-plus As a persistence layer component , These problems can be avoided .
2、 Data interaction
For the needs of the business layer , Provide the corresponding data query method , Only deal with the logic of interacting with the database , Avoid business logic , Especially in the distributed architecture , Data query and assembly of different services , It shouldn't be on this layer .
public interface BaseInfoDao {
int insert(BaseInfo record);
List<BaseInfo> selectByExample(BaseInfoExample example);
int updateByPrimaryKey(BaseInfo record);
BaseInfo selectByPrimaryKey(Integer id);
int deleteByPrimaryKey(Integer id);
BaseInfo getById (Integer id) ;
}
5、 ... and 、 Source code address
GitHub· Address
https://github.com/cicadasmile/data-manage-parent
GitEE· Address
https://gitee.com/cicadasmile/data-manage-parent
版权声明
本文为[Cicada smile]所创,转载请带上原文链接,感谢
边栏推荐
- proxy 的不完整polyfill
- LinkedList源码简析
- Visit 2020 PG Technology Conference
- Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法
- CUDA_ Shared memory, memory access mechanism, access optimization
- asp.net core中使用Serilog以及自定义Enricher
- Usage of [:] and [::] in Python
- 将Map中对应的key和value赋值到对象中
- Operation and design of rights management in ERP
- CUDA_获取指定设备
猜你喜欢
毕业设计之 ---基于微服务框架的电影院订票系统
一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
asp.net Using serilog in core and customizing enrich
Expect ':' at 0, actual = (JSON conversion exception resolution)
ES6, ES7, es8 Learning Guide
会展云技术解读 | 面对突发事故,APP 如何做好崩溃分析与性能监控?
ERP的权限管理的操作与设计--开源软件诞生24
那么当下的行情投资者该怎么办呢? 现在新的投资风口来了!
Postman(一)---功能介绍
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
随机推荐
SQL case conversion, remove the space before and after
CUDA_ Memory model
一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
Must see! RDS database all in one
eleven point nine
Functional guide for temporary users and novices of PL / SQL developer
LinkedList源码简析
The number of more than half of the array is printed by the sword
The kth smallest node in the print binary search tree of offer
Jingtao project Day10
Kubernetes-18: installation and use of dashboard
Python prompt attributeerror or depreciation warning: This module was degraded solution
CUDA_共享内存、访存机制、访问优化
Problems of input and button (GAP / unequal height / misalignment) and Solutions
Postman(一)---功能介绍
SSL证书和公网IP地址如何影响SEO
Unity使用transform.Rotate进行三维旋转角度出现偏差
“wget: 无法解析主机地址”的解决方法
利用尾巴作为时间序列进行处理来识别鲸鱼
Brief analysis of LinkedList source code