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

汕头网站建设推广成都优化官网推广

汕头网站建设推广,成都优化官网推广,男女做暖网站是什么样子的,网络营销市场java 示例这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”#xff0c;用于处理文档。 在上一部分中#xff0c;我从一些原始代码开始#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 … java 示例 这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”用于处理文档。 在上一部分中我从一些原始代码开始并应用了一些重构来描述“什么”而不是“如何”。 为了帮助代码向前发展我们需要先讲一个故事 。 这就是这个部分的来历。 如果您是第一次来这里最好从头开始阅读。 它有助于了解我们从何处开始以及如何在整个系列中继续前进。 这些都是这些部分 第1部分–从命令式到声明式 第2部分–讲故事 第3部分–不要使用异常来控制流程 第4部分–首选不变性 第5部分–将I / O移到外部 第6部分–用作参数 第7部分–将失败也视为数据 第8部分–更多纯函数 我将在每篇文章发表时更新链接。 如果您通过内容联合组织来阅读本文请查看我博客上的原始文章。 每次代码也被推送到这个GitHub项目 。 作为参考我们现在以以下代码为起点 class FeedHandler {Webservice webserviceDocumentDb documentDbvoid handle(ListDoc changes) {changes.findAll { doc - doc.type important }.each { doc -try {def resource webservice.create(doc)doc.apiId resource.iddoc.status processed} catch (e) {doc.status faileddoc.error e.message}documentDb.update(doc)}} }大声读出 当我最初开始使用Spock作为测试框架时由于它是多年前Grails默认提供的因此它的众多功能和易用性给我留下了深刻的印象至今仍是。 你知道什么是假人存根和间谍吧 Mockito拥有它们Powermock拥有它们以及基本上所有其他严肃的单元测试框架。 Mock的概念并不难掌握您可以在此处阅读全部内容但是Spock具有一种特殊的方式来描述其与预期的模拟交互。 关于“基于交互的测试”的一章非常出色它解释了如何使用代码示例来记录这些交互。 “模拟”子章开头为 模拟是描述强制规范下的对象与其协作者之间的交互的行为。 这是一个例子 def should send messages to all subscribers() {when:publisher.send(hello)then:1 * subscriber.receive(hello)1 * subscriber2.receive(hello) } 如果您不熟悉SpockGroovy或仅仅具有上述写作风格请不要担心 Spock上面的文档的作者也认识到并不是每个人都会立即理解这里发生的事情。 他们会提供一些建议并继续提供文档 大声读出 “当发布者发送“ hello”消息时两个订户都应该只收到一次该消息。” 我对“大声朗读”的重视是我的因为我认为这很重要。 这里不讨论Spock的更多细节而是我自己在日常编码中要牢记的建议本身。 当我编写一段代码时我可以大声读出吗 当其他人读取我的代码时他/她可以大声读出吗 这里的“大声” 与音量无关而是可以用一种简洁易懂的方式描述“这里正在发生什么”。 这使得对代码的推理变得容易。 高级别与低级别 请考虑以下情形 在不知名的城市中开车游览了几个小时以找到剧院后汽车导航系统出现故障后您最终决定停下来询问方向。 您在行人附近停下。 您 先生您碰巧知道如何从这里到达剧院 行人 当然这很容易。 开始了 检查窗户以确保您具有良好的可见性。 检查后视镜以确保它们正确对齐从而为您提供正确的道路视野。 调整座椅使双脚舒适地到达两个踏板。 关闭视窗。 重置转向信号灯。 开始驾驶前请松开驻车制动器。 啊我看你有自动档。 请把变速杆放在“驱动器”中。 慢慢踩刹车并监控仪表盘仪表。 继续前进提高速度监控车速表将RPM保持在2000附近 大约120码后在开始转向左车道之前请先与您的方向灯指示至少两秒钟。 缓慢将汽车移至另一车道。 稍微将您的手放在方向盘上以改变车道。 车轮只需要很小的移动即可 因为大多数现代汽车都装有动力转向系统。 更改车道大约需要一到三秒钟。 减少一点您做得太快了 再也没有你做得太慢了。 再走X步… 祝好运 或者考虑对话将像这样的替代宇宙 您 先生您是否会知道如何从这里到达剧院 行人 当然这很容易。 开始了 左转过桥。 在你的右边。 祝好运 最后一种情况是轻而易举明确指示要做什么和去哪里 但是第一种情况是细节缠身 -有关驾驶汽车本身的低级细节 -即使我们不希望在现实生活中得到这样的指导我们仍然会编写这样的软件。 告诉我一些正确的内容。 如果我需要具体信息我会要求它。 顺便说一句wikihow.com如何驾驶汽车请捐赠上述说明中的一些。如果您确实需要学习驾驶它有很多资源 在正确的级别上讲内容不仅意味着使用正确命名的类和方法而且还意味着在其中使用正确的抽象类型 。 让我们再次看一下我们的代码 class FeedHandler {Webservice webserviceDocumentDb documentDbvoid handle(ListDoc changes) {changes.findAll { doc - doc.type important }.each { doc -try {def resource webservice.create(doc)doc.apiId resource.iddoc.status processed} catch (e) {doc.status faileddoc.error e.message}documentDb.update(doc)}} }故事 我们如何在代码中结合“大声读出”和“高级还是低级” 我们的单handle方法当前显示为什么样 查找type -property等于字符串important所有文档。 呼叫create的webservice与文档返回的资源。 如果我们有资源请将资源的id分配给文档的apiId属性。 将文档的status属性设置为字符串processed 。 如果发生异常请将文档的status属性设置为字符串failed 。 将文档的status属性设置为来自异常的message 。 最后使用documentDb在documentDb上调用update 。 基本上这只是重复代码语句 什么故事我想告诉取而代之的是以下情况 通过Web服务“创建资源”来处理“重要”文档。 每次成功时将两者关联在一起并“将文档标记为已处理”否则将其标记为“失败”。 读得很好你不觉得吗 实际上我们可以通过在IDE中使用几种“提取方法”重构并为提取的方法选择一些好的名称来实现这一目标。 上面故事中用双引号引起的短语是我想在高层看到的重要部分。 “重要” 我为什么要关心文档使用什么属性来确定其重要性 现在是字符串important 它表示“嘿我很重要” 但是如果条件变得更加复杂怎么办 将doc.type important提取到其自身的方法isImportant 。 changes.findAll { doc - isImportant(doc) }// ...private boolean isImportant(doc) {doc.type important}“创造资源” 为什么我在这里关心如何在Web服务中调用什么方法 我只想创建一个资源。 将与Web服务的所有处理都提取到它自己的方法称为createResource 。 def resource createResource(doc)// ...private Resource createResource(doc) {webservice.create(doc)}“更新为已处理” 提取将资源/文档/将状态设置为其自己的方法称为updateToProcessed 。 updateToProcessed(doc, resource)// ...private void updateToProcessed(doc, resource) {doc.apiId resource.iddoc.status processed}“更新失败” 不在乎细节。 提取到updateToFailed 。 updateToFailed(doc, e)// ...private void updateToFailed(doc, e) {doc.status faileddoc.error e.message} 似乎我们最后只剩下了documentDb.update(doc) 。 这是在数据库中存储已处理/失败文档的一部分我已经在最高级别上进行了描述。 我将其放在每个刚刚创建的updateTo*方法中-一个较低的级别。 private void updateToProcessed(doc, resource) {doc.apiId resource.iddoc.status processeddocumentDb.update(doc)}private void updateToFailed(doc, e) {doc.status faileddoc.error e.messagedocumentDb.update(doc)} 那么提取出细节之后有什么变化 void handle(ListDoc changes) {changes.findAll { doc - isImportant(doc) }.each { doc -try {def resource createResource(doc)updateToProcessed(doc, resource)} catch (e) {updateToFailed(doc, e)}}} 任何人例如同事您未来的自我都会“一口气”地读一读将了解30,000英尺的行程。 如果您需要任何这些步骤的详细信息只需深入了解该方法即可。 能够写声明式的东西本系列的前一部分并在正确的水平上讲故事本部分还将有助于在第3部分及以后的部分中更轻松地进行将来的更改。 现在就这样 作为参考这是重构代码的完整版本。 class FeedHandler {Webservice webserviceDocumentDb documentDbvoid handle(ListDoc changes) {changes.findAll { doc - isImportant(doc) }.each { doc -try {def resource createResource(doc)updateToProcessed(doc, resource)} catch (e) {updateToFailed(doc, e)}}}private Resource createResource(doc) {webservice.create(doc)}private boolean isImportant(doc) {doc.type important}private void updateToProcessed(doc, resource) {doc.apiId resource.iddoc.status processeddocumentDb.update(doc)}private void updateToFailed(doc, e) {doc.status faileddoc.error e.messagedocumentDb.update(doc)}}翻译自: https://www.javacodegeeks.com/2017/11/functional-java-example-part-2-tell-story.htmljava 示例
http://www.pierceye.com/news/28370/

