The model represents enterprise data and the business rules that govern access to and updates of this data. Often the model serves as a software approximation to a real-world process,so simple real-world modeling techniques apply when defining the model.
它并没有说模型应该代表一个表作为activerecord的作用.通常在事务中,可能必须查询一些不相关的表,然后操纵来自不同表的数据……所以如果将activerecord用作模型,那么任何一个都必须将所有逻辑代码塞入控制器(这是在一些PHP框架中很受欢迎,这使得很难测试或破解activerecord模型,这样它不仅可以对它映射到的表执行数据库操作,而且还可以对其他相关表执行数据库操作…
那么,滥用(IMHO)activerecord作为MVC架构模式中的模型有什么好处呢?
如果你只想这么简单,你可以使用Transaction Script.这是您在许多旧的ASP和PHP页面中看到的体系结构,其中单个脚本包含业务逻辑,数据访问逻辑和表示逻辑.当事情变得更复杂时,这会迅速崩溃.
接下来你可以做的是在表示和模型之间添加一些分隔.这是积极的记录.该模型仍然与数据库绑定,但您可以更灵活,因为您可以在视图/页面/之间重用模型/数据访问.它不像它可能那么灵活,但根据您的数据访问解决方案,它可以足够灵活.像.Net中的CSLA这样的框架有很多方面来自这个模式(我认为实体框架看起来有点像这样).它仍然可以处理很多复杂性而不会变得不可维护.
下一步是分离数据访问层和模型.这通常需要一个好的OR映射器或大量的工作.所以不是每个人都想这样做.很多像域驱动设计这样的方法论都采用了这种方法.