2011-02-03 70 views
6

我对软件开发的世界比较陌生。我目前正在进行一个相当大的项目,这是一个体面的OO代码 - 主要遵循域驱动设计原则。然而,在理论上这听起来很好,但实际上整个对象关系阻抗都很糟糕,这意味着只使用ORM层,系统的某些部分非常慢,除非我们编写优化的SQL查询来覆盖这些情况。此外,有时我们似乎被卡住,试图看看我们是否应该基于SQL的性能与面向对象的原则对域进行建模。没有ORM的域丰富的应用程序

这让我问这个问题 - 这是大多数应用程序的构建方式吗?意义 - 是的,面向对象很好,但是我发现很难相信,与这个对象关系不匹配相关的所有问题,这是构建应用程序的最佳方式吗?我能想到的另一种方法是抛弃ORM,只进行域建模,直接用手直接编写原生SQL查询。我想知道是否实际上有足够大小的软件系统以这种方式构建。

对不起,如果我听起来不错 - 但我是新的,想知道还有什么其他的方法。

回答

2

可以同时使用两者。老实说,对于简单的单个记录修改和视图(包括相关实体的显示),ORM生成的代码几乎与我手工编写的代码相同。所以好处当然是我不要必须写它。另外,小的模式修改可以优雅地处理。

对于其他一切,普通的SQL是王道。

我就是那个可以产生的任何代码,产生,只要它不会产生一个明确不合版本的意见。我认为这是我的关键点:大量的应用程序数据库代码可以通过ORM进行处理,并且仍然可以像数据库专家编写的手工编写的sql代码一样执行。

3

不要道歉承认明显。那些经验丰富的人往往完全没有意识到你有什么:ORM是糟糕的工程,正是你指定的原因。

但我不想陷入咆哮。反对使用嵌入式SQL范围的观点来自风格,“我不希望在我的代码中出现垃圾”,这个样式,“SQL很丑。”但它的工作原理,速度很快,而且是很好的工程。

+0

曾与ORM的和普通的SQL + JDBC/ibatis一起工作,我仍然喜欢写我的查询或甚至更好,让我的DBA优化我的查询,这些参数听起来更像是借口不学习(propper)SQL – Harima555 2011-02-03 18:40:26

+1

实际上使用ORM并不意味着你无法控制生成的SQL,或者你不必拥有一个好的数据库设计。此外,如果您需要特殊技能来编写SQL查询,通常意味着您的数据库模式已损坏。模式应该使得最频繁的查询易于编写(并且可以快速执行)。当我使用ORM时,我创建了我的模式,使得由我的ORM生成的查询简单快捷。这不是火箭科学。 – 2011-02-03 20:00:15