首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据Mapper获取方法

数据Mapper获取方法
EN

Stack Overflow用户
提问于 2014-03-16 17:26:12
回答 1查看 277关注 0票数 1

我已经就另一个话题问了一个关于this的问题,但是我对此很感兴趣,所以我现在有了另一个疑问。特别是,我查看了身份验证方法和数据映射器获取方法。我还发现,在这个主题上,this的回答非常有用,在这个主题中,对提取方法进行了某种解释,但是它跳过了我怀疑的部分。回答这个问题的用户tereško在几个场合建议数据映射程序中的方法不应该是fetchById、fetchByUsername等,而应该是一种提取方法。我的问题是,如何获取特定的方法作为我编写的方法,只有域对象在手边?

例如,如果我有一个注册服务方法,需要检查并可能存储用户名、密码和电子邮件,我需要通过用户名获取用户名来检查用户是否已经存在,然后再通过电子邮件获取该邮件以检查该邮件是否已经在数据库中。因此,如何在获取方法中知道如果只有:

代码语言:javascript
复制
$mapper->fetch($object);

我是否可能设置域对象的提取选项?

代码语言:javascript
复制
$account->setFetchOptions(['username']);

然后,在提取方法中,我会检查和获取。这有道理吗?如果有人有其他的想法,那就分享吧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-17 12:29:25

不久之前,我和你处于完全相同的位置,所以我将根据我的经验和我目前如何解决这个问题来回答这个问题。

我已经尝试了上面展示的实现,创建域对象,设置值,然后将对象传递到fetch方法中。我发现它非常冗长,所以我想出了一种新的方法。基本上,如果您有一个Mappers\User,则在构建时将一个Entities\User传递给它。当映射器将数据映射到域对象时,它简单地克隆它所持有的注入的Entities\User对象,设置数据并返回新克隆的对象,这样我就可以得到如下的API:

代码语言:javascript
复制
public function fetchById($id);

您应该查看存储库模式,以处理比通过ID获取更复杂的查询,它为您提供了一个以多种方式获取对象或对象集合的广泛API。

这样你就可以用你的Repositories\User

代码语言:javascript
复制
public function fetchByUsername($username);

public function fetchByEmailAddress($emailAddress);

如何实现存储库的内部结构取决于您,与大多数编程模式一样,对于它有许多不同的处理方式。您的Repositories\User可以保存您的Mappers\User,因此当您使用用户名获取用户时,只需使用存储库中的映射程序来映射数据并返回用户。所有这些都是由存储库公共接口封装的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22440241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档