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

净资产滚动率

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,一经查实,立即删除!

相关文章

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兼容性测试经验都在这...

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

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

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

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

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

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

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

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

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

信封问题_装饰信封

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

etf基金代码大全_银行ETF最新规模首超28亿元再创历史新高,近4个月资金净流入超12亿元...

2019年即将收官,A股大盘在12月份总体有了明显的回暖,拥有低估值优势的银行板块随之明显反弹。受此利好行情催化,资金持续涌入银行ETF,其基金份额、基金规模双双连创历史新高。据上交所12月26日公布的最新数据,银行ETF&…

java判断时间是否在时间段内_具有C语言基础,利用半年时间学习Java是否够用

首先,对于具有一定C语言基础的同学来说,利用半年的时间来学习Java会有一个比较系统的学习过程,通常也能够达到实习程序员,或者是助理程序员的水平,然后在技术团队中实践一段时间之后,从事专业开发岗位应该是…

二维动画作品_「咻动画」二维动画制作中角色造型的设计要点

关于二维动画可能就算不是动画行业的小伙伴们都多多少少都有所了解,近年来其在宣传片制作上面越来越受用。不少企业抛开传统保守的宣传片表现形式转而尝试动画制作宣传片,我们都知道在动画制作从脚本策划到输出成片这个过程中是一个很复杂的制作流程&…

c# redis 如何设置过期时间_Redis 过期时间与内存管理

http://www.redis.cn/commands/expire.htmlhttp://www.redis.cn/topics/lru-cache.html内存管理 当 Redis 作为缓存使用时(此时缓存仅作为热点数据提高服务的访问性能),需要考虑内存的限制,以及如何随着业务的增长,仅保…

大端字节序码流中取出2字节_产生字节码

大端字节序码流中取出2字节在这篇文章中,我们将看到如何为我们的语言生成字节码。 到目前为止,我们已经看到了如何构建一种语言来表达我们想要的东西,如何验证该语言,如何为该语言构建编辑器,但实际上我们还不能运行代…

python写520_用Python做一个520表白神器,值得收藏

本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用。先来看一下具体的效果。运行程序。用Python做一个520表白神器,值得收藏点击「选择图片」 选择JPG/JPGE/PNG三种中…

为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程

老早之前的计算机只有一个处理器,而 一个处理器在同一时刻只能处理一条指令 ,换句话说,我们的代码需要一行一行的按顺序被计算机执行,计算机只能把一个程序完整的执行完,然后再执行第二个程序。所以计算机专业的同学们…

不同坐标系下角速度_最伟大的数学发明,坐标系的诞生,是人类史上的方向盘...

【想要了解更多精彩文章、视频,欢迎关注创鹏科学堂】人生最大的意义,莫过于过得更方便;数学最大的意义,莫过于帮助人类过得更方便。几千年来,自从数学出现之后,它就一直以人类生活为导向,以宇宙…

php中的ol标签,html5中ol标签的用法详解

这篇文章主要介绍了详解HTML5中ol标签的用法,是HTML5入门学习中的基础知识,需要的朋友可以参考下定义和用法标签定义有序列表。HTML 4.01 与 HTML 5 之间的差异在 HTML 4.01 中,不赞成使用 "start" 属性,在 HTML 5 中是允许的。在 HTML 4.01 中…

portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

portlet介绍 由于世界仍在Java的掌控之中,因此我们经常定义所谓的基于组件的平台 。 我在2000年拥有OpenUSS(开放大学支持系统)的经验。 当时我有一个想法,就是开发一个可以使用组件体系结构和J2EE技术​​( OpenUSS C…