Data Mapper模式:在哪里为用户模型放置checkLogin方法?

时间:2015-03-18 23:35:53

标签: java oop design-patterns datamapper

我正在尝试为User Class实现数据映射器模式。

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

我有一些问题:

  1. 我会在哪里放置checkLogin方法?用户或UserMapper?我需要通过他的cookie检查当前访客的登录状态。由于用户无法引用数据库并且会话数据存储在那里,我必须使用mapper类吗?

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

  3. 看来这样,我最终得到了一个非常小的模型类和一个更大的数据映射器类。但由于我的大多数应用程序都是数据库交互,我认为这并不是那么糟糕。这是代码味道吗?

  4. 感谢。

1 个答案:

答案 0 :(得分:1)

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

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

您需要在UserBusiness以及User和UserDataMapper中进行验证。这样做的原因是你正在验证不同的东西。 UserBusiness中的验证规则将更加特定于业务,是限制应用程序规则的用户名(例如,大于8个字符可以是规则)。用户可以在不应该为空时验证字段是否为空。 UserDataMapper可以验证用户名是唯一的还是某些此类数据规则。您没有必要将验证规则限制为一个类。

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