热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

概念压缩和更深层次的模式

Basecamp和Ruby-on-Rails的DHH撰写的这篇文章引发了网络上的大量讨论,也引起了我的一些思考。作者认为,各种存储抽象现在已经足够强大&

Basecamp和Ruby-on-Rails的@DHH撰写的这篇文章引发了网络上的大量讨论,也引起了我的一些思考。 作者认为,各种存储抽象现在已经足够强大,以至于许多数据库支持的应用程序开发人员都可以成功而又有效,而无需了解SQL语法的细节或存储系统的工作原理。 他给出了一个具体的示例,该示例可以为数百万人提供服务,但在整个代码库中都没有完全形成的SQL语句,而是依靠Rails公开的“ Active Record”抽象。 Active Record是对象关系映射器的一个示例,它使程序员可以使用其本机编程语言处理对象,然后将其(相对)透明地持久存储到基础存储系统中。

他将其用作“概念压缩”的示例-程序员不再需要了解某些特定技术的混乱细节即可有效地利用其提供的功能。 建立这些更强大(甚至更简单)的抽象的结果是,程序员可以提高生产效率,并且可以向更广泛的开发人员开放一般的编程。 不再需要有效的知识和秘诀来有效完成工作。 这为应用程序领域的专家提供了编程机会,而不仅仅是编程专家。

我花了一段时间才能整理出为什么我觉得这篇文章如此令人讨厌。

创建包含更基本功能的层,组件或框架的整个过程是一种非常常见的模式。 用户界面和存储框架是一些最常见的示例,但是它们确实存在于您在软件中看到的任何位置。 随着时间的流逝出现的挑战也很普遍,这就是使这种感觉不像他在博客文章中所宣称的突破,而更像是一个持续的周期。

低级系统通常会提供很大的灵活性-灵活性带来了该基础技术用户的复杂性和挑战性选择。 通过认识到许多应用程序遵循通用模式,可以简化分层框架。 通过做出选择,该框架简化了与该模式匹配的应用程序类的开发。

在最丰富的示例中,简化框架创建了自己的附加组件生态系统。 例如,在NodeJS世界中,Express框架提供了一种启动和运行Web应用程序的简便方法,并且还定义了一种插件中间件机制,该机制允许以非常简单的方式合并许多附加功能。

Microsoft基础类(作为一个老化的例子)在基础Windows UI组件上提供了一个C ++的面向对象的习惯用法。 从功能上讲,它使构建基于C ++的应用程序变得更加容易,因为它允许这些C ++惯用语与Windows环境的更基本的API和消息传递完美地结合在一起。

任何分层方法都面临着各种各样的挑战-我在Leaky by Design中谈到了这些挑战。

首先是分层不完整。 尽管该层试图简化,但不可避免地会泄漏一些潜在的复杂性。 程序员被告知他们正在处理一个简单的系统,但是随后出现了问题,这些问题来自底层系统的约束和限制(或者相反,是灵活性)。 如果开发人员尚未建立关于这些潜在特征是什么的思维模型,则他们将很难识别它们所带来的漏洞和挑战的根源,以及随着应用程序的日益复杂而可能找到的解决方案。

或者,分层太完整。 该应用程序面临挑战,因为较低级别系统中可用的功能被较高级别框架所做的假设所掩盖或交互差。 因此,即使应该有某种解决方案,该解决方案也会被该层阻止,并且应用程序需要进行翻筋斗来解决这些问题。 这些挑战通常与性能有关。 由于性能随着底层硬件环境的快速发展而永远发生变化,因此一代人无法接受或过于局限的简化对于另一代人来说是可以接受的。 使用“ X”太疯狂了! 直到不是那样,而是因为某些基础技术已经改变,并不是因为原始评估是错误的。

另一个分层问题是该层变得功能过度。 这实际上是组织和技术问题的结合。 该层本身就成为创新的场所,而投入了成功的团队或社区也可以成为这一层。 因此,实际上应该内置到最低层的功能将作为分层组件的一部分而构建。 随着时间的流逝,由于没有建立新的功能和要求,也不通过系统垂直传播新的功能和要求,因此将组织/所有权问题转变为技术问题。 使整个系统看起来像巴洛克式的和临时的。 这转化为难以接近且难以学习。

我在这篇文章的前提下面临的另一个挑战是,“压缩”最有趣和最重要的部分通常不是删除的内容(在这种情况下,有关SQL语法和管理的许多细节)而是剩下的。 对于任何存储系统而言,始终重要的是局部性。

无需查看任何代码,我就能保证在BaseCamp的设计及其对Active Record抽象的深入使用中加深对本地性的了解,以及对提供良好性能的重要性。 实际上,几乎每个非平凡的应用程序设计中的挑战都是试图平衡局部性和复杂性。

标准化的原理深深地体现在数据库模式设计中。 但是这种直觉对于最环保的程序员(或文件文员)来说是显而易见的。 不要两次存储相同的信息。 挑战在于标准化几乎是局部性的对立面。 导致将其存储两次的原因是,您需要在多个地方(通常是客户列表和发票)使用它。 因此,开发人员将规范化并添加“业务逻辑”(而不是模式设计)以确保语义一致性。 随着时间的流逝,业务逻辑层变得越来越复杂,保持一致性变得越来越困难。

这些问题无法通过更简单的存储层解决。 不管程序员是否理解SELECT语句的语法或如何定义数据库视图,他们都可以更好地理解局部性。 这些技术有更深层次的模式,这些模式不会消失。

From: https://hackernoon.com/conceptual-compress-and-deeper-patterns-6a12e2a7d5c8



推荐阅读
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • Node.js详细安装及环境配置
    1、下载安装根据自己电脑系统及位数选择,我这里选择windows64位.msi格式安装包(官网:https:odejs.orgzh-cndownload).msi和.zip格式区别 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
author-avatar
落单鸟人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有