工程模块划分以及包目录、代码的设计-基础篇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再做细化。
当然想法再好,也抵不过实际情况。如上所说的编码方式,只适合不需要前后端共同配合完成一个功能的情况。有些功能比如说需要前端同时调用多个接口完成一种功能的情况,则会破坏这种设计。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律