当前位置: 首页 > news >正文

网站设计 广州青岛微网站建设

网站设计 广州,青岛微网站建设,科学城做网站公司,成都商城网站建设在许多情况下#xff0c;具有功能组成的声明式解决方案提供了优于传统命令式代码的优越代码度量。 阅读本文并了解如何使用具有功能组成的声明性代码成为更好的程序员。 在本文中#xff0c;我们将仔细研究三个问题示例#xff0c;并研究用于解决这些问题的两种不同技术具有功能组成的声明式解决方案提供了优于传统命令式代码的优越代码度量。 阅读本文并了解如何使用具有功能组成的声明性代码成为更好的程序员。 在本文中我们将仔细研究三个问题示例并研究用于解决这些问题的两种不同技术命令式和声明式。 本文中的所有源代码都是开源的可以在以下位置获得 https://github.com/minborg/imperative-vs-declarative 。 最后我们还将看到如何将本文的知识应用于数据库应用程序领域。 我们将使用Speedment Stream作为ORM工具因为它提供了与数据库中的表视图和联接相对应的标准Java Streams并支持声明性构造。 从字面上看有无数个示例候选可用于代码度量评估。 问题范例 在本文中我选择了开发人员在工作期间可能会遇到的三个常见问题 SumArray 遍历数组并执行计算 分组 并行汇总值 休息 通过分页实现REST接口 解决技术 正如本文开头所暗示的我们将使用以下两种编码技术来解决上述问题 势在必行 一种命令式解决方案其中我们使用带有for循环和显式可变状态的传统代码样式。 陈述式 声明性解决方案其中我们组合了各种功能以形成可以解决问题的高阶复合功能通常使用 java.util.stream.Stream或其变体。 代码指标 然后想法是使用适用于SonarQube此处为SonarQube社区版版本7.7的不同解决方案的静态代码分析以便我们可以为问题/解决方案组合得出有用的标准化代码度量。 然后将这些指标进行比较。 在本文中我们将使用以下代码指标 LOC “ LOC”表示“代码行”是代码中非空行的数量。 陈述 是代码中语句的总数。 每条代码行上可能有零到多条语句。 圈复杂度 指示代码的复杂性是对通过程序源代码的线性独立路径数量的定量度量。 例如单个“ if”子句在代码中提供了两条单独的路径。 了这里的维基百科。 认知复杂性 SonarCube声称“认知复杂性不同于使用数学模型评估软件可维护性的实践。 它从Cyclomatic Complexity设定的先例开始但是使用人工判断来评估应如何计算结构并决定应向模型整体添加哪些内容。 结果它得出的方法复杂性得分比以前的模型更能使程序员对可维护性进行相对公平的评估。” 在SonarCube自己的页面上了解更多信息 。 通常最好构想一个解决方案其中这些指标较小而不是较大。 作为记录应该注意的是以下设计的任何解决方案只是解决任何给定问题的一种方法。 让我知道您是否有更好的解决方案并随时通过https://github.com/minborg/imperative-vs-declarative提交拉取请求。 遍历数组 我们从一个简单的开始。 该问题示例的对象是计算int数组中元素的总和并将结果返回为 long 。 以下接口定义了问题 public interface SumArray { long sum( int [] arr); } 当务之急 以下解决方案使用命令式技术实现SumArray问题 public class SumArrayImperative implements SumArray { Override public long sum( int [] arr) { long sum 0 ; for ( int i : arr) { sum i; } return sum; } } 声明式解决方案 这是使用声明性技术实现SumArray的解决方案 public class SumArrayDeclarative implements SumArray { Override public long sum( int [] arr) { return IntStream.of(arr) .mapToLong(i - i) .sum(); } } 注意 IntStream::sum只返回一个int因此我们必须应用中间操作mapToLong() 。 分析 SonarQube提供以下分析 下表显示了SumArray的代码指标通常越低越好 技术 LOC 陈述 圈复杂度 认知复杂性 势在必行 12 5 2 1个 功能性 11 2 2 0 这是它在图形中的外观通常越低越好 并行汇总值 该问题示例的对象是将“ Person对象分组到不同的存储桶中其中每个存储桶构成一个人的出生年份和一个工作的国家/地区的唯一组合。对于每个组应计算平均工资。 聚合应使用公共ForkJoin池并行计算。 不变的 Person类是这样的 势在必行 我们还定义了另一个称为YearCountry不变类该类将用作分组键 势在必行 定义了这两个类之后我们现在可以通过以下接口定义此问题示例 势在必行 当务之急 对GroupingBy示例问题实施命令式解决方案并非难事。 这是解决问题的一种解决方案 势在必行 声明式解决方案 这是一个使用声明性构造实现GroupingBy的解决方案 势在必行 在上面的代码中我使用了一些静态导入 Collectors类例如Collectors::groupingBy 。 这不会影响代码指标。 分析 SonarQube提供以下分析 下表显示了GroupingBy的代码指标越低越好 技术 LOC 陈述 圈复杂度 认知复杂性 势在必行 52 27 11 4 功能性 17 1个 1个 0 相应的图形如下所示通常越低越好 实施REST接口 在这个示例性问题中我们将为Person对象提供分页服务。 出现在页面上的人员必须满足某些任意条件并且必须按照给定的顺序进行排序。 该页面应作为不可修改的“个人”对象列表返回。 这是捕获问题的接口 势在必行 页面的大小在一个单独的实用程序类RestUtil 势在必行 当务之急 这是Rest接口的命令性实现 势在必行 声明式解决方案 下列类以声明的方式实现Rest接口 势在必行 分析 SonarQube提供以下分析 下表显示了Rest的代码指标通常越低越好 技术 LOC 陈述 圈复杂度 认知复杂性 势在必行 27 10 4 4 功能性 21 1个 1个 0 在这里相同的数字显示在图表中再次降低通常会更好 Java 11的改进 上面的示例是用Java 8编写的。使用Java 11我们可以使用LVTI局部变量类型推断来缩短声明性代码。 这会使我们的代码短一些但不会影响代码指标。 势在必行 与Java 8相比Java 11包含一些新的收集器。 例如 Collectors.toUnmodifiableList()可以使我们的声明式Rest解决方案更短 势在必行 同样这不会影响代码指标。 摘要 对我们的三个示例性问题的代码度量取平均会得出以下结果通常越低越好 考虑到本文的输入要求当我们从命令式构造到声明式构造时所有代码度量都有显着改进。 在数据库应用程序中使用声明性构造 为了从数据库应用程序中获得声明式构造的好处我们使用了Speedment Stream 。 Speedment Stream是基于Stream的Java ORM工具可以将任何数据库表/视图/联接转换为Java流从而使您可以在数据库应用程序中运用声明性技能。 您的数据库应用程序代码将变得更好。 实际上针对数据库的具有Speedment和Spring Boot的分页REST解决方案可能表示如下 势在必行 Speedment提供ManagerPerson persons 并构成数据库表“ Person”的句柄并且可以通过Spring AutoWired进行管理。 结论 选择声明式而不是命令式解决方案可以大大降低通用代码的复杂性并可以提供许多好处包括更快的编码更好的代码质量提高的可读性更少的测试减少的维护成本等等。 为了从数据库应用程序中的声明性构造中受益Speedment Stream是一种可以直接从数据库提供标准Java Streams的工具。 如今对于任何当代的Java开发人员来说必须掌握声明性构造和功能组成。 资源资源 文章源代码 https : //github.com/minborg/imperative-vs-declarative SonarQube https //www.sonarqube.org/ Speedment Stream https //speedment.com/stream/ Speedment初始化程序 https ://www.speedment.com/initializer/ 翻译自: https://www.javacodegeeks.com/2019/08/declarative-coding-makes-better-programmer.html
http://www.pierceye.com/news/10786/

