私はいつもどのようにして次のことを行うのが最善であるか混乱しています。たとえば、BlogPost
とTag
という2つのクラスがあり、データベーステーブルPosts
とTags
に対応しています。他のクラスの中でクラスをインスタンス化するのは悪い設計ですか、あるいは独立しているべきですか?別のクラスの中でクラスをインスタンス化するのは悪い設計ですか?
class BlogPost {
private $db;
private $title;
private $description;
private $tagsArray;
public function __construct($db){$this->db = $db;}
public function getTitle(){/*...*/}
public function getDescription(){/*...*/}
public function getTags(){/*...*/}
public function setTitle($title){/*...*/}
public function setDescription($desc){/*...*/}
public function setTags($tags){/*...*/}
public function addPost(){
//insert into database query
//bindParams
//execute
$this->addTags($this->db->last_insert_id());
}
public function addTags($lastInsertId){
require_once('class.Tag.php');
foreach($tagsArray as $tagItem){
$tagClass = new Tag($this->db, $lastInsertId);
$tagClass->setTagName($tagItem["title"]);
$tagClass->addTag();
}
}
}
のindex.php
require_once('class.BlogPost.php');
$blogPost = new BlogPost($db);
$blogPost->setTitle("title");
$blogPost->setDescription("description");
$blogPost->setTags($tagsArray);
$blogPost->addPost();
それとも独立したクラスを保つために良いですか?そのような:
class BlogPost {
private $db;
private $title;
private $description;
public function __construct($db){$this->db = $db;}
public function getTitle(){/*...*/}
public function getDescription(){/*...*/}
public function getId(){/*...*/}
public function setTitle($title){/*...*/}
public function setDescription($desc){/*...*/}
public function setId($id){/*...*/}
public function addPost(){
//insert into database query
//bindParams
//execute
$this->setId($this->db->last_insert_id());
}
}
のindex.php
require_once('class.BlogPost.php');
$blogPost = new BlogPost($db);
$blogPost->setTitle("title");
$blogPost->setDescription("description");
$blogPost->addPost();
$lastInsertId = $blogPost->getId();
require_once('class.Tag.php');
$tagClass = new Tag($db, $lastInsertId);
$tag->setTags($tagsArray);
$tag->addTag();
任意の情報をお寄せいただきありがとうございます!
**確かに、それはまだ悪いデザイン**です。 – Jimbo
@Jimbo: 'addTags'の内部で作成されたインスタンスは、コードを慎重に読んでも外部に漏れることはありません。 'addTags'自体は最初から公開すべきではありません。正確に何が悪いデザインだと思いますか?なぜですか? – Jon
わかりやすく答えを編集する必要がありますか?私はOPの質問に対するあなたの反応を信じていました:*別のクラスの中でクラスをインスタンス化するのは悪い設計ですか?*:「確かに悪い設計ではありません。笑! – Jimbo