热门标签 | 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



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 2019独角兽企业重金招聘Python工程师标准
    本文介绍了2019独角兽企业重金招聘Python工程师的标准。同时解释了Alpha、Beta、RC、GA、RTM、OEM、RVL、EVAL、RTL、α、β、λ等相关术语的含义和区别。 ... [详细]
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社区 版权所有