我有两个班,即 用户&用户配置
用户包含(少数属性): -
和 UserProfile包含(其余所有属性): -
我在数据库中有两个对应这些类的表,即User_table& User_profile_table 现在我想要的是设计这些类,使其产生完美的OOP概念。
我的问题是在二传手和旁边。 getter方法在这些类中我需要的其他方法是什么。
我打算放一个我只需要使用数据库,如: -
对于像这样的用户类方法 - saveUser() - retriveUser()
与UserProfile类似
我应该将处理数据库的代码放在saveUser和retriveUser方法中吗? 如果没有那么我该如何处理这些代码(我应该在哪里编写处理数据库的代码)?
答案 0 :(得分:3)
某些类是值类型,表示一段数据。对于这些,吸气剂和制定者可能就是你所需要的。
使用getter / setter而不是公共字段会留下以后更改表示的可能性,而不会影响调用者。
每个班级都应该有一个single responsibility。如果它代表用户个人资料,那就应该做。您可以在其他类中添加其他功能 - 例如,UserValidator。
在某些时候,您可能会对对象关系映射(ORM)工具感兴趣,例如hibernate和ibatis。
答案 1 :(得分:2)
我会让你更改你的表名:“user”和“user_profile”应该足够了,除非你有一个命名约定强迫你这样命名。
什么可能有用?
您的申请会告诉您其他人。当你发现自己调用一个getter并操纵你得到的东西时,你应该把它看作是一个将行为封装在一个对象中的机会。
答案 2 :(得分:2)
没有“完美”的答案。模型总是取决于整体环境(你比任何人都知道的更多)。但是,您在下面提供的信息很少,我可以看到一些方法是User
的一部分存储库界面
答案 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。