净资产滚动率_净资产的结构

净资产滚动率

Netty的包装结构很棒。

每个程序员都应该研究它。 每个系统都应该模仿它; 每个项目经理都应将其打印出来,拍在墙上,然后对开发人员说:“那样。”

Netty是一个“ ...异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端”,但这在这里无关紧要,因为我们没有分析其行为。 相反,请看图1。

图1:Netty的包装结构历时7年。

图1展示了Netty不断发展的软件包结构的spoiklin图(圆圈是包;直线是页面下的依赖关系;曲线是页面上的依赖关系),如果您不能立即看到它的结构如何,是,然后窥视Junit , Struts或Ant 。

并非只有这样的情况:“情人眼中有良好的结构。” 结构性混乱提供了程序结构的不良程度的客观度量:结构性混乱程度越低,结构越好。 Netty的疾病远低于其他疾病,请参见表1。

程序 包装结构紊乱
蚂蚁 81%
朱尼特 76%
Struts 74%
Lucene 73%
FitNesse 61%
弹簧 35%
净额 26%

表1:本系列中所有程序的结构紊乱。

图2进一步显示了这种最终的结构异常并非偶然。 Netty在整个七年的生命周期中一直处于低水平。

图2:通过11个发布发布的Netty的结构混乱(与其他发布者进行比较)。

那么:为什么这个包结构这么好?

给定如图1所示的图表,我们可以提出两个快速问题来大致评估所描述结构的优点。

在商业软件开发中,“良好的结构”仅表示“便宜的更新”。 此外,有证据 表明 ,每个了解涟漪效应的程序员都知道什么:X所依赖的事物越多,涟漪效应的影响就越大,因此X的成本就越高。

因此,选择一个严重依赖其他程序包的问题(A)我们是否可以轻松地确定依赖程序包,以及(B)这些依赖程序包的全部子集有多小?

结构不良的程序会掩盖这些依赖关系,仔细检查通常会发现几乎整个系统都存在依赖关系。 但是,结构良好的程序显然会提供依赖的程序包,而且数量很少。

首先让我们问一个结构不好的程序的两个问题。

图3显示了Jenkins噩梦般的90%结构性混乱,然后显示了五个包中最依赖其他包的突出的传递依赖关系(工具提示)。

图3:詹金斯,哦,詹金斯。

显然,要在Jenkins中跟踪依赖关系是一个挑战,许多软件包依赖于系统其余部分的75%以上。

图4重复了该实验,但是显示了五个Netty软件包的传递依赖关系,这五个软件包最依赖其他软件包: epoll,spdy,websocketx,httpnio

图4:以蓝色突出显示Netty中最差的传递依赖项。

与詹金斯形成鲜明对比的是,我们可以看到Netty软件包所依赖的数量以及数量。 Netty有55个软件包,但其他任何人所依赖的最大软件包只有12个,仅占系统的22%。

Netty的包装结构是否完美? 当然不是。 特别是内部并发之间的循环依赖关系在该核心内部/并发/通道/缓冲区/使用程序包群集中创建了令人遗憾的强耦合。

从表面上看,实际上,Netty的类结构不好。 Netty的设计师在建立班级时显然放弃了一些出色的结构原理。 丢人现眼。

但是,看看那个包装的结构……哇。

最后,没有分析Netty的关键发布,而是提出了一个架构观察。 Netty的架构师似乎已经决定了一个相当出色的部署策略。 下载Netty既可以得到一个多合一的jar文件,也可以得到13个jar文件,其中包含系统的各个部分。 大概您可以加载所有Netty或仅加载所需的部分。

一个jar文件,即“公共” jar,包含内部/并行/通道/缓冲区/ util程序包集群,而其他文件则包含“ codec”,“ tcnactive”,“ transport”等,提示后者jar是普通jar的客户,但不是彼此的客户,因此彼此之间没有依赖关系。 因此,在他们的部署中,Netty的设计师可能已经将子系统的分离和封装包含在内,从而导致了这种行业领先的封装结构。

剩下的唯一问题是:为什么没有更多的项目效仿Netty? 为什么詹金斯有90%的结构障碍? Jenkins的设计师为什么不适当地划分其系统以减少包装间的耦合? 为什么软件开发领域如此愿意接受这些不良结构所产生的成本?

我们不是比这个更好吗?

摘要

如果每年获得当今使用的最佳Java包结构的奖项,Netty将会连续七年获得该奖项。

翻译自: https://www.javacodegeeks.com/2017/01/the-structure-of-netty.html

净资产滚动率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

freebsd nginx php mysql_FreeBSD 安装配置Nginx+PHP+APC+MySQL

在 FreeBSD 下安装软件的传统方法是用 ports 源码安装,不过使用 ports 源码编译安装太耗时(尤其是各种库依赖多、大的时候),个人还是喜欢 pkg 这种软件包管理工具直接安装编译好的二进制软件包,不用自己编译,省时省力。FreeBSD 也…

python入门之类的基础语法-关于一些Python的一些基础语法训练

1:已知a和b元素 a "pyer" b "apple" 用字典和format方法实现:效果:my name is pyer, i love apple. 1、format的方法 c "mysql name is {0},i love {1}".format("pyer","apple") 用字典…

jdk 9和jdk8_JDK 9已完成功能!

jdk 9和jdk8今天的Mark Reinhold消息JDK 9已完成功能完善-现在该降级了 , 它宣布JDK 9的“总体功能集已冻结”。 OracleJava平台小组的首席架构师Reinhold补充说:“极不可能将任何进一步的JEP定向到该发行版。” 与该消息类似的文本也出现在JDK 9页面上 …

Java从键盘输入若干数_用java编程序:从键盘输入若干个整数,输出这些数中大于其平均值的数。...

展开全部引用1楼 christal yhy的答案,考虑到浮点数的存在,特在此基础上优化一下,代码如下:public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println("请输入62616964757a686964616fe59b9ee7ad9431333262373933要输入的个数:&qu…

java多线程编程_阿里P8熬到秃头肝出来的:Java多线程+并发编程核心笔记

自学Java的时候,多线程和并发这一块可以说是最难掌握的部分了,很多小伙伴表示需要一些易于学习和上手的资料。所以今天这本「Java并发学习手册.pdf」就是一份集中学习多线程和并发的手册,PDF版,由RedSpider社区的五位大神撰写&…

内外网逻辑隔离物理隔离_隔离域逻辑

内外网逻辑隔离物理隔离在一个设计模式课程中,我对建模域逻辑进行了有趣的讨论。 具体来说,它是关于隔离域逻辑的 。 一个应用程序通常分为三个部分: 演示(例如桌面GUI,浏览器,Web服务) 域逻辑…

360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...

在日常工作中,我们经常碰到网页不兼容的问题。我们之所以要做兼容性测试,目的在于保证待测试项目在不同的操作系统平台上正常运行。主要包括待测试项目能在同一操作系统平台的不同版本上正常运行;待测试项目能与相关的其他软件或系统的“和平…

Linux 的命令终端(CMD)的快捷键(Keyboard of MacBook)

文章目录常用移动光标编辑命令查找历史命令控制命令命令终端界面滚屏命令终端页签切换奇葩常用 快捷键说明Ctrl A光标跳到本行的行首Ctrl E光标跳到本行的行尾Ctrl U删除当前光标前面的所有文字(还有剪切功能)Ctrl K删除当前光标后面的所有文字&…

instanceof_您真的需要instanceof吗?

instanceof使用instanceof是一种代码味道。 我认为我们可能对此表示同意。 每当我看到这样的构造时,我都会确定出现了问题。 也许有人只是在进行更改时没有注意到问题? 也许有一个主意,但是它太复杂了,以至于需要太多的精力或时间…

HTML 中的节点、元素、标签、标记的区别

文章目录一、HTML 节点(一)节点的类型二、HTML 标签三、HTML 元素(一)HTML 元素属性(二)HTML 元素的嵌套一、HTML 节点 节点(node)是构成我们网页的最基本的组成部分,网…

java查题小程序_求助大神来写一个java的小程序,题目如下

货不多说直接代码public class car {private String car_number;private float car_price;private float rebate;//折扣public float getRebate() {return rebate;}public void setRebate(float rebate) {this.rebate rebate;}public String getCar_number() {return car_numb…

valhalla 插件_Valhalla项目的价值

valhalla 插件我对Valhalla项目的进度一直很感兴趣,但是Brian Goetz最近的信息“ Valhalla项目:目标 ”提高了我的兴趣。 我经常喜欢Goetz的作品,因为他结合了我最想成为技术作者的两个特征:他比他所写的内容更了解他所写的主题&a…

cpu占用100_Java项目服务器cpu占用100%解决办法

1、使用命令top查看cpu进程,发现tomcat占用cpu使用率过高可以看到服务器负载很高,tomcat CPU使用已达到接近300%,内存20%。2、把进程的栈dump到文件里,以便后面的分析jstack 22764 > cpu0827.log 3、看看这个进程里面哪些线程在占用cputop…

MySQL 获取系统时间/系统日期/日期时间的函数

文章目录一、获取当前系统日期和时间(一)now(),返回当前的系统日期和时间(二)sysdate(),返回当前的系统日期和时间(三)current_timestamp(),返回当前的系统日期和时间&am…

java人种_实在看不出藏族有大量矮黑血统

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼人种混合的存在提醒了研究远东地区的人类学家。在远东,特别是东南亚,棕色人种和黄色人种错综而居,有些群体更似乎兼有两方的特征,很难判定。这种格局究竟是不是混血,还是其…

apm java_非Java专家的APM:什么泄漏?

apm java通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用! 内存,内存,内存... 内存是Java的关键部分,尤其是内存管理。 作为开发人员,内存管理不是您想…

360安全卫士电脑版_教你降服“流氓头子”正确打开360安全卫士的姿势,还你电脑流畅体验...

最近老哥家的电脑经常出问题原因是熊孩子玩儿完电脑,最后总是一堆莫名其妙的流氓软件占据桌面的半壁江山然后恢复电脑流畅运行的任务,就交到我这个“懂电脑”的人手里。如此反复两次,脾气再好的人,也想拉着熊孩子打一顿。但是活儿…

Linux命令终端如何查询本机的内外网IP地址

文章目录查询本机外网 IP 地址查询本机内网 IP 地址查询本机外网 IP 地址 [roothtlwk0001host ~]# curl ifconfig.me # 太慢了,不行[roothtlwk0001host ~]# curl icanhazip.com 47.114.59.104[roothtlwk0001host ~]# curl ident.me # 太慢了,不行[rooth…

信封问题_装饰信封

信封问题有时 很多时候,我需要一个类实现通过使其他类的实例的接口。 听起来很奇怪? 让我给你看一个例子。 在Takes框架中有许多此类,它们的名称都都类似于*Wrap 。 不幸的是,这是一个方便的设计概念,在Java中看起来很…

java netty swap高_Netty 超时机制及心跳程序实现

本文介绍了 Netty 超时机制的原理,以及如何在连接闲置时发送一个心跳来维持连接。Netty 超时机制的介绍Netty 的超时类型 IdleState 主要分为:ALL_IDLE : 一段时间内没有数据接收或者发送READER_IDLE : 一段时间内没有数据接收WRITER_IDLE &a…