gpt4 book ai didi

php - 一个类有多少个静态方法太多了?

转载 作者:可可西里 更新时间:2023-10-31 23:59:54 25 4
gpt4 key购买 nike

更新: 重新表述要问的问题,在这个类结构中“是否有太多”静态方法(我意识到现在只有 4 个,但我最初是从 2 个开始的)?如果是这样,关于如何重构这些类以使用某种 Finder 类以便我可以从模型类中删除静态函数有什么建议吗?

我有以下抽象类:

abstract class LP_Model_Abstract
{
protected static $_collectionClass = 'LP_Model_Collection';

protected $_row = null;

protected $_data = array();

public function __construct($row = null)
{
$this->_row = $row;
}

public function __get($key)
{
if(method_exists($this, '_get' . ucfirst($key)))
{
$method = '_get' . ucfirst($key);
return $this->$method();
}
elseif(isset($this->_row->$key))
{
return $this->_row->$key;
}
else
{
foreach($this->_data as $gateway)
{
if(isset($gateway->$key))
{
return $gateway->$key;
}
}
}
}

public function __set($key, $val)
{
if(method_exists($this, '_set' . ucfirst($key)))
{
$method = '_set' . ucfirst($key);
return $this->$method($val);
}
elseif(isset($this->_row->$key))
{
$this->_row->$key = $val;
return $this->_row->$key;
}
else
{
foreach($this->_data as $gateway)
{
if(isset($this->_data[$gateway]->$key))
{
$this->_data[$gateway]->$key = $val;
return $this->_data[$gateway]->$key;
}
}
}
}

public function __isset($key)
{
return isset($this->_row->$key);
}

public function save()
{
$this->_row->save();
}

abstract public static function get($params);
abstract public static function getCollection($params = null);
abstract public static function create($params);

然后这个类为类表继承方案提供附加功能(其中类型对于以工厂方式确定附加功能很重要):

abstract class LP_Model_Factory_Abstract extends LP_Model_Abstract
{
protected static $_collectionClass = 'LP_Model_Collection_Factory';

abstract public static function factory($row);
}

这些最终导致以下类型的类声明:

class Model_Artifact extends LP_Model_Factory_Abstract
{
protected static $_artifactGateway = 'Model_Table_Artifact';

public static function create($params)
{

}

public static function get($params)
{
$gateway = new self::$_artifactGateway();

$row = $gateway->fetchArtifact($params);

return self::factory($row);
}

public static function getCollection($params = null)
{
$gateway = new self::$_artifactGateway();

$rowset = $gateway->fetchArtifacts($params);

$data = array(
'data' => $rowset,
'modelClass' => __CLASS__
);

return new self::$_collectionClass($data);
}

public static function factory($row)
{
$class = 'Model_Artifact_' . $row->fileType;
}
}

你什么时候知道你在一个类中有太多的静态方法?您将如何重构现有设计,以便将静态方法封装在某种 Finder 类中?

最佳答案

我不得不同意 Brubaker 的观点,并在我的想法中补充说,重要的不是方法的数量,而是所述方法的功能。如果您开始认为您的类有许多方法(静态或其他),那么您可能会发现它们可以重新分组并重构为更直观的架构。

关于php - 一个类有多少个静态方法太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com