PHP类:我应该使用2个类还是1个类?
我目前正在尝试制作一个用PHP(Drupal)处理调查的类。 到目前为止,我有:PHP类:我应该使用2个类还是1个类?,php,class,drupal,Php,Class,Drupal,我目前正在尝试制作一个用PHP(Drupal)处理调查的类。 到目前为止,我有: class Survey{ public $id; public $uid; public $rate; public $reason; public $complete; public $opinion; public function save(){ drupal_write_record('survey', $this); } } 这很好,我可以创建一个新的测量实
class Survey{
public $id;
public $uid;
public $rate;
public $reason;
public $complete;
public $opinion;
public function save(){
drupal_write_record('survey', $this);
}
}
这很好,我可以创建一个新的测量实例,设置属性,并调用save
然而,我也希望能够有方法从DB检索这些调查的结果,并根据这些结果采取行动,给我提供各种数字。在类调查中使用这些方法是不对的,因为它们实际上是多个调查。但是,它们是相关的,也可能返回调查
的实例,因此不确定它们是否应该是一个完全独立的类。在这里做什么最好
顺便说一句,我不在乎这是不是一个令人沮丧的回答
谢谢,
Amshad与其他方法一样,有许多方法各有优缺点
我(当前)的偏好是将类方法(静态)和对象方法结合起来,分别处理对象组和单个对象
考虑以下代码:
class Survey {
public $id;
public $uid;
public $rate;
public $reason;
public $complete;
public $opinion;
public function save()
{
drupal_write_record('survey', $this);
}
/**
* Loads survey from secondary storage
*
* @param string $id Unique surevy ID
*/
public function load( $id ) {
// loads a survey from secondary storage
}
/**
* Returns report of survey results.
*
* @param array $surveys array of surveys to process. If not passed or NULL,
* The whole set of completed surveys will be processed.
* @return string HTML Formatted report
*/
public static function compile_results( $surveys = NULL )
{
if( empty( $surveys ) )
{
$surveys = self::get_completed_results();
}
foreach( $surveys as &$survey )
{
// process an individual survey, possibly aggregating it
}
}
/**
* Retreives completed surveys from secondary storage.
*
* @return array Array of completed Survey objects
*/
public static function get_completed_surveys()
{
$surveys = array();
// Select all surveys from secondary storage
$survey_rows = array(); //replace with code to get surveys
foreach( $survey_rows as $survey_row )
{
$survey = new Survey();
$survey['id'] = $survey_row['id'];
$survey['uid'] = $survey_row['uid'];
$survey['rate'] = $survey_row['rate'];
$survey['reason'] = $survey_row['reason'];
$survey['complete'] = $survey_row['complete'];
$survey['opinion'] = $survey_row['opinion'];
$surveys[] = $survey;
}
return $surveys;
}
}
可以使用静态方法处理对象组。您甚至可以拥有一个静态数组,其中包含对每个已加载测量的引用
另一个选择是有一个“Surveys”类,其目的是处理调查组。我觉得前面的方法更干净。使用一个类来保存业务逻辑中的两个数据库逻辑违反了这一原则。我将使用一个单独的接口和类,比如说SurveyRepository
(接口)和DrupalSurveyRepository
(使用Drupal DB层的接口实现),来管理调查持久性(即对数据库的读写)。这将简化(单元)测试,因为当与一些依赖项注入相结合以提供SurveyRepository
接口的模拟实现时,您将能够在没有数据库连接的情况下访问与调查相关的代码
一个Drupal 7 +项目,我会考虑用一个实体来帮助调查一个实体类型(参见)。然后可以使用搜索调查,而加载和保存可以使用现有的和功能完成。我认为您需要改进您的问题标题。是的,我不确定标题是什么,有什么建议吗?在阅读(特别是从搜索的链接)时,您的问题必须反映技术(语言或平台)。