как спроектировать отношения в oop (используя php)

Я действительно новичок в ООП и не очень хорошо говорю по-английски, поэтому, если мой вопрос тупой, извините.
Я думал, что понимаю упс, но когда я начинаю кодировать с ним, это работает, но не чувствует себя хорошо.
следующий код — моя первая попытка, я задам вопрос после них. (Я вырезал коды базы данных, но, как я уже сказал, программа работает.)

// class.Post.inc

class Post {
private $_db;
private $_postId;
private $_title;
private $_creatorId;

public function __construct() {
$this->_db = Database::getInstance ()->getConnection ();
}

public function getApost($postId = 0) {
if($postId){
/* get the post data from database(including user_id) and put them in the instance variables */
$this->_postId = $row ['post_id'];
$this->_title = $row ['title'];
$this->_creatorId = $row ['user_id'];
}
}

public function getCreator() {
$creator = new User ();
return $creator->getUserObject ( $this->_creatorId );
}

public function getPostId() {
return $this->_postId;
}

public function getTitle() {
return $this->_title;
}
}

//class.User.inc

class User {
private $_db;
private $_userId;
private $_name;

public function __construct() {
$this->_db = Database::getInstance ()->getConnection ();
}

public function getUserObject($userId = null) {
if ($userId) {
/* read data from database and put them in the instance variables */
$this->_userId = $row ['user_id'];
$this->_name = $row ['name'];

return $this;
}

return false;
}

public function getUserId() {
return $this->_userId;
}

public function getName() {
return $this->_name;
}
}

//index.php

spl_autoload_register ( function ($className) {
require_once 'classes/class.' . $className . '.inc';
} );

$post = new Post ();
$post->getApost(1);
$creator = $post -> getCreator();
echo $post->getPostId () . '<br>';
echo $post->getTitle () . '<br>';
echo $creator->getName () . '<br>';

мои вопросы:

  1. у поста есть создатель, правильно ли я оформляю эти отношения?
  2. Что делать, если я хочу использовать объединение, чтобы выбрать сообщение и его создателя вместе?
  3. если я хочу показать список сообщений, я должен определить новый метод в классе сообщений или на странице индекса или определить новый класс для него? как?

0

Решение

Многое можно сказать о вашем коде. Я мог бы написать, что ты сделал неправильно несколько часов, но ты не просил об этом, поэтому я отвечу на твои первые вопросы.

  1. Да, это нормально, чтобы получить создателя из поста с точки зрения сущности отношений.
  2. Я не вижу чистого способа использования вашей реализации. Это возможно, но это потребует серьезного рефакторинга.
  3. Если вы хотите использовать Активная запись Конечно, вы можете реализовать новый метод в классе Post. Но я гораздо больше рекомендую использовать Data Mapper шаблон, который чище с точки зрения ООП из-за SRP.

Один совет в конце:
Я часто вижу новых разработчиков, которые изобретают велосипед, и это именно то, что вы делаете. Существуют великолепные и полнофункциональные библиотеки, которые экономят ваше время на написание ваших собственных. Например Учение ОРМ. Или намного проще Nextras ORM. Кривая обучения может показаться высокой, но я гарантирую, это того стоит.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector