PHP 设计模式系列 -- 资源库模式(Repository)

php中文网
发布: 2016-06-23 13:18:53
原创
1690人浏览过

1、模式定义

repository 是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。repository 是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。

Repository 模式是架构模式,在设计架构时,才有参考价值。应用 Repository 模式所带来的好处,远高于实现这个模式所增加的代码。只要项目分层,都应当使用这个模式。

2、UML类图

3、示例代码

Post.php

百灵大模型
百灵大模型

蚂蚁集团自研的多模态AI大模型系列

百灵大模型 177
查看详情 百灵大模型
<?phpnamespace DesignPatterns\More\Repository;/** * Post 类 * @package DesignPatterns\Repository */class Post{    /**     * @var int     */    private $id;    /**     * @var string     */    private $title;    /**     * @var string     */    private $text;    /**     * @var string     */    private $author;    /**     * @var \DateTime     */    private $created;    /**     * @param int $id     */    public function setId($id)    {        $this->id = $id;    }    /**     * @return int     */    public function getId()    {        return $this->id;    }    /**     * @param string $author     */    public function setAuthor($author)    {        $this->author = $author;    }    /**     * @return string     */    public function getAuthor()    {        return $this->author;    }    /**     * @param \DateTime $created     */    public function setCreated($created)    {        $this->created = $created;    }    /**     * @return \DateTime     */    public function getCreated()    {        return $this->created;    }    /**     * @param string $text     */    public function setText($text)    {        $this->text = $text;    }    /**     * @return string     */    public function getText()    {        return $this->text;    }    /**     * @param string $title     */    public function setTitle($title)    {        $this->title = $title;    }    /**     * @return string     */    public function getTitle()    {        return $this->title;    }}
登录后复制

PostRepository.php

立即学习PHP免费学习笔记(深入)”;

<?phpnamespace DesignPatterns\More\Repository;use DesignPatterns\More\Repository\Storage;/** * Post 对应的 Repository * 该类介于数据实体层(Post) 和访问对象层(Storage)之间 * * Repository 封装了持久化对象到数据存储器以及在展示层显示面向对象的视图操作 * * Repository 还实现了领域层和数据映射层的分离和单向依赖 * * PostRepository 类 * @package DesignPatterns\Repository */class PostRepository{    private $persistence;    public function __construct(Storage $persistence)    {        $this->persistence = $persistence;    }    /**     * 通过指定id返回Post对象     *     * @param int $id     * @return Post|null     */    public function getById($id)    {        $arrayData = $this->persistence->retrieve($id);        if (is_null($arrayData)) {            return null;        }        $post = new Post();        $post->setId($arrayData['id']);        $post->setAuthor($arrayData['author']);        $post->setCreated($arrayData['created']);        $post->setText($arrayData['text']);        $post->setTitle($arrayData['title']);        return $post;    }    /**     * 保存指定对象并返回     *     * @param Post $post     * @return Post     */    public function save(Post $post)    {        $id = $this->persistence->persist(array(            'author' => $post->getAuthor(),            'created' => $post->getCreated(),            'text' => $post->getText(),            'title' => $post->getTitle()        ));        $post->setId($id);        return $post;    }    /**     * 删除指定的 Post 对象     *     * @param Post $post     * @return bool     */    public function delete(Post $post)    {        return $this->persistence->delete($post->getId());    }}
登录后复制

Storage.php

<?phpnamespace DesignPatterns\More\Repository;/** * Storage接口 * * 该接口定义了访问数据存储器的方法 * 具体的实现可以是多样化的,比如内存、关系型数据库、NoSQL数据库等等 * * @package DesignPatterns\Repository */interface Storage{    /**     * 持久化数据方法     * 返回新创建的对象ID     *     * @param array() $data     * @return int     */    public function persist($data);    /**     * 通过指定id返回数据     * 如果为空返回null     *     * @param int $id     * @return array|null     */    public function retrieve($id);    /**     * 通过指定id删除数据     * 如果数据不存在返回false,否则如果删除成功返回true     *     * @param int $id     * @return bool     */    public function delete($id);}
登录后复制

MemoryStorage.php

<?phpnamespace DesignPatterns\More\Repository;use DesignPatterns\More\Repository\Storage;/** * MemoryStorage类 * @package DesignPatterns\Repository */class MemoryStorage implements Storage{    private $data;    private $lastId;    public function __construct()    {        $this->data = array();        $this->lastId = 0;    }    /**     * {@inheritdoc}     */    public function persist($data)    {        $this->data[++$this->lastId] = $data;        return $this->lastId;    }    /**     * {@inheritdoc}     */    public function retrieve($id)    {        return isset($this->data[$id]) ? $this->data[$id] : null;    }    /**     * {@inheritdoc}     */    public function delete($id)    {        if (!isset($this->data[$id])) {            return false;        }        $this->data[$id] = null;        unset($this->data[$id]);        return true;    }}
登录后复制
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号