php设计结构,PHP OOP设计结构

本文探讨了一个OOP实例,涉及Book类、BookFactory和BookNumRead类的使用。BookFactory作为服务类,用于获取Book对象并计算阅读次数,而BookNumRead类负责从多个数据源获取阅读数。讨论了是否应将这些类放入ServiceLocator/ServiceContainer中,以及如何处理依赖注入和潜在的服务类需求。
摘要由CSDN通过智能技术生成

我的问题适用于我为了更好地理解如何使用OOP而编写的这三个示例类.

class Book {

//not using getters/setters to save some space

public $name;

public $numreads;

}

class BookFactory {

private $db;

public function __construct(Database $db) {

$this->db = $db;

}

public function getBook($id) {

$book = new Book();

$book->name = $db->query("SELECT name FROM books...");

$booknumreads = new BookNumRead($this->db, $book);

$book->numreads = $booknumreads->getFromLocal() + $booknumreads->getFromAnotherSource();

return $book;

}

}

class BookNumRead {

private $db;

private $book;

public function __construct(Database $db, Book $book) {

$this->db = $db;

$this->book = $book;

}

public function getFromLocal()

{

return $this->db->query("SELECT COUNT ... WHERE name = $book->name");

}

public function getFromAnotherSource()

{

return API::getNumReadsOfABook($book->name);

}

//or just stick with this method in this class

public function getNumReadsOfBook($name)

{

return (

$this->db->query("SELECT COUNT ... WHERE name = $name")

+

API::getNumReadsOfABook($name)

);

}

}

//get number of reads of a book

$db = new Database();

$bookfactory = new BookFactory($db);

$book = $bookfactory->getBook(123);

echo $book->getNumReads();

>首先,这是一个很好的OOP approch?

>这些课程完全不同.域与值对象?例如,我的应用程序中可以包含所需数量的Book对象.

BookFactory就像我的应用程序中的一个服务,我的应用程序中只需要一个,但我可能需要在我的应用程序中的许多其他地方使用此类,

我应该把它作为ServiceLocator / ServiceContainer中的对象吗?

> BookNumRead类也可以放在ServiceLocator / ServiceContainer中,并且在没有注入Book对象的情况下由getNumReadsOfBook()方法使用,但这感觉就像过程编程一样?

或者,如上例中的BookFactory :: getBook()所引发的那样,但是我需要传递一个数据库(一个BookFactory被注入)和一本书,这感觉有点

凌乱,beacasue它可能需要其他“服务”类,如记录器.这里的最佳做法是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值