ORM 是一种讨厌的反模式】的更多相关文章

本文由码农网 – 孙腾浩原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! (“Too Long; Didn’t Read.”太长不想看,可以看这段摘要 )ORM是一种讨厌的反模式,违背了所有面向对象的原则.将对象分隔开并放入被动的数据包中.ORM没有理由存在任何应用中,无论是小的网络应用还是涉及增删改查上千张表的企业系统.用什么来替代它呢?SQL对象(SQL-speaking objects). ORM如何工作 Object-relational mapping(ORM)是一种链…
第一章 引言 GoF 所著的的<设计模式>,在软件领域引入了"设计模式"(design pattern)的概念. 而后,Andrew Koenig 在 1995 年造了 反模式(anti-pattern) (又称反面模式)这个词,灵感来自于 GoF 所著的的<设计模式>. 反模式指的是在实践中经常出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法.它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来. 所以,反模式…
原文地址:http://www.nowamagic.net/librarys/veda/detail/2217 上周我在在上讨论了ORM,在那以后有人希望我澄清我的意思.事实上,我曾经写文章讨论过ORM, 但那是在一场关于SQL的大讨论的上下文中,我不应该把这将两件事情混为一谈. 因此,在本文中我将关注ORM本身.同时,我尽力保持简略,因为从我的SQL文章中显而易见的是:人们倾向于一旦读到让他们发怒的内容就会离开(同时留下一句留言,而不论他们所关注的东西是否在后面会讨论到). 什么是反模式? 我…
目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别的内容,而这些被插入的内容以你不希望的方式修改了查询语法时,SQL注入就成功了. 传统的SQL注入案例中,所插入的内容首先完成了一个查询,然后再执行第二个完整的查询逻辑比如:@bugId的值是 1234;Delete from Bugs,最后的SQL语句变成如下格式: Select * from B…
Python是时下最热门的编程语言之一了.简洁而富有表达力的语法,两三行代码往往就能解决十来行C代码才能解决的问题:丰富的标准库和第三方库,大大节约了开发时间,使它成为那些对性能没有严苛要求的开发任务的首选:强大而活跃的社区,齐全的文档,也使很多编程的初学者选择了它作为自己的第一门编程语言.甚至有国外的报道称,Python已经成为了美国顶尖大学里最受欢迎的编程入门教学语言. 要学好一门编程语言实属不易,在初学阶段,就纠正一些错误的做法,对今后的深入学习至关重要.有一位叫Constantine L…
摘要:本文介绍了在Apache Hadoop上运行应用程序的最佳实践,实际上,我们引入了网格模式(Grid Pattern)的概念,它和设计模式类似,它代表运行在网格(Grid)上的应用程序的可复用解决方案. Apache Hadoop是一个用于构建大规模,共享存储和计算基础设施的软件框架,Hadoop集群经常用于各种研究和开发项目,如Yahoo!,eBay,Facebook,Twitter等互联网公司就大量使用了Hadoop,并在核心业务系统中扮演中关键角色,因此正确部署Hadoop集群是确保…
一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FROM Person WHERE Id = $Id 我们期望$Id是一个整型,因此当数据库接收到这个请求时,$Id的值就是查询语句的一部分. SQL动态查询是有效利用数据库很自然的方法.当你使用程序内的变量来指定如何进行查询时,就是将SQL作为连接程序和数据库的桥梁.程序和数据库之间通过这种方式进行“…
一.目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂. 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么?我要为这条数据的丢失负责吗? 二.反模式:填充角落 大多数人对于断档的第一反应就是想要填补其中的空缺.对此,可能有两种做法: 1.不按照顺序分配编号 你可能想要在插入新行时,通过遍历表,将找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键机制.随着你不断地插入新行,断档就被填补起来了…
什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. 这包含了如何设计数据库的表.字段和关系. (2)物理数据库设计反模式 在确定了需要存储哪些数据之后,使用你所知的RDBMS关系型数据库技术特性尽可能高效地实现数据库管理. 这包含了定义表和索引,以及选择数据类型.也需要是要SQL的“数据定义语言”,比如Create Table语句. (3)查询反模…
目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外键建立的索引会影响性能: 4.当前使用的数据库不支持外键.比如MySQL的MyISAM存储引擎,或者比SQLite3.6.19早的版本: 5.定义外键的语法并不简单,还需要查阅. 反模式:无视约束,即不使用约束 省略外键约束能使得数据库设计更加简单.灵活,或者执行更加高效,但是你不得不在其他方面付出…