我们正处于设计具有多个模块的大型业务应用程序的早期阶段。要求之一是应用程序应该独立于数据库,它应该支持 SQL Server、Oracle、MySQL 和 DB2。
根据我在网上阅读的内容,数据库独立性是一个非常糟糕的主意:它会导致代码难以维护、数据库设计在所有受支持的 DBMS 中具有最不常见的特性、性能差和可扩展性差。我个人的直觉是,这个功能的复杂性,比任何其他功能都多,可能会成倍增加开发成本和时间。代码将是可怕的。
但我无法说服任何人忽略此功能。问题在于,关于这个问题的大多数数据都是经验数据,缺乏支持该案例的数字。如果有人可以分享有关该问题的任何数字支持的数据,我将不胜感激。
一种可能的设计选项是将实体框架用于数据库层,并为每个 DBMS 提供提供程序。我个人的感觉是,在没有任何 ORM 的情况下手动编写 SQL 语句将是“必须”的,因为您无法控制实体框架生成的 SQL,并且独立于数据库的场景将需要基于 DBMS 进行一些 SQL 调整代码是目标,并且我认为第三方实体框架提供商将有大量的错误,这些错误只会出现在应用程序将具有的复杂场景中。我想听听任何曾经有过使用实体框架进行数据库独立场景的经验的人的意见。
此外,团队讨论的一种可能性是在第一次迭代中支持一个 DBMS(例如 SQL Server),然后在后续迭代中添加对其他 DBMS 的支持。我认为由于我们需要一个具有最少通用特性的数据库设计,因此这种开发策略很糟糕,因为我们需要在开始为第一个 DBMS 编写代码之前了解所有数据库的所有特性。我也需要听听你关于这种可能性的消息。