框架轻重之我见

简介:

目前,看到在OSC中,不少人在写框架,比如:JFinal,比如Smart ,比如Hasor等。

可能大家都集中在一个轻量上作文章,这里我想就轻重做自己的一点感想,不一定正确,就当扔个砖出来,大家请放心大胆的抛玉出来,一起讨论。

曾几何时,Spring之横空出世,大家都是欢呼雀跃,为啥呢?因为Spring轻量。为啥轻量呢?看看EJB就知道了。那为什么EJB就重了呢?主要的原因就是大家必须围绕着EJB转,如果离开了EJB,就玩不转了。这个重就体现在,开发模式与EJB绑定之谓重,运行环境与EJB环境绑定之谓重,对EJB深度依赖之谓重。

而Spring当时为什么就轻了呢?当时Spring的采用了无侵入式设计,从而使使用它的人感觉不到它的存在,但是又能享受到它的好处。所以,就如一楼春风吹向广大深受EJB荼毒的程序猿们,于是Spring火了,Spring得到了非常大的应用与推广,甚至可以说占据了统治地位。

鄙人和Smart作者黄勇也通过QQ沟通过,感觉他的思想、理念都非常不错。看了哈库纳的博客,也为他的一些想法所惊叹。

稍有不同的是对轻量级框架的理解稍有不同。在以上作者的理解中,都期望依赖尽量少的框架,框架的容量尽量小。说实际的,这个目标也是本人所追求的。实际上,所有期望做平台的人,也都会这么想,毕竟:完成同样的功能,为什么不用更小的呢?更小的代码一般来说都代表性能更高,维护量更小,里面的遗漏缺陷更少。

但是,在另外一个方面,我也看到了以上三个框架都大量的采用了注解来实现相应的功能。注解与XML各有优缺点,这个道理大家都明白,注解之优势在于浑然于一体,XML之优势在于无侵入性,工具的可处理性更强,等等。

曾经有一个朋友给我留言说:你的Tiny框架依赖了Spring,就不可能是“tiny”的框架了。这在一定程度上也代表了相当多的人的一种观点。

在此我给出我对于轻量级框架的定义:

所谓轻量级框架,就是能帮使用框架者解决尽可能多的问题的同时,尽可能少的对使用者构成侵入性影响。

如果非要给出一个公式的话,那就是:轻量系数=解决的问题/侵入程度

说的通俗一点就是,你给人家解决的问题越多,而对人家造成的干扰越少,那就越轻量。

每个框架构建者可能都要考虑这样一个问题,如果有一天,别人的项目要向你的框架迁移,需要付出多少的迁移成本?如果有一天,使用你框架的项目要向别的框架迁移要付出多少成本?

实际上,这两项的成本不太可能为0的,但是应该尽量的小。如果说,不管怎么样,这两项的工作量都非常大,那你这个框架就不能算是轻量级框架。

再换句话说如果,这两个成本比较高,别人在决策的时候,就会非常小心,除非不得已,不会使用你的框架,或者不会迁移到你的框架上来。

所以,框架轻重之我见,判定的标准与jar包大小无关,与依赖的第三方包的大小多少无关,只与框架能解决的问题的能力及侵入程度相关。

相关文章
|
3月前
|
前端开发 Java UED
"揭秘!如何以戏剧性姿态,利用SpringCloud铸就无懈可击的异常处理铁壁,让你的微服务架构稳如泰山,震撼业界!"
【9月更文挑战第8天】随着微服务架构的普及,Spring Cloud作为一套完整的微服务解决方案被广泛应用。在微服务架构中,服务间调用频繁且复杂,异常处理成为保障系统稳定性和用户体验的关键。传统的异常处理方式导致代码冗余,降低系统可维护性和一致性。因此,基于Spring Cloud封装统一的异常处理机制至关重要。这样不仅可以减少代码冗余、提升一致性,还增强了系统的可维护性,并通过统一的错误响应格式优化了用户体验。具体实现包括定义全局异常处理器、自定义业务异常以及在服务中抛出这些异常。这种方式体现了微服务架构中的“服务治理”和“契约先行”原则,有助于构建健壮、可扩展的系统。
80 2
|
4月前
|
C# 机器学习/深度学习 搜索推荐
WPF与机器学习的完美邂逅:手把手教你打造一个具有智能推荐功能的现代桌面应用——从理论到实践的全方位指南,让你的应用瞬间变得高大上且智能无比
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)应用中集成机器学习功能,以开发具备智能化特性的桌面应用。通过使用Microsoft的ML.NET框架,本文演示了从安装NuGet包、准备数据集、训练推荐系统模型到最终将模型集成到WPF应用中的全过程。具体示例代码展示了如何基于用户行为数据训练模型,并实现实时推荐功能。这为WPF开发者提供了宝贵的实践指导。
59 0
|
4月前
|
开发者 CDN 监控
【破局·提速】当Vaadin遇上性能怪圈:开发者的智慧较量与极速加载的实战秘籍!
【8月更文挑战第31天】本文详细介绍了优化Vaadin应用性能的方法,特别是提高加载速度的实战技巧。首先分析性能瓶颈,如服务器响应时间和数据库查询效率等;然后通过代码优化、数据分页与急切加载技术减少资源消耗;接着利用资源压缩合并及CDN加速,进一步提升加载速度;最后通过持续性能监控和测试确保优化效果。通过综合应用这些策略,可显著改善用户体验。
86 0
|
7月前
|
Kubernetes Dubbo Cloud Native
【Dubbo3技术专题】总体技术体系介绍及技术指南(序章)
【Dubbo3技术专题】总体技术体系介绍及技术指南(序章)
74 1
|
7月前
|
XML Java 关系型数据库
框架前奏
框架前奏
61 1
|
XML 存储 Java
万字+40张图带你探秘小而美的规则引擎框架LiteFlow
在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。
|
运维 Kubernetes 负载均衡
使用K8s之我见
作为开发者,想必都对docker并不陌生,尤其是做后端开发的开发者更为熟悉。但是前段时间有个新闻关于docker马上要停止开源,这对于应用容器领域来说是一个晴天霹雳。但是docker停止开源,想必会让其他应用容器引擎能够有更好的发展。随着容器化的快速发展,关于集群管理、资源整合调度等相关领域的历史问题都得到了很好的解决,而且最为耀眼的就是谷歌开源的Kubernetes,那么接下来就来谈谈关于K8s相关的内容。
182 0
使用K8s之我见
|
Kubernetes 负载均衡 Dubbo
【Dubbo3.0技术专题】总体技术体系介绍及技术指南(序章)
【Dubbo3.0技术专题】总体技术体系介绍及技术指南(序章)
326 0
【Dubbo3.0技术专题】总体技术体系介绍及技术指南(序章)
|
存储 测试技术 数据库
设计脑机接口的实践指南
脑机接口(BCI)指的是将大脑与计算机连接起来的工具。过去十年间,业界对 BCI 的关注度迅速增长——一个典型例子就是,埃隆·马斯克名下主要研发脑机接口技术的初创企业 Neuralink 每次开新发布会都会引发舆论热议[1]。Neuralink 可以在大脑中植入人造物来完成多种任务,诸如用思维来控制动作或直接在大脑中播放音乐等。
259 1
设计脑机接口的实践指南
|
XML Rust Java
C++之我见:重剑无锋,大巧不工
首先声明,编程语言没有银弹,要懂得因地制宜,随机应变。陷入语言之争是无意义的。但我也认为对于程序员而言,学习和使用哪门语言是有个人偏好的,偏爱哪个自然也无关乎对错。
292 0
C++之我见:重剑无锋,大巧不工