Laravel和普通PHP中的计算字段

时间:2016-11-08 09:48:59

标签: php laravel testing design-patterns phpunit

在Laravel / PHP中,可以轻松创建访问器和变换器,以便从数据库转换或创建动态字段。

虽然在整个应用中复制同样的逻辑太容易了,但是当您没有通过ORM模型访问相同的数据时(例如直接查询)。

$order->totalPlusTax; // (total * 10%)

计算此字段的逻辑应写入一次,可测试并且不与ORM绑定。

围绕此逻辑的最佳做法或设计模式是什么?

1 个答案:

答案 0 :(得分:1)

设计模式已经发展成为一种组织和提高代码性能的方法。他们经常处理非常具体的问题。你的问题是如此广泛,几乎任何设计模式都会在一定程度上解决它。

例如,如果您在创建对象之前有逻辑检查数据库的某些条件,那么它将存在于该对象工厂类中,而不是其他任何地方。如果你有逻辑通过检查数据库中的条件来查找对象,那么这个逻辑将存在于存储库类中,而不是其他地方。

您的问题的解决方案不是一个特定的设计模式。它通过许多设计模式,OO类和方法以及遵循SOLID原则来解决。

旁注:

对不起,如果这不是您所期待的答案。几年前,当我开始研究设计模式和社区最佳实践时,我确实发现自己处于类似的位置。

我认为我们有时作为程序员的问题是我们将逻辑思维从字面上应用于所有事情。当我研究设计模式和最佳实践时,我经常花几天时间试图找出实现某些东西的正确方法。答案不是设计模式或社区最佳实践。答案是:

  

要编写的正确代码是进行测试的代码,其中该测试验证了某些值是否正在传递给业务。

我不是说只编写任何旧代码,但在开始编写代码之前,您经常不知道要使用哪些设计模式。因此,最好的起点是编写使您的应用程序正常工作的代码:Kent Beck建议:

  

让它发挥作用,使其正确,加快速度。

"做对了"部分是您将代码重构为设计模式等的位置。您需要查看代码库并查看有共同元素的位置。通常它只是将一般逻辑重构为类或方法的情况。有时候会使用你提到的设计模式。

显然有时候你对终端解决方案有很好的了解,并且可以预先使用设计模式(Active Record,MVC等),但在你的情况下,你似乎只知道一旦你开始看到一些重复的逻辑。我担心它只是一个看一些设计模式并看看它们是否适合你的情况,但我想说只需将公共代码重构为一个单独的类或方法。这是您正在寻找的社区最佳实践。