我正在将我的程序性php项目转换为OOP。我坚持一个问题。 检索表格数据的最佳方法是什么?如何在我的oop类中调用值
跑过ID与构造
new Rate(new Currency($currencyId), $amount);
或第一设置id和调用getId()方法?
$currency = (new Currency())->setId($currencyId);
new Rate($currency->getId(), $amount)
我正在将我的程序性php项目转换为OOP。我坚持一个问题。 检索表格数据的最佳方法是什么?如何在我的oop类中调用值
跑过ID与构造
new Rate(new Currency($currencyId), $amount);
或第一设置id和调用getId()方法?
$currency = (new Currency())->setId($currencyId);
new Rate($currency->getId(), $amount)
问一个关于面向对象设计的问题,你会得到100个不同的答案。有许多不同的设计模式可以完成同样的事情。
很难说,因为我们没有看到你的完整设计,但是考虑到你的2个例子,我会去第一个例子。
好的谢谢...... – Namal
要同意克里斯的回答,你的第二个例子就是与'新费率($ currencyId,$ amount)'相同;'所以你的第一个例子更好,利用依赖注入设计模式。 – DanFromGermany
仅仅从可读性和打电话的角度来看,我会选择第一个。第二个调用两个独立的调用(一个调用构造函数,另一个调用$currencyId
)。
的Rate
对象不应该关心什么$currencyId
是,而是应该知道的唯一的事情是,有一个货币:
$rate = new Rate(new Currency($currencyId), $amount);
如果要防止过多的Currency
对象被实例化,你可以引入一个映射:
$mapper = new CurrencyMapper();
$rate = new Rate($mapper->getCurrencyWithId($currencyId), $amount);
应当注意的是,做这一切对象时,必须是不可改变的,根据Flyweight规则。
为什么' - > setId()'返回一个对象? –
@Jack返回void的所有方法都应返回$ this;在PHP中能够结合对象的函数调用,Zend Framework使得它非常好用。 – DanFromGermany
@DanFromGermany IMO,这是一个迟钝的想法,没有进攻。 –