0

我正在创建一个框架 MVC 来构建我的应用程序。在我的应用程序中,我需要使用几个 DBMS,我需要为此做好准备。

我正在考虑使用 Active Record 模式,它具有关联的“连接”(抽象)。Active Record 不知道要使用哪个 DBMS。所以,我使用工厂方法来抽象使用了哪个 DBMS。

我将如何构建各种查询(CRUD)?因为每个 DBMS 都需要特定的查询。

我认为创建可以解决的各种类“QueryBuilder”(每个 DBMS 一个类)。

怎么想?

4

2 回答 2

0

要解决此问题,您可以使用 DAO 层模式。此模式对客户端隐藏了数据库特定的详细信息。您可以为您的 DAO 将实现的 CRUD 操作定义接口。

这样,即使你的 DB 将来发生变化,DAO 层的客户端也不必担心这些变化。

有关此模式的更多详细信息,请参阅下面的 wiki 页面。

http://en.wikipedia.org/wiki/Data_access_object

于 2012-09-04T17:09:18.390 回答
0

我假设目的是将各种 ActiveRecord 对象与数据库之间的 SQL 语法差异隔离开来?

您没有通过查询 bulder 的设计定义您的确切意图,但我已经使用 , 等方法完成过一次AddSelection(colName)AddCriteria(colName, ComparisonEnum, value)如果这是您的方法,那么如果您的查询足够小/简单,那么查询构建器就可以了. 但是,一旦您需要构建复杂连接或内部子查询的能力,那么您可能会用这种方法碰壁。

如果您需要处理任意困难的查询,那么另一种选择是创建转换器或翻译器。如果您要定义规范查询格式,那么每个特定于 DBMS 的转换都知道如何从该规范格式转换为特定于 DB 的语法。不过,您确实需要此功能才能使其值得付出努力。

最后,您的另一个方法是为每个 DB 子类化 ActiveRecord。因此,如果您有一个 EmployeeRecord 类,您可以使用 OracleEmployeeRecord、MySqlEmployeeRecord、MsSqlServerEmployeeRecord 等对其进行子类化。然后使用抽象工厂创建适当的 ActiveRecord 对象。

于 2012-09-05T12:18:52.317 回答