相关文章:

  • 网站建设与管理专业实训室淘宝网网站设计分析
  • 网站建设指导方案wordpress. 评论插件
  • 河南企业网站营销设计健康证图片在线制作
  • 网站开发后台技术公司营业执照怎么查询
  • 网站建设中html5wordpress 搭建论坛
  • 宁波做网站的哪个好个人怎么注册小微企业
  • 长沙建设网站用xp做网站是否先搭建iis
  • 免备案网站制作重庆网站建设公司的网站
  • 企业网站做优化网站调试
  • 搭建一个服务器买域名做网站申请邮箱免费注册
  • 英文网站建设哪家强商城网站建站方案
  • 怎么做美食的网站做网站怎么能在百度搜索到
  • 二建转注辽宁建设主管部门网站学网站开发需要学那些
  • 在线手机动画网站模板下载安装平面设计图案
  • 虚拟主机安装网站建网站咨询
  • 淳安网站建设制作wordpress手机版主题模板下载失败
  • 怎么优化网站关键词排名源码网站取名
  • 有限公司怎么纳税网站做seo外链
  • 沧县做网站网站防黑客入侵做相关防御
  • 屯济宁做网站公司河南省城乡住房建设厅网站首页
  • seo 网站描述长度域名查询官网
  • 长沙门户网站建设做影视网站被告怎么办
  • 深圳网站开发设计公司排名手表网站上没有价格
  • iis添加网站ip地址宣传片制作公司业务
  • 湖州北京网站建设网站建设云尚网络
  • 做个网站要多少钱 一般电商的网站
  • sem网站推广怎么做淘宝客网站如何做推广方案
  • 南山做网站教程洛阳青峰网络科技有限公司
  • 网站注销备案重庆网站建设只选承越
  • 杭州企业营销网站建设公司中文静态网站下载