【问题标题】:Calculated fields in Laravel and general PHPLaravel 和通用 PHP 中的计算字段
【发布时间】:2017-03-21 21:20:17
【问题描述】:

在 Laravel / PHP 中,很容易创建访问器和修改器来从数据库转换或创建动态字段。

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

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

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

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

【问题讨论】:

  • 创建一个辅助函数并将(total, percent)作为参数传递并在你想要的地方调用函数。
  • 当然是显而易见的解决方案。尽管在大型应用程序中,辅助函数也变得难以管理。我正在寻找的答案是更多基于社区商定原则的“设计模式”。
  • 你的问题真的不清楚。我不明白你在找什么。如果您想知道如何停止重复逻辑,那么重构和良好的类设计就是答案。
  • 通过对社区认可的设计模式的详细分析来寻找答案。例如工厂、存储库、单例...

标签: php laravel testing design-patterns phpunit


【解决方案1】:

设计模式已经发展成为一种组织代码并为我们的代码提供性能提升的方式。他们经常解决非常具体的问题。您的问题是如此广泛,以至于几乎任何设计模式都可以在某种程度上解决它。

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

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

旁注:

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

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

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

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

让它发挥作用,让它正确,让它快速。

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

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

【讨论】:

  • 这是我能提出这样一个问题的最佳答案:)
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多