Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel和通用PHP中的计算字段_Php_Laravel_Testing_Design Patterns_Phpunit - Fatal编程技术网

Laravel和通用PHP中的计算字段

Laravel和通用PHP中的计算字段,php,laravel,testing,design-patterns,phpunit,Php,Laravel,Testing,Design Patterns,Phpunit,在Laravel/PHP中,很容易创建访问器和变异器,以便从数据库转换或创建动态字段 虽然很容易在整个应用程序中复制相同的逻辑,但当您不通过ORM模型访问相同的数据时(例如直接查询) $order->totalPlusTax;//(总计*10%) 计算此字段的逻辑应编写一次,可测试,且不绑定到ORM中 围绕这一逻辑的最佳实践或设计模式是什么?设计模式已经演变为组织代码并提高代码性能的一种方式。它们经常处理非常具体的问题。您的问题非常广泛,几乎任何设计模式都会在一定程度上解决它 例如,如果您有在创

在Laravel/PHP中,很容易创建访问器和变异器,以便从数据库转换或创建动态字段

虽然很容易在整个应用程序中复制相同的逻辑,但当您不通过ORM模型访问相同的数据时(例如直接查询)

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

计算此字段的逻辑应编写一次,可测试,且不绑定到ORM中


围绕这一逻辑的最佳实践或设计模式是什么?

设计模式已经演变为组织代码并提高代码性能的一种方式。它们经常处理非常具体的问题。您的问题非常广泛,几乎任何设计模式都会在一定程度上解决它

例如,如果您有在创建对象之前检查数据库特定条件的逻辑,则该逻辑将存在于该对象工厂类中,而不会存在于其他任何地方。如果您有通过检查数据库中的条件来查找对象的逻辑,那么该逻辑将存在于repository类中,而不存在于其他任何地方

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

旁注:

如果这不是你期望的答案,我很抱歉。几年前,当我开始研究设计模式和社区最佳实践时,我发现自己处于类似的位置

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

要编写的正确代码是使测试通过的代码,该测试验证正在向业务交付的某些值

我并不是说只编写任何旧代码,但在开始编写一些代码之前,您通常不知道要使用什么设计模式。因此,最好从编写使应用程序工作的代码开始:Kent Beck的建议如下:

让它工作,让它正确,让它快速

“使其正确”部分是将代码重构为设计模式等的部分。您需要查看代码库,看看哪里有公共元素。通常,这只是将普通逻辑重构为类或方法的一种情况。有时会使用您提到的设计模式


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

创建一个helper函数,并将
(total,percent)
作为一个参数传递,然后在需要的地方调用该函数。确保这是显而易见的解决方案。尽管在大型应用程序中,助手功能也变得难以管理。我想要的答案是更多基于社区一致同意的原则的“设计模式”。你的问题真的很不清楚。我不明白你在找什么。如果您想知道如何停止复制逻辑,那么重构和良好的类设计就是答案。通过对社区认可的设计模式进行详细分析来寻找答案。e、 g工厂、存储库、单例……这是我可以问这样一个问题的最好答案:)