在Java中更好的OOP概念

时间:2010-12-24 17:45:10

标签: java oop

我有两个班,即 用户&用户配置

用户包含(少数属性): -

  • 用户id
  • 登录ID
  • 密码

和 UserProfile包含(其余所有属性): -

  • 用户id
  • 名称
  • 地址
  • 移动
  • DOB
  • 电子邮件

我在数据库中有两个对应这些类的表,即User_table& User_profile_table 现在我想要的是设计这些类,使其产生完美的OOP概念。

我的问题是在二传手和旁边。 getter方法在这些类中我需要的其他方法是什么。

我打算放一个

    UserLrofile类中的
  • 构造函数UserProfile(Integer userId)将获取userId,从User_profile_table获取值并初始化所有属性。
  • 另一个构造函数UserProfile(),没有参数来初始化具有空值的对象。
  • saveUserProfile()将配置文件保存在数据库中

我只需要使用数据库,如: -

对于像这样的用户类方法   - saveUser()   - retriveUser()

与UserProfile类似

我应该将处理数据库的代码放在saveUser和retriveUser方法中吗? 如果没有那么我该如何处理这些代码(我应该在哪里编写处理数据库的代码)?

6 个答案:

答案 0 :(得分:3)

某些类是值类型,表示一段数据。对于这些,吸气剂和制定者可能就是你所需要的。

使用getter / setter而不是公共字段会留下以后更改表示的可能性,而不会影响调用者。

每个班级都应该有一个single responsibility。如果它代表用户个人资料,那就应该做。您可以在其他类中添加其他功能 - 例如,UserValidator。

在某些时候,您可能会对对象关系映射(ORM)工具感兴趣,例如hibernate和ibatis。

答案 1 :(得分:2)

我会让你更改你的表名:“user”和“user_profile”应该足够了,除非你有一个命名约定强迫你这样命名。

什么可能有用?

  • 根据用户DOB的当前或给定日期计算年龄的两种方法。
  • 验证以确保用户的凭据是唯一的并符合您的标准。

您的申请会告诉您其他人。当你发现自己调用一个getter并操纵你得到的东西时,你应该把它看作是一个将行为封装在一个对象中的机会。

答案 2 :(得分:2)

没有“完美”的答案。模型总是取决于整体环境(你比任何人都知道的更多)。但是,您在下面提供的信息很少,我可以看到一些方法是User

的一部分
  • 认证()
  • isAuthenticated()

存储库界面

  • addUser(用户u)
  • findUserById(...)

答案 3 :(得分:2)

如果你问我,我将在数据传输对象中放置的唯一功能是验证和方法,它允许您检索某种类型的对象表示(hashcode,toString,toJson,如果它很简单)。诸如身份验证,数据库访问等事情是单独的问题,因此它们属于其他组件。

答案 4 :(得分:0)

根据您的方便,最重要的部分还可以包括toString(), equals(), hashCode() ......这是生产级别中最重要的方法。

答案 5 :(得分:0)

考虑OOP并考虑我的知识范围。 我想给你一些建议:

1)记住你的域必须告诉而不要问。

正如我在您的问题中所看到的,在您的表层次结构中,User_table比User_profile_table高度重要。因此,您应该告诉User_profile_table关于用户,而不是询问用户的对象。

2)如果存在双向关联,请注意,但是我没有看到,你没有把两个对象的状态过紧联系。

参考http://priyaaank.tumblr.com/post/95095211355/objects-that-are-loose-discrete