模块化开发

看到网上许多人关于项目划分模块的文章,有按照层次划分的,有按照业务逻辑划分完又按照层次再划分一遍的,比如这样:

根项目:
   commons:      #所有模块公用的类,如验证工具、RPC接口、dto等
   业务线1:
	   业务1-dao:      #dao层
	   业务1-service:  #service层的实现,混杂了业务逻辑
	   业务1-web:      #web层

不管你觉得这么做合不合理,反正我觉得这非常不合理,完全就是脱裤子放屁,白白地增加了项目的复杂度,理由如下:

  • 如果我们的项目不涉及到远程调用,那直接分成一个模块,然后按层分包就完事了;
  • 如果我们项目过大,那按照业务模块划分,然后把其他模块需要RPC的实体dto以及接口分离出一个模块就ok了,这种连dao和service(impl)都要分出去的做法我是看不懂(分布式项目把dao和service impl给别人?想啥呢小老弟)。

那么,理想中的模块划分应该是什么样呢,看看下面:

根项目:
   commons:
       common-utils: #所有项目使用的工具类,如参数校验等
       web-utils:    #所有web项目使用到的公共工具,如自定义切面
   middleware: #项目使用到的中间件,如注册中心、配置中心、监控中心等
       config-center:
       register-center:
       monitor-center:
       #...
   业务线1:
       业务1-core: #包含实体、枚举、dto的定义、供远程调用的接口等可以开放给其他模块使用的东西
       业务1-web:  #包含dao层、service层(impl)、manager、controller层,等本业务私有的逻辑
   业务2,3,...:
   single-sign-on: # 单点登录
       sso-core:   # 关于鉴权的公开的实体、dto
       sso-client: # starter,提供用户认证的切面、工具等,供其他模块直接使用
       sso-web:    # 处理用户认证、鉴权、令牌签发
   third-party:   #对需要对接的第三方接口封装,封装成stater或SPI,项目中的其他模块使用时可以做到开箱即用
       baidu-aip-starter:
       wechat-oauth-starter:
       qq-oauth-starter:
       ding-talk-starter:
       #...
# 另外,所有core模块不得有对javax以及common-utils之外的依赖
# web模块不可依赖其他业务线的web模块

当然,你也可以根据自己的业务需求来划分模块,我这里只是提供了一个思路,就一个原则:单个业务能不拆模块就不拆,拆除去的都必须是其他模块要使用的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值