关于不可知的语言:代码生成器与ORM与存储过程

关于不可知的语言:代码生成器与ORM与存储过程

Code generators vs. ORMs vs. Stored Procedures

这些软件体系结构在哪些领域大放异彩?

哪些关键要求会提示您选择一个?

请假设您有可用的开发人员,他们可以执行良好的面向对象的代码以及良好的数据库开发。

另外,请避免进行圣战:)三种技术各有利弊,我对最适合使用哪种技术感兴趣。


这些工具中的每一个都提供不同的抽象层,以及不同的点以覆盖行为。这些是体系结构的选择,所有体系结构的选择都取决于技术,控制和组织之间的权衡,包括应用程序本身和将要部署该应用程序的环境。

  • 如果您正在处理DBA"统治"的文化,那么基于存储过程的体系结构将更易于部署。另一方面,很难对存储过程进行管理和版本控制。

  • 使用静态类型的语言时,代码生成器会发光,因为您可以在编译时而不是运行时捕获错误。

  • ORM是集成工具的理想选择,在集成工具中,您可能需要逐个安装地处理不同的RDBMS和架构。更改一张地图,您的应用程序就从在Oracle上与PeopleSoft一起使用转变为在SQL Server上与Microsoft Dynamics一起使用。

我已经看到了使用生成的代码与存储过程进行接口的应用程序,因为可以对存储过程进行调整,以解决代码生成器中的限制。

最终,唯一正确的答案取决于您要解决的问题和解决方案需要执行的环境。其他任何东西都在争辩" potato"的正确发音。


我加两分钱:

储存程序

  • 可以轻松优化
  • 抽象基本业务规则,增强数据完整性
  • 提供良好的安全模型(无需向正面的数据库用户授予读取或写入权限)
  • 当有许多应用程序访问相同数据时闪耀

ORM

  • 让您仅专注于领域,并拥有更"纯"的面向对象的开发方法
  • 当您的应用程序必须跨数据库兼容时发光
  • 当应用程序主要由行为而非数据驱动时发光

代码生成器

  • 为您提供与ORM相似的优势,不仅维护成本更高,而且可定制性更高。
  • 通常优于ORM,因为ORM倾向于将编译时错误换为运行时错误,通常应避免这种情况

我同意所有内容都有优点和缺点,并且很大程度上取决于您的体系结构。话虽如此,我尝试在有意义的地方使用ORM。已经有很多功能,通常它们可以防止SQL注入(此外,它还有助于避免重新发明轮子)。

请参阅该主题的其他这两篇文章(动态SQL与
存储过程与ORM)以获取更多信息

动态SQL与存储过程
哪个更好:即席查询还是存储过程?

ORM与存储过程
为什么NHibernate生成的参数化SQL与存储过程一样快?


ORM和代码生成器在某种程度上是领域,而存储过程则在另一侧。通常,在未开发项目中使用ORM和代码生成器会更容易,因为您可以定制数据库架构以匹配您创建的域模型。在遗留项目中使用它们要困难得多,因为一旦软件以"数据优先"的思维方式编写,就很难将其与域模型包装在一起。

话虽如此,所有这三种方法都有其价值。存储过程可能更易于优化,但是很容易将业务逻辑放入其中,而这些逻辑可能会在应用程序本身中重复出现。如果您的模式与ORM的概念匹配,则ORM可以很好地工作,但是如果不匹配,则可能很难自定义。代码生成器可能是一个很好的中间立场,因为它们提供了ORM的一些好处,但允许自定义生成的代码-但是,如果您习惯于更改生成的代码,那么就会遇到两个问题,因为您每次您重新生成它时,都必须对其进行更改。

没有一个真正的答案,但是我倾向于ORM方面,因为我认为以对象为先的思维方式进行思考更有意义。


您忘记了一个重要的选项,该选项应单独使用:混合数据映射框架,例如iBatis。

我对iBatis感到很满意,因为它让您的OO代码本质上保持OO,数据库本质上保持关系,并通过添加负责的第三个抽象(对象与关系之间的映射层)解决了阻抗不匹配的问题。映射两者,而不是试图强迫一种范例适合另一种范例。


存储过程

  • 优点:封装数据访问代码并且与应用程序无关
  • 缺点:可能是RDBMS特定的,并增加了开发时间

ORM

至少某些ORM允许映射到存储过程

  • 优点:提取数据访问代码,并允许以特定于域的方式编写实体对象
  • 缺点:可能的性能开销和有限的映射功能

代码生成

  • 优点:可用于生成基于存储过程的代码或ORM或两者混合
  • 缺点:除了了解生成的代码外,还必须维护代码生成器层

推荐阅读

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    c4d语言设置|c4d汉语设置

    c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

    电脑宣传语|电脑宣传语言

    电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你

    office语言设置|微软office语言设置

    office语言设置|微软office语言设置,,微软office语言设置一、首先点击桌面左下角“WIN键”。二、弹出选项内点击“所有程序”。三、接着点

    小米设置日语|小米设置日语语言

    小米设置日语|小米设置日语语言,,1. 小米设置日语语言MIUI系统文字目前只支持简体中文、繁体中文、英文、藏文和维吾尔文,不支持日文 2. 小

    易语言开发电脑系统|易语言电脑版

    易语言开发电脑系统|易语言电脑版,,1. 易语言电脑版首先编译——是将程序编译为exe文件,只能在有易语言的机子上运行,独立编译——是将程序