Code Monkey home page Code Monkey logo

mkframework4java's Introduction

动手写个java快速开发框架-开篇

https://www.jianshu.com/p/237e9ea4a6be

最近和家附近大学的一些大学生交流的比较多,他们对Java的基础知识,零散的框架知识都有所了解,但是对实际开发中的框架感觉很神秘,很多职场新人也是刚到公司对公司使用的开发框架也觉得很神秘,我会通过一个系列的文章从0到1实现一个java的快速开发框架,这个开源java框架的目的一个是帮助一些有一定开发基础想提高自己架构能力的同学,让大家知道框架是如何一步步搭建起来,又是如何一步步完善的,另一个目的是在社区再提供一个简单的快速开发框架的选择(虽然已经有很多了)。

首先开篇先介绍下整个开源框架包含哪些功能,这个开源框架的名字叫Mk Framework,任何一个开发框架其实都是对原油开发工程的一个抽象,抽象出后续其他类似项目也会用到的功能,这样可以方便后续类似的项目能够快速复用,快速开发,这个框架是我从之前开发的一些api网关中抽象出来的,在我的概念中目前主流的快速开发框架大都是从一个网关抽象出来的,只是附加功能和定制化功能的区别,就好像大众所有的车都来自于golf一样。这个框架最适合于为app或者小程序这类前端应用开发一个api服务网关,基本可以做到开箱即用,直接定义数据结构、开发controller接口就可以了。

下面介绍下框架的目录结构,从目录结构中也能一探功能范围,下面这个脑图就是总的package结构。

MKFramework

我分别介绍下每个模块和主要的实现技术,后续会在各个章节详细介绍每一块功能如何实现,如何用在后续项目中。整个框架中为了好区分框架部分和业务模块部分,比较粗暴的分成了common模块和modules模块,大家也可以把业务模块单独成一个工程,让这个业务工程依赖框架工程就好了,这里为了方便讲解和后续演示我就直接放在了一个工程里,实际开发的时候大家完全可以将框架单独打包成稳定的jar,然后各个业务子工程依赖于该框架工程即可,这样对于整个团队甚至公司的开发技术栈都是可以做到统一管理,统一控制,防止开发人员各用各的,之前呆过的几家公司都遇到过jar包混乱,技术栈混乱的问题,通过统一开发框架确实能够有效解决这个问题。好了人下面我们开始介绍下:

com.monkey01.common.annotation

annotation包中存放的主要是我们用到的注解,这个框架中自定义注解不多,后续大家可以在这个包中定义自己框架中用到的注解,框架中我会抽象几个用的比较多的功能注解。

com.monkey01.common.aspect

aspect包中主要用来存放切面类,主要实现一些切面类例如系统日志切面类、redis缓存切面类、网络请求统一处理切面类等等,一些切面拦截器和过滤器也放在这个package中。

com.monkey01.common.exception

exception包中主要是定义了自定义Exception类,对于自定义异常类可以根据需要细分不同的粒度,框架里我只会设计一个统一的自定义异常类,如果大家需要细分异常,可以自己再设计一些细粒度的Exception类。同时该包中还会包含ExceptionHandler统一异常处理类,用来对具体服务类抛出的异常进行统一异常处理,这样可以避免各类异常处理分布在各个业务类角落,造成后续维护困难。

com.monkey01.common.domain

domain包在框架common包和业务模块包中都会存在,common包中的domain主要是用来存放框架用到的公共BO、DO类。

com.monkey01.common.context

context包中主要用来存放整个应用的全局context信息,在Context中可以存放自己定义的上下文公共数据。

com.monkey01.common.utils

utils包名顾名思义就是存放我们常见的util类,因为目前有很多优秀的util类,这里也就不再重复造轮子了,搜集了一些比较好的util库,框架里主要用的是vjtool-vjkit唯品会开源的util库,还有hutool,hutool也是一个比较好的开源util类库,常用的util基本都有,一个百宝工具箱。

com.monkey01.common.safe

safe包里面放的主要是安全相关的类,目前任何一个系统都要有安全防护,不然上线后很容易被各种攻击,框架中做了接口上送参数校验相关类、防各类xss攻击类、各类加解密类、jwt token生成校验类,目前的版本不会加入shiro后续会根据网友的反馈看是否要加入,毕竟shiro还是稍微有点重了,对于一般的服务网关用不上。在这里我还会开源目前用在我很多生产项目中的app和服务端的一次一密的动态报文加密模块。

com.monkey01.common.cache

cache包中主要是对java自带的hashmap、concurrentHashMap、guava、redis进行了多级缓存的封装,基本可以满足日常的要求。

com.monkey01.common.db

db包基本没有做封装,直接使用了mybatis plus库,这个库基于mybatis开发,是目前我用下来最好的orm框架库,能够大大提高开发效率,同时也包含了bean、mapper、service、controller的基础类自动生成功能,还是挺方便。

com.monkey01.common.monitor

监控对于一个单机系统的作用不是那么大,但是对于一个分布式的集群系统来说监控是非常重要的一个模块,通过监控能够第一时间了解到系统当前的瓶颈和问题所在。目前开源的微服务监控组件有很多,很多我都用过,springcloud大礼包中的sluenth、zipkin、turbine功能都太简单,而且功能不够聚合,点评开源的CAT对于原有代码侵入性又太强,所以这里推荐使用韩国人开源的pinpoint,pinpoint也是目前github上最火的微服务全链路监控项目,pinpoint不但对代码侵入性小而且使用起来也足够稳定。

com.monkey01.common.limit

limit包主要是放限流功能模块,这里我们项目中使用的限流是Netflix开源的Hystrix,Hystrix的限流和熔断功能是比较全面的,而且底层使用的是线程池限流方案,整体比较稳定,之前我也压测过性能是能满足要求的。

com.monkey01.common.config

config包很好理解,就是存放一些相关的config类。

整个快速开发框架主要是有这些模块组成,其中核心的内容在后续的文章中会陆续进行讲解,本篇先给大家一个全貌的概览,这个快速开发框架能够快速完成一个前后端分离系统的后端服务部分,能够快速完成接口开发和对前端开放。整个框架设计的核心思路就是复用现有的成熟框架,做一定的定制开发再按需组合成一个适合自己的快速开发框架,整个专栏更新频率大概一周1-2篇,在整个专栏结束后,希望大家也都能开发出属于自己的开发框架。

mkframework4java's People

Contributors

feiweiwei avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.