我正在尝试确定用于数据库派生类的最佳命名约定。我经常遇到我希望同时具有类似功能的静态和动态方法的情况。
例如说我有公司课。每家公司都有各种产品。在我的公司课程中,我希望能够检索一家或多家公司提供的所有产品,或者在公司和产品之间设置关联。
class Company {
/** STATIC FUNCTIONS **/
public static function GetProductIds($company_ids = array()){
$company_ids = (array)$company_ids;
// retrieve associated product ids from database
return $product_ids;
} // GetProductIds()
public static function SetProductIds($company_ids = array(), $product_ids = array()){
$company_ids = (array)$company_ids;
$product_ids = (array)$product_ids;
// insert company/product associations into database
return true;
} // SetProductIds()
/** DYNAMIC FUNCTIONS **/
public function ProductIds($product_ids = null){
if($product_ids){
return self::SetProductIds($this->company_id, $product_ids);
}
return self::GetProductIds($this->company_id);
} // ProductIds()
} // CLASS Company
在此示例中,调用动态ProductIds()方法允许我使用相同的方法设置或获取数据。但是,我可能会遇到动态方法没有设置功能的情况。
是否有人建议这是否是可接受的策略?如果不是,你如何设置你的方法来处理这些情况?
答案 0 :(得分:0)
我决定反对以这种方式设置我的课程。 Barmar在他的评论中指出,反对它的主要原因是动态方法的名称没有明确地描述它的作用(因为它可以设置或获取)。我会将我的get / set方法分开以保持清晰。
为您的方法命名,描述它们的作用。不要担心静态与动态的命名约定。担心私人与公众之间的关系 - 保存到数据库的方法是否真的需要公开?它看起来像是其他方法的内部实用程序。 - 巴马尔
在命名静态方法时,我还将使用类似BulkGetProductIds()的东西,我需要根据多个ID获取数据。