许多PHP的框架使用ActiveRecord模式,其中模型类负责相关的数据库交互,例如查找/插入/更新/删除等
从存储器使用方面来看,这本质上是一个糟糕的想法,在服务器上通常相对较小。 find方法可以是静态的,减少每个对象的内存使用量,但剩下的3个 C R UD 方法不会是静态的。那么,如果你有100个对象,那么用于CUD方法的内存不会比使用模型类的单个存储库多99倍?如果是这样,为什么框架选择了ActiveRecord模式?或者,我在这里错过了什么?
答案 0 :(得分:0)
Framework的作者必须考虑开发工作流的许多方面,其中之一是平均可用资源(CPU /内存消耗),但这不是唯一的一个,而且现在也不是最关键的一个。
考虑到资源,您将需要进行成本/收益分析,以了解RAM消耗的增加如何改变产品成本及其带来的好处。例如,从这个角度来看,针对轻型ARM设备或小型服务器的框架将得到真正的高度优化。
但是在一般情况下,这是不值得的。
为什么?因为平均而言,RAM和CPU的成本相对较低,尤其是与software maintenance costs相比。如今,许多公司利用云基础架构提供商(Google Cloud,AWS等)节省了大量资金,否则,他们将需要花费在运行自己的服务器上。
有时软件维护成本可能包括基础设施成本,因此,为简单起见,假设它仅包括 -开发新功能 -修复错误 -执行代码重构
因此,仅这些一项就要花费大量金钱,因为这些要点中的每一项都需要开发人员的时间。通过这样的推理,我们宁愿优化对这三个动作有影响的事情,而不是影响资源使用的事情。
使用ActiveRecord是这种优化之一。 ActiveRecord首先是相对简单的,而简单性是可维护性的关键组成部分,其次是真正的多样化(市场上的许多开发人员都熟悉这种模式)。
该模式具有some disadvantages,但是附近有软件架构师或足够熟练的开发人员,该团队将可以通过用数据访问对象模式(或存储库模式)替换ActiveRecord来选择退出ActiveRecord。
因此,基本上,选择ActiveRecord的框架(Laravel,Yii等)正在权衡取舍,通常,它们考虑的方面与资源使用情况(内存/ CPU)不同,因为与已提到的软件成本相比,这无关紧要。