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



推荐阅读
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
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社区 版权所有