相关文章:

  • 百度站长电脑版品牌创意网站建设徕卡e
  • 建站容易吗html编辑器程序
  • 网站模板免费下载php网络规划设计师教程 下载
  • 网站后角色管理权限怎么设置?网页设计教程dt
  • 学习网站建设课程地方行业网站
  • 高水平的锦州网站建设龙之向导官网
  • 青岛网站制作案例长治网络推广公司
  • 网站建设功能模块重庆建筑网
  • 代做ppt网站好dw做旅游网站模板下载
  • c 网站建设综合报告合肥商城网站开发
  • ui设计做兼职的网站有哪些做网站分为几种
  • 凯里网站建设新手建网站
  • 软件行业 网站建设 模块建网站 备案
  • 华强北网站建设公司有产品做推广 选哪个 网站
  • 网站建设岗位工作职责楼网络规划设计方案
  • 精品课程网站建设项目验收单微信朋友圈投放广告怎么收费
  • 企业网站如何宣传wordpress 批量替换
  • 网站建设平台的比较手机主题wordpress
  • 开发网站网络公司怎么用wix做网站
  • 网站建设需要多长时间seo网站优化
  • 有关网站建设新闻资讯上海自贸区注册企业优惠政策
  • 网站策划的具体内容是什么有什么网站可以接单做兼职的
  • 广州做包包的网站好百度上怎么发布作品
  • 邦泽网站建设semi是什么意思
  • 服装商店的网站建设要求网站想上线怎么做
  • 百度怎样建设网站东莞整合网站建设推广
  • 网站的设计与实现苏州本地网站有哪些
  • 公众号如何做网站wordpress创建小工具栏
  • 公司多个门户是做二级域名还是做多个网站造价信息网官网
  • 小米官方网站开发版wordpress好用的插件