假设我们的「特定环境 」如下:
技术层面
使用Java语言进行开发
通过Maven构建
基于SpringBoot
使用IntellijIDEA作为IDE
使用Mybatis作为持久层框架
前后端分离
非技术层面
新项目,变化较频繁
快速迭代
开发人员资历较浅
人员流动性较大
我们的 「期望 」是:
快速上手:鉴于人员流动性较大、开发人员的资历较浅和项目的快速迭代需求,期望开发框架易于开发人员开发。易于入门,易于部署。
符合行业规约:尽量不定义私有规范,使用行业标准,进一步降低学习难度
快速开发:尽可能复用代码,尽可能自动化生成模板代码
独立性:应用能独立运行,不过多的依赖其它应用或中间件。边界清晰,有利于理解、开发、测试和部署。反例:就是没有规划的RPC调用。
易于测试:能方便的进行单元/集成测试,不影响真实数据
易于部署:能方便的进行部署,便于快速的扩容
异常可追踪:对异常,可快速定位到具体是哪个应用,哪个类,哪行代码的问题
本文从一个空框架开始,逐步加入上面的约束,最终推导出符合期望的Web框架!
本文提供的是一种思路!如有纰漏、或不同意见,欢迎讨论指正!
我们从一个「空框架」开始我们的框架推导!所谓「空框架」是一个没有任何约束的接收HTTP的可运行代码,比如对任何请求都只返回Hello World的servlet!
这里我们基于Maven和SpringBoot快速搭建一个「空框架」!
代码结构如下(Maven构建约束):
intellijweb2 src/main java com.ivaneye.intellijweb2 TestController resources application.properties logback-spring.xml
代码如下:
package com.ivaneye.intellijweb2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ResponseBody; @Controller @EnableAutoConfiguration public class TestController { @RequestMapping("http://www.likecs.com/") @ResponseBody public String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Main.class, args); } }