我使用CodeIgniter修修补补和所遇到的活动记录的第一次。 起初,我被解雇它作为东西的人谁真的不知道该怎么写SQL。 我现在,我的分析是有缺陷的和活动记录是相当突出的,尤其是在Rails的实现。
但不要主动纪录保持什么样的目的? 它是抽象从不同的RDBMS个性了。 如果是这样我认为这不正是SQL的意思做。 另外什么是最好的做法,我应该使用这些?
提前致谢
我使用CodeIgniter修修补补和所遇到的活动记录的第一次。 起初,我被解雇它作为东西的人谁真的不知道该怎么写SQL。 我现在,我的分析是有缺陷的和活动记录是相当突出的,尤其是在Rails的实现。
但不要主动纪录保持什么样的目的? 它是抽象从不同的RDBMS个性了。 如果是这样我认为这不正是SQL的意思做。 另外什么是最好的做法,我应该使用这些?
提前致谢
在“活动记录模式”正在成为大多数编程框架的核心部分。 它使简单的CRUD(创建,更新,读取,删除)任务,更快地实现。 例如,而不是写了许多SQLS插入,更新和删除许多常见和简单的数据对象,它可以让你简单地将值分配给数据对象和运行一个命令如$对象 - >保存(),在SQL是编译并执行你。
大多数框架也实现了各自的活动记录模型中的数据关系,可以大大简化访问与您的对象数据。 例如,在笨,如果你指定一个目录“有很多个”产品然后从数据库加载类对象之后,你可以列出其子产品有一个简单的代码行。
foreach ($category->products as $product) {
echo $product->name;
}
活动记录的另一个好处是,正如你所说的,它使你的代码很容易移植到不同的数据库平台(只要您使用的框架对您所选择的数据库驱动程序),虽然这不太可能显得重要权利现在,是我在以后的日子有更大的价值,如果你的应用程序变得流行!
希望这将帮助。 维基百科介绍活动记录以及( http://en.wikipedia.org/wiki/Active_record_pattern )和CodeIgniter的文档会以及。 就个人而言,我用KohanaPHP( http://www.kohanaphp.com ),这是一个PHP5只有笨的叉,我发现它的ORM模型是非常有用的!
活动记录是数据访问的设计模式...
目前主要有两种设计模式,我似乎遇到有关数据访问:ActiveRecord的和存储库模式
活动记录
你的对象包含了坚持自己的状态到数据库(或其他持久性机制),这样的方法:
你可能有一个Customer对象。
客户对象将有一堆像Customer.Save();, Customer.Get(INT ID)的方法; 和别的。
这些方法真的没有任何与现实世界中的一个客户。 他们是真正关心你的应用程序的基础架构。
Repository模式
在仓库的模式,你的客户对象将是一个POCO,或愚蠢的对象。 它只有方法和属性,它确实需要代表客户(之类的姓名,电子邮件地址,订单列表等)
当你想保留客户 - 你可以将它传递给你的资料库
Repository.Save(MyCustomer)。
活动记录模式是快速和容易的工作。 不幸的是,它不会弄乱你的域模型,这些方法不真的有什么与客户。 这使得稍硬维持一段时间你的域模型。
对于很多情况下它是非常适合使用的活动记录模式。 例如 - 如果我正在写一个相当简单的应用程序,则可能不会有太大变化,我可能会火起来亚音速,并生成一个我的活动记录DAL。 我会在20分钟内编码我的业务代码,所有的东西DB采取的已经照顾。
如果,另一方面,我在造型特别复杂的领域,具有较高的敏感性改变,我宁愿让我的域模型干净,并实现与NHibernate或类似的仓库模式...
它已经因为我使用ADO.Net滚我自己的数据访问时间长了,我真的不建议现在有这么多伟大的数据访问工具。
I could give my own view on this pattern but the best coverage of Active Record (and many others) is Patterns of Enterprise Application Architecture by Martin Fowler.
From chapter 10:
Active Record
An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
An object carries both data and behavior. Much of this data is persistent and needs to be stored in a database. Active Record uses the most obvious approach, putting data access logic in the domain object. This way all people know how to read and write their data to and from the database.
...
When to Use It
Active Record is a good choice for domain logic that isn't too complex, such as creates, reads, updates, and deletes. Derivations and validations based on a single record work well in this structure.
...
Active Record has the primary advantage of simplicity. It's easy to build Active Records, and they are easy to understand. Their primary problem is that they work well only if the Active Record objects correspond directly to the database tables: an isomorphic schema.
If your business logic is complex, you'll soon want to use your object's direct relationships, collections, inheritance, and so forth. These don't map easily onto Active Record, and adding them piecemeal gets very messy. That's what will lead you to use Data Mapper instead
如果有的话,它使编写查询更容易。 我觉得正常的MySQL的语法很容易出现语法错误(没有错,但我自己),并与CI活动记录语法这种情况很少发生在我身上。
活动记录是在CI恕我直言,最酷的功能之一
活动记录是一个ORM - 你已经采取了看对象 - 关系映射技术? 我想,如果你了解ORM,你将开始看到的好处。