【发布时间】:2013-12-14 07:49:10
【问题描述】:
我正要写一个方法来将一些计费数据转换成发票。
假设我有一个对象数组,其中包含创建发票项所需的数据。
在计费控制器中,以下哪种方式是正确的
$invoice = new Invoice();
$invoice->createInvoiceFromBilling($billingItems);
然后在 Invoice 类中
Public Function createInvoiceFromBilling($billingItems)
{
$this->data = $billingItems;
或
Invoice::createInvoiceFromBilling($billingItems)
然后在发票类中
Public Function createInvoiceFromBilling($billingItems)
{
$invoice = new Invoice();
$invoice->data = $billingItems;
哪种方式是正确的方式?
问候
【问题讨论】:
-
您真正需要的是创建发票的工厂:
$invoice = $invoceFactory->createFromBilling( $billingItems ); -
默认第一个,通过构造函数传递$billingItem应该更好,呈现Billing和Invoice的依赖关系。但是,如果您有多种创建 Invoice 的方法(不仅来自计费),则应考虑第二种方法,例如设计模式中的 Factory。
-
我对工厂一无所知,只是读了一遍,这似乎是个好主意,所以从某种意义上说,你会使用工厂来运行它,类似于第一个示例
-
@Fwolf,我的发票类有很多创建发票的方法,而且它也是我的 Yii 框架的模型类,所以构造函数会是个问题。因此,如果我使用该类从各种不同来源创建发票,则使用工厂方法,并仍然返回 Invoice 的实例
-
到底是谁投票结束这篇文章是“基于意见的”?!?如果你能找到一个重复的,我会理解的(因为肯定有一个),但如果你坚持SOLID principles,则没有任何基于此的意见。