当前位置: 首页 > 后端技术 > PHP

PHP设计模式数据映射模式(DataMapper)代码示例百科(13)

时间:2023-03-29 18:34:51 PHP

目标DataMapper是一个数据访问层,用于将数据存储在持久化数据存储(通常是关系数据库)和内存中数据表示之间的双向传输(领域层)。该模式的目标是分离数据的内存表示、持久存储和数据访问。该层由一个或多个映射器(或数据访问对象)组成,并执行数据转换。映射器实现的范围各不相同。通用映射器将处理许多不同的域实体类型,专用映射器将处理一种或几种。示例数据库对象关系映射器(ORM):Doctrine2使用的DAO,名为“EntityRepository”。UMLDiagram官方PHP进阶学习交流社区“点击”管理整理部分资料,BAT等一线大厂进阶知识体系已备齐(相关学习资料及笔试面试题)且不限于:分布式架构,高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点进阶干货代码用户。phpusername=$username;$this->email=$email;}/***@returnstring*/publicfunctiongetUsername(){return$this->username;}/***@returnstring*/publicfunctiongetEmail(){return$this->email;}}UserMapper.phpadapter=$storage;}/***根据id从storage中找到user,返回一个user对象*在内存中,通常这个逻辑会使用Repository模式来实现*但是,重要的部分在下面的mapRowToUser()中,其中A业务对象将从*从存储中获取的数据**@paramint$id**@returnUser*/publicfunctionfindById(int$id):User{$result=$this->adapter->find($ID);如果($result===null){thrownew\InvalidArgumentException("User#$idnotfound");}返回$this->mapRowToUser($result);}privatefunctionmapRowToUser(array$row):User{returnUser::fromState($row);}}StorageAdapter.phpdata=$data;}/***@paramint$id**@returnarray|null*/publicfunctionfind(int$id){if(isset($this->data[$id])){return$this->data[$id];}返回空值;}}测试Tests/DataMapperTest.php['username'=>'domnikl','email'=>'liebler.dominik@gmail.com']]);$mapper=newUserMapper($storage);$user=$mapper->findById(1);$this->assertInstanceOf(User::class,$user);}/***@expectedException\InvalidArgumentException*/publicfunctiontestWillNotMapInvalidData(){$storage=newStorageAdapter([]);$mapper=newUserMapper($storage);$mapper->findById(1);}}PHP之路*《设计模式》终极指南PHP互联网架构师50K成长指南+行业解题大纲(持续更新中)面试10家公司,收获9份offer,2020年PHP面试题如果喜欢我的文章,想多多分享给me如果资深开发者一起交流学习,可以获得更多与各大厂商面试相关的技术咨询和指导。欢迎加入我们的群,密码:phpzh(群号:856460874)2020年最新PHP进阶教程,全系列!如果内容不错,希望大家多多支持鼓励点赞/点赞,欢迎一起交流;另外,如果大家有什么问题,建议,可以在评论中提出你们想看的内容