您的指导原则应该是“ 不要重复自己”:
在软件工程中,“不要重蹈覆辙”(DRY)是一种软件开发原则,旨在减少各种信息的重复,这在多层体系结构中特别有用。DRY原则被声明为“系统中的每条知识都必须具有单一,明确,权威的表示形式”。
ORM本质上是一个额外的层(或者,如果您愿意,可以是一层),位于您的应用程序和数据存储之间。您的约束应该放在一个位置,也只能放在一个位置,无论是ORM 还是数据存储,否则很快您将最终维护它们的不同版本。您真的不想这样做。
但是,实际上,大多数像样的ORM会根据数据模式自动生成大量模型。尽管仍然存在重复,但是由于每次重复的ORM代码都是按照相同的模式生成的,因此发生地狱的机会很小。没有重复的代码将是理想的选择,但是自动生成的约束是下一个优点。
同样,将约束放在一个地方并不一定意味着您应该将所有约束都放在同一个地方。有些,例如参照完整性约束,可能更适合于数据存储(但是如果您移至另一个数据存储,则可能会丢失),而有些(大多数是关于复杂业务逻辑的)更适合您的ORM。最好将所有苹果放在同一个篮子里,但是…
失败的
您提到ORM失败。这与您的问题绝对无关,您的应用程序应该将ORM和数据存储视为一个整体。如果失败,则失败,绕过ORM直接与数据存储通信不是一个好主意。
绕过ORM进行其他任何操作
也不是一个好主意。但是,它可能由于多种原因而发生:
引入ORM之前构建的应用程序的旧部分。
这是一个艰难的一个,正好和与我打交道的情况,现在,“维护地狱”的,因此我不断重复。您要么继续维护非ORM部分,要么重写它们以使用ORM。第二种选择一开始可能更有意义,但这是一个决定,它完全取决于应用程序的那些部分到底在做什么,以及从长远来看,完全重写的价值。
尝试在设计错误的2 * 10 ^ 8行MySQL表中更改键(无停机),您将了解我的来历。
绝对需要直接与数据存储通信的应用程序的非遗留部分:
甚至更棘手。ORM是精美的工具,它们几乎可以处理所有事情,但有时它们会妨碍您甚至是完全没有用。流行语(实际上是流行语)是对象关系阻抗不匹配,简单地说,从技术上讲,您的ORM不可能完成关系数据库所做的一切,而且对于它们所做的某些事情,这会严重影响性能。
注释
从数据完整性的角度来看,约束必须在数据库上,而应该在应用程序上。如果从Web和桌面应用程序,移动应用程序或Web服务访问您的应用程序怎么办?– 路易斯·达米姆(Luiz Damim)
这是在其中添加额外的层将非常有帮助的地方,并且如果我们谈论的是Web应用程序,则我将使用REST API。一个过于简单化的设计,因为这将是:
ORM将位于API和数据存储之间,并且API(包括它)后面的所有内容都将被视为来自各种应用程序的单个实体。