我有一個類User
和類UserFactory
(工廠模式)。工廠連接到SQL並創建用戶對象的實例。哪個類理想地分配屬性:User或UserFactory?
由於我們經常需要預處理從數據庫中檢索的字段,所以我想知道哪個是最好的地方。例如(簡體):
class UserFactory {
function getUserByID($id) {
$q = $this->DB->query("SELECT id, name, email FROM user WHERE id = ?", $id);
if(!$q)
return FALSE;
return new User($q);
}
}
class User {
function __construct($obj) {
if(!empty($obj->id)) $this->ID = (int) $obj->id;
if(!empty($obj->name)) $this->name = $obj->name;
if(!empty($obj->email)) $this->email = $this->verifyEmail($obj->email);
}
}
在這個例子中User
對象不實際的處理,但我不喜歡,我怎麼還被迫當我有這個UserFactory
設計使用實際的SQL字段名在User
對象成爲SQL和PHP之間的一個層。
所以我可以在處理移動到UserFactory
像這樣:
class UserFactory {
function getUserByID($id) {
$q = $this->DB->query("SELECT id, name, email FROM user WHERE id = ?", $id);
if(!$q)
return FALSE;
$user = new User($q->id);
$user->setName($q->name);
$user->setEmail($q->email);
return $user;
}
}
class User {
function __construct($id) {
$this->ID = (int) $id;
}
function setName($name) {
$this->name = $name;
}
function setEmail($email) {
$this->email = $this->verifyEmail($email);
}
}
我想這是做事情的好辦法,但現在我在做額外的函數調用它似乎沒有必要每個屬性,我必須用我創建的每個UserFactory
函數手動設置屬性列表。
我在哪裏理想地處理這些字段並將它們分配給對象?什麼是'接受的方式'?我會爲每個屬性創建一個setter,還是爲User
類構造函數添加多個參數...我想聽聽您的想法。
(我知道這些「理想的代碼風格」的問題可能是主觀的,希望我沒有違反任何這方面的社會準則。)
如果你有在用戶構造你可以抽象的字段名每個屬性不同的參數。 –