在这个问题中,我向Laravel寻求“最佳实践”的建议。
我正在一个类似airbnb的网站上工作,在那里我列出了住宿情况。在网站的不同页面(后端和前端),我需要计算住宿的价格。价格是通过合并住宿对象和搜索查询来计算的。
例如:
-accommodation:利率=每晚50欧元
-search查询:4个晚上
->结果:总价= 200欧元
我应该把这些价格计算的逻辑放在哪里呢?
例如:
-Should,我为此创建了一个PricesController?
-Should --我给计算这个的AccommodationsController添加函数/方法,还是向容纳模型添加函数/方法?
-Should,我为此创建了一个ServiceProvider?
发布于 2015-11-13 21:02:51
没有明确的方法来实现这一点,在我看来,这是拉拉最伟大的事情。
也许在app/ (app/Caclulations/Accommodation.php)中创建一个名为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();发布于 2015-11-13 20:10:46
实际上,您需要在多个控制器中使用这种逻辑。因此,没有必要在多个控制器中重复此逻辑。
我会创建一个服务提供商。这样,您就可以在任何需要的地方使用dependancy injection来使用这个逻辑。通过将这一逻辑放在一个地方,您可以更容易地维护&更容易的生活。
发布于 2015-11-13 20:30:29
这取决于你想得到什么。如果你认为这是一次计算,也就是说,你不需要在这个方法之外使用这个计算,那么它是可以的。否则,如果您认为必须在外部/在其他控制器/类中使用此计算逻辑,则可以将此文件编写为方法,或者创建一个包含您的方法的助手类。由你决定。
https://stackoverflow.com/questions/33700754
复制相似问题