我曾经在模型本身中编写数据访问功能。现在我想将数据访问与业务逻辑分开。我使用codeigniter作为框架。 似乎这样做的一种方法是使用ORM,但我猜它会有性能损失。
有没有一般的最佳做法?
答案 0 :(得分:5)
查看POEAA的数据源架构模式:
CodeIgniter声称使用ActiveRecord,but it doesnt。它更像是一个基本的QueryObject。要真正将DAO与Domain对象分开,必须使用DataMapper。根据映射需求的复杂程度,您可以自己构建一个或使用ORM。无论如何,PHP World中的大多数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。我从未使用它,也无法说出任何相关信息。它只是在快速谷歌之后出现,所以我想我在这里添加它。