数据映射器模式:在哪里放置用户模型的checkLogin方法?

我试图为用户类实现数据映射器模式。

如果我理解正确,业务类User不应调用任何持久性方法,而应将其放入Data Mapper类(UserMapper)中,并且映射器与数据库接口,理想情况下使用表网关类。

我有一些疑问:

  • 我会在哪里放一个checkLogin方法? 用户或UserMapper? 我需要通过他的cookie来检查当前访问者的登录状态。 由于用户不能引用数据库和会话数据存储在那里,我必须使用映射器类吗?

  • 我在哪里放置验证规则? 我想把它们放在User类中,这样当我实例化它时,如果数据错误,我会得到一个异常。 不过,我需要在mapper上使用checkLogin()等方法的验证规则。 也许我不应该直接实例化新的User(),相反,我应该从数据映射器创建一个新的用户,并在其中存储验证规则。 你怎么看?

  • 看起来这样,我最终得到了一个非常小的模型类和一个更大的数据映射器类。 但由于我的大部分应用程序都是数据库交互,所以我认为这并不坏。 它是否是一种代码味道?

  • 谢谢。


    我认为你在应用程序中缺少一个组件。 除User和UserDataMapper之外,您还需要另一个执行业务逻辑验证的层。 我们称之为UserBusiness。

    在从UserDataMapper检索用户的详细信息后,可以在UserBusiness中完成Cookie /会话检查。 UserDataMapper将返回一个User对象,该对象将具有诸如login,sessionId等所有细节。因此,UserBusiness可以使用这些细节对其进行验证。

    您需要在UserBusiness以及User和UserDataMapper中进行验证。 原因是你正在验证不同的事情。 UserBusiness中的验证规则将更具针对性,是限制应用程序规则的用户名(例如,大于8个字符可以是规则)。 如果某个字段不为空时,用户可以验证该字段是否为空。 UserDataMapper可以验证用户名是唯一的还是一些这样的数据规则。 您无需将验证规则限制为一个类。

    臃肿的数据层并不罕见,但如果它不需要臃肿,它也不是一个好主意。 数据层只能处理与数据库相关的验证,检索和处理。 做更多的事情在大多数情况下都是一种气味。

    链接地址: http://www.djcxy.com/p/9621.html

    上一篇: Data Mapper pattern: where to put a checkLogin method for a User Model?

    下一篇: Data mapper pattern, and relational data