【发布时间】:2014-12-04 18:43:33
【问题描述】:
根据接下来的例子:
class InvoiceGenerator
{
function create(Invoice $invoice)
{
$invoice->create();
}
}
class InvoiceGenerator
{
function create($invoiceData)
{
$invoice = new Invoice();
$invoice->create($invoiceData);
}
}
第一个示例在 InvoiceGenerator 和 Invoice 类之间具有较少的耦合,因为 InvoiceGenerator 不需要 Invoice 类。另外,它不仅可以处理一个类,还可以处理整个接口,只需要很少的修改。我读过很多次这个原则:代码到接口,而不是实现。这种情况的缺点是我不得不在客户端代码中实例化 Invoice 类。
第二个有更多的封装。发票的所有实例化和创建过程都委托给 InvoiceGenerator 类。尽管这两个类是耦合的,但这是有道理的,因为“发票生成器”在没有发票的情况下不会做任何事情。
您认为哪个最合适?或者两者之间平衡设计的关键点是什么?
【问题讨论】:
-
彼得:感谢您的链接。我会彻底检查他们的
标签: php encapsulation loose-coupling coupling