3.3K Star 9.9K Fork 4.5K

iBase4J / iBase4J

 / 详情

iBase4J 架构研究

已完成
创建于  
2016-09-04 14:41

iBase4J 架构研究

整体封装的非常好,开源少有的精品之作。

实现了 nginx 反向代理与后台进行动静分离,基于接口进行业务处理。

base 包中

BaseModel 的扩展属性有用,可以精确记录到每条数据是谁记录的,其创建时间,数据更新时间也是动态弄的的,最好的是支持了 Redis缓存,只是不知道,缓存中的数据删除后,如何通知其他系统。。。

BaseMapper 扩展的方法不多。

整体来说,支持读写分离,但不支持分库分表。

config 包中

实现了 druid 密文解密,Swagger 接口管理,i18n 第三方国际化,重写了Redis KeyGenerate管理redisKey

exception 包中

抽象了父类 BaseException,及 HttpCode方法。实现了业务,数据解析,文件上传,参数错误,登录等异常。

interceptor 包中
实现了 BaseInterceptor 拦截器链,其实跟直接在Spring-web.xml中配置没有什么区别。
可以优化的一点是,可以增加一个拦截器注解,动态控制此拦截器是否可拔插,而不是在nextInterceptor配置多份。

support 包中
对于常用的组件分类都很完善,没什么补充必要。

util 包中
每个类的命名都很规范。

工程国际化
在Assert与拦截器中实现了国际化,但很恶心的一点就是,需要写i18n配置文件。

service 层
砍去接口层,如 IService层,直接以实现层来代替,douboox整合的时候应该不是非常方便。
很恶心的一点就是要增加 @Transactional 手动控制事务。
支持redis缓存也要写注解,@CachePut 等。

controller 参数使用 ModelMap传递,内部再使用Request2ModelUtil.covert转换,不如直接使用domain对象接收即可。

其他的比如:
ftp,fastdfs,shiro,redis 就不详细说了。

评论 (17)

实现了国际化,但很恶心的一点就是,需要写i18n配置文件

J2EE国际化有什么不使用i18n配置文件吗?
愿闻其详。

看你的评论,感觉框架整体不错。如果你能把你觉得恶心的地方,改过来就好了

确实写的很棒!

再看有点小问题,感觉作者对于SpringMVC xml配置方面的理解还有待加强,从Spring-sevlet.xml中看的话,有些是完全没必要的,可以参考这个 spring4的最小化配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 激活组件扫描功能,扫描aop的相关组件组件 -->
    <context:component-scan base-package="com.yingjun.ssm.aop"/>
    <!-- 启动对@AspectJ注解的支持 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />

    <!--开始springMVC注解模式-->
    <!--简化配置:
    	1、自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
    	2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持
    -->
    <mvc:annotation-driven />

    <!--2:静态资源默认servlet配置
    	1、加入对静态资源的处理:js,css,gif,png
    	2、允许使用"/"做整体映射
    -->
    <mvc:default-servlet-handler/>

    <!--配置JSP 显示ViewResolver-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--扫描web相关的bean-->
    <context:component-scan base-package="com.yingjun.ssm.web"/>

	<!--全局异常捕捉 -->
	<bean class="com.yingjun.ssm.exception.GlobalExceptionResolver" /> 
	
</beans>

@洪运 要写的,涉及到国际化没办法,有人忘记写了的时候就很恶心,我们当时想了个办法,解析 jsp 里的文本文字,调用google翻译,然后生成中英两个i18n的文件,有些不妥的地方我们再修改,搞定国际化,一个不算很大的世界五百强招聘项目。

我补充几点:

  1. 为什么是service依赖provider,而不是provider依赖service?

一般我们的后台管理系统是直接访问数据库的(没有缓存),provider为用户端api或其他子系统提供服务,可能会加上一些缓存或其他处理。如果是provider依赖service这样会不会好一点?这样后台管理就可以单独运行,不用调dubbo服务

  1. 为什么查询参数用map

这样的api对调用端不是很友好,如果使用实体作为参数,实体没有包含的字段,可以在BaseModel里封装一个map作为额外参数

@铁匠 好意见!

A圣翔 关闭了任务
A圣翔 重新打开了任务

启动Failure obtaining db row lock: Table 'ibase4j.QRTZ_LOCKS' doesn't exist

@东方红 设置数据库不区分大小写

看了一下CsrfFilter的代码,对CSRF的解决方案是采用Referer头,然后匹配白名单来实现。这样岂不是每增加一个url就要配置在白名单里面? 有没有更好的方案?

@ . 自定义注解控制即可

@铁匠 赞,同意封装的BaseModel中增加一个Map的做法

@ . 这是粒度比较细的权限控制呀,可以用通配符之类的吧,我还在学习中

service如果也就是dubbo服务,如果用jar启动的话由于又依赖了servlet的jar,所以启动会有问题的

A圣翔 验收了任务

怎么打包成jar执行文件

A圣翔 置顶等级 修改为不置顶

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(13)
19431 russell hong 1578915261 11460 tomlin 1661306034 57753 linapex 1578915759 346330 zhangyq1011 1578920784 65572 fengjx 1578916091 728904 ite 1578931590
加载更多
Java
1
https://gitee.com/iBase4J/iBase4J.git
git@gitee.com:iBase4J/iBase4J.git
iBase4J
iBase4J
iBase4J

搜索帮助