最近几个月学习内容的总结思考
网站软件的存在意义是把复杂的事情简单化,制作软件却非常困难。
为了节省人力,很多应用会使用网站框架以实现工程级别的继承关系:把问题从制作“Java网站应用”变成制作“Java EE”或者“Spring”应用,从而复用父类(框架)的经验和代码。
框架可能适用大部分应用,但是框架也导致程序员明明只是在自定义自己的应用独有的行为,却需要先去了解关于框架的知识,而且实现功能的难度取决于框架舒适区的范围。例如在面向关系模型的框架中使用多种数据库,在提供CRUD接口的框架中实现推送和跨资源视图,在生成表单网站的框架中实现Ajax,在基于并发优化的单线程框架中实现并行计算,都是容易产出面条代码的需求。
究其原因,大部分框架并没有把软件复杂性封装在底层,只是允许程序员用户的代码在自己的环境运行。程序员有如在沉淀干净的池水里面游泳,动作大一点就会搅起一身泥。
这并不是框架设计者的问题。毕竟,连架构都要继承的话,结果大抵如此了。
取代这种单一架构(Monolith)的答案有很多,目前的最新答案是微服务。