我应该在哪里将价格计算逻辑放在Laravel中?

时间:2015-11-13 19:52:36

标签: php laravel

在这个问题中,我要求"最佳实践"对Laravel的建议。
我正在研究一个类似于airbnb的"我列出住宿的网站。 在网站的各个页面(后端和前端),我需要计算住宿的价格。通过将调节对象与搜索查询组合来计算价格。

例如。
- 住宿:费率=每晚50欧元 - 搜索查询:4晚
- >结果:总价= 200欧元

我应该把这些价格计算的逻辑放在哪里?
例如:
- 我应该为此创建一个PriceController吗?
- 我应该向AccommodationsController添加函数/方法来计算它,还是添加到Accommodation模型?
- 我应该为此创建一个ServiceProvider吗?

3 个答案:

答案 0 :(得分:1)

没有明确的方法来解决这个问题,在我看来,这是拉拉维尔最伟大的事情。

也许在Calculationsapp/)中创建一个名为app/Caclulations/Accommodation.php的目录,并将其命名为?对于这个问题,这将是一个很好的面向对象的方法。

namespace App\Calculations;

class Accommodation
{
    /**
     * The rate per night.
     *
     * @var float
     */
    protected $rate;

    /**
     * The amount of nights for the stay.
     *
     * @var int
     */
    protected $nights = 1;

    /**
     * Constructor.
     *
     * @param float $rate
     * @param int   $nights
     */
    public function __construct($rate = 50.00, $nights = 1)
    {
        $this->rate = $rate;
        $this->nights = $nights;
    }

    /**
     * Calculates the accommodation and returns the result.
     *
     * @return float
     */
    public function calculate()
    {
        return $this->rate * $this->nights;
    }
}

这样,如果计算发生变化,您可以修改计算类,从其他计算(例如基础计算)中扩展计算类,也可以在类中插入一些其他有用的东西,例如货币类型。

用法:

$total = (new Accommodation($rate, $nights))->calculate();

答案 1 :(得分:0)

实际上,你想要在多个控制器中使用这个逻辑。因此,在多个控制器中重复此逻辑毫无意义。

我会创建一个服务提供商。有了这个,您可以使用dependancy injection在您需要的地方使用此逻辑。通过将此逻辑放在一个位置,您可以更轻松地进行维护。更轻松的生活。

答案 2 :(得分:0)

这取决于你想要得到什么。如果你认为这是一次性计算,即;你不必在这种方法之外使用这种计算,可以随意使用它。否则,如果您认为必须在其他控制器/类之外/在其他控制器/类中使用此计算逻辑,则可以将此文件作为方法编写,或者可以创建包含方法的帮助程序类。它取决于你。