惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
博客园_首页
The Cloudflare Blog
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
Y
Y Combinator Blog
Jina AI
Jina AI
博客园 - 聂微东
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
F
Full Disclosure
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
J
Java Code Geeks
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Blog of Author Tim Ferriss
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
PCI Perspectives
PCI Perspectives
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
宝玉的分享
宝玉的分享
IT之家
IT之家
Hacker News: Ask HN
Hacker News: Ask HN
The Register - Security
The Register - Security
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs

博客园 - 老翅寒暑

AI模型的回调能力的理解和实现 关于AI时代的程序架构的变化 关于需求规范和需求评审的一点看法 关于低代码和无代码---喧嚣背后的致命问题 为Jekyll静态网站添加PlantUML插件 企业要为现金流建模 XenServer 5.5 断电重启虚拟机磁盘丢失的修复 Fix catalyst driver in Ubuntu 13.04 / 13.10 Preserving Remote IP/Host while proxying 异步javascript的原理和实现 需求的最初形式:12306ng的需求小说 需求与设计过程(1)-用例 项目进度控制的技术 项目管理沙龙第十二次会议纪要--为没有共识的项目组定制敏捷方法 项目管理沙龙第十一次聚会纪要--当敏捷没有共识的时候 项目管理沙龙第十次聚会纪要-AOM项目的敏捷实践 项目管理沙龙第九次聚会纪要 项目管理沙龙第八次聚会纪要 项目管理沙龙第七次聚会纪要
关于通用框架的一些想法
老翅寒暑 · 2019-05-28 · via 博客园 - 老翅寒暑

前言

前几天跟朋友谈起框架的事情,回顾了一下当前框架的发展,尤其是Spring Boot,已经把程序员的开发简化到了最初的一个 class 的形式了。这个也是我为什么喜欢领域驱动设计(DDD)的原因,真正回归了本源。回头看历史上的各种框架,从struts开始,到Tapestry、Wicket、SpringMVC,最后到Spring Boot,就是逐渐破坏面向对象(OO)的封装性,再慢慢回归到面向对象的历程。

通用框架的一些概念

我画了一个图,是应用程序的结构,貌似是Spring Cloud/Boot的结构,实际上并不仅仅如此。

应用程序结构

我们从底向上分析这个图:

  • 底层是操作系统,目前流行Docker,以及基于Docker的各种派生工具,比如Kubernates、Rancher等。但是微创新不能改变本质,也就是Docker带来了和纯OS之上部署完全不同的一种方式。但是依然属于“部署”的领域。在这个领域中,我们要思考的是拓扑结构、设备内存大小、磁盘空间、网络参数、文件句柄等。
  • 操作系统之上,就是应用系统的各种部件。现在的应用系统,都是异构的,如数据库用Mysql、Oracle,缓存Redis,传输Kafka、MQ等等。这些异构的外部第三方程序需要和自己开发的应用进行集成。这是“系统集成”的领域。在这个领域中,我们要思考的是地址、端口、应用系统的配置参数等。
  • 在自己开发的应用程序结构中,如果用java开发,则要基于Java运行时之上,结合外部的各种库,然后才能在其上开发自己的业务逻辑。这些业务逻辑代码通过编译打包功能,和外部库文件一起构成应用程序。这是“应用集成”的领域。在这个领域中,我们要在代码级别思考API、性能、参数、返回值、调用方式等。
  • 最上层才是自己真正开发的应用逻辑部分。现在一切都回归到“对象”,程序员们只需要把业务逻辑写在class里就可以。但是写出这些代码之前,我们需要进行设计,思考各个class之间的关系,思考界面和后台逻辑的调用方式,思考界面的布局、交互等。这些才是开发真正要关注和要做的事情。

把上图换一种画法,可以更加容易看懂。一层层象蛋壳一样的结构表示不同模块所处的依赖层面。现代软件框架已经发展成了一个庞大的体系,我们需要人工编程的部分,就像鸡蛋的蛋黄一样,核心但是只有一点点。

应用程序结构2

那么,我们刚才已经说了:

  1. 基于现代框架的编程,已经回归且简单到只需要写一个class的地步了
  2. 在手工编写内容之外,都是集成工作

通用架构也不过是如此。

关于通用框架的一些设想

目前框架方面的顶尖水平依然在Java界,以Spring Boot为代表。现在流行的Spring Cloud的核心依然是Spring Boot。记得2015年的时候,我用Dubbo给客户搭建了一个框架,后来在研究Spring Cloud的时候,发现两个的框架的思路基本一致,编程方法类似。那么,从开发者的角度,能否屏蔽这种差异?

一旦屏蔽了框架实现的差异之后,开发者只需要用纯OO结构去实现自己的业务,框架根据Annotation自动决定加载和运行。也就是说,我们可以把“框架”归类到运行时(Runtime)部分,而不再需要把框架代码也打包到系统里。框架和代码之间的解耦,可以让应用程序的适应性更广:同一套代码,套用不同的框架,就具备了不同的特性,如高可靠、高吞吐量、离线处理等等。

看起来很美!