【发布时间】:2011-05-02 20:00:40
【问题描述】:
我曾经在模型本身中编写数据访问功能。现在我想将数据访问与业务逻辑分开。我正在使用 codeigniter 作为框架。 似乎一种方法是使用 ORM,但我猜它会降低性能。
是否有任何一般的最佳做法?
【问题讨论】:
标签: php codeigniter data-access-layer
我曾经在模型本身中编写数据访问功能。现在我想将数据访问与业务逻辑分开。我正在使用 codeigniter 作为框架。 似乎一种方法是使用 ORM,但我猜它会降低性能。
是否有任何一般的最佳做法?
【问题讨论】:
标签: php codeigniter data-access-layer
看看POEAA的数据源架构模式:
CodeIgniter 声称使用 ActiveRecord,but it doesnt。它更像是一个基本的QueryObject。要真正将 DAO 与域对象分开,您必须使用 DataMapper。根据您映射需求的复杂性,您可以自己构建一个或使用ORM。具有讽刺意味的是,PHP 世界中的大多数 ORM 都是基于 ActiveRecord,which is pretty ill-suited for ORM。 Doctrine 2 是我所知道的唯一使用 DataMapper 方法的。
ORM 总是会带来性能损失(而且可能很严重)。但是,您不应该仅仅因为这个而排除 ORM。在高 impedance mismatch 场景中手工制作一个高效的 DataMapper 可能是乏味和困难的工作。同样,请参阅 POEAA 以获取常见对象关系模式的列表。
似乎有一个DataMapper implementation for CodeIgniter with Overzealous DMZ。我从来没有使用过它,也不能说什么。它只是在快速谷歌后出现的,所以我想我在这里添加它。
【讨论】: