工程模块划分以及包目录、代码的设计-基础篇01

设计的主要原则:web、小程序、手机端的接口通常不追求极致的效率,因此我们需要尽量遵循业务逻辑,提高可维护性、可读性和健壮性。

前后端分离项目,后端的设计:

1、通常后端核心的三个模块controller、service、dao

2.1、controller最贴近view,也就是前后端主要交互点,是离实际业务最近的地方,因此对于有多设备、多角色的情况下,可以创建web和admin两种包目录,或者从controller的命名上加以区分。

2.2、controller需要完成的主要逻辑有:参数校验、数据汇总、数据封装

2.3、为什么会在controller上做参数校验:因为有项目多采用注解校验权限、注解加密、注解校验参数是否合法等等,这些通常使用了aop完成,service上有些注解和这些注解是互相影响的,既为了不破坏项目整体风格,也是为了不影响功能

2.4、这些注解的功能完全可以手动实现,充当的是一种过滤器的角色

3.1、service需要完成的主要逻辑有:数据分析、计算和一些特殊数据结构组装等等,实际上我是不会对service层再做类似于web和admin这种命名或者包结构上的区分,因为service包装了dao层,类似一个数据提供者的角色,还是要稍微追求一点通用性

3.2、我个人编写service的原则是功能越单一、提供服务的范围越小越好

3.3、为什么service提供的功能越单一、服务范围越小越好,service循环依赖、横向扩展以及纵向扩展

4.1、如果采用mybatis框架作为dao层的依赖,建议不要使用一些增强api,也不要使用动态sql,这种web项目的代码已经不追求效率,那么sql写的越简单越容易理解越好,别的处理完全可以靠service解决

 

最终,我们web类型项目的后端就会形成如下的结构:

 

由此就可以看出来,接口和规范的设计是很重要的,尤其是service的接口。这个时候就恰好知道为什么service总是先定义接口,再做实现类了,也知道为什么接口是高级编程了,为什么先设计接口才是符合设计模式的思想的了。因为一个大的、比较特定的业务,通常是由多个小的比较通用的功能、以及少量特定且不通用的功能组合起来的。写程序就和需求评审一样,先大而全,模糊且不确定,慢慢细化,精确。

所以除了过滤器、拦截器,controller里面只要写清楚一个功能需求的调用步骤,service再做细化。

当然想法再好,也抵不过实际情况。如上所说的编码方式,只适合不需要前后端共同配合完成一个功能的情况。有些功能比如说需要前端同时调用多个接口完成一种功能的情况,则会破坏这种设计。

 

posted @   时间羚羊  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示