【发布时间】:2020-10-10 20:45:35
【问题描述】:
假设我们有一个 FruitFactory 类,它根据可以全局访问的查询参数 $type 创建水果。
以下哪种方法更好? (或者如果有其他更好的方法,请告诉我)。
在函数中将全局变量作为参数传递是否有意义? (就像第一种方法一样)
还是直接调用函数,让它负责全局变量type。
class FruitFactory
{
public function create($type)
{
if($type == 'Apple')
{
return new Apple();
}
}
}
$fruit = new FruitFactory();
$type = $_GET['type'];
$result = $fruit->create($type);
或者
class FruitFactory
{
protected $type;
public function __construct()
{
$this->type = $_GET['type'];
}
public function create()
{
if($this->type == 'Apple')
{
return new Apple();
}
}
}
$fruit = new FruitFactory();
$result = $fruit->create();
【问题讨论】:
-
哪个工厂可以自动化测试?
-
我猜是第一种方法,因为 $type 在 create 方法中作为参数传递(如果我错了,请纠正我)
-
第二个版本很糟糕,因为它与网络服务器查询上下文中的用户输入紧密耦合。您的第一个版本更加可靠(除了
create函数应该总是返回一些东西或抛出错误之外)。 -
确实 :) 谨慎处理基于意见的问题。
-
如果有第三个版本,我将构造函数中的全局变量作为参数传递怎么办。我想我仍然可以测试它,因为我什至无法在构造函数中传递该参数的情况下实例化一个对象。