Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中更好的OOPs概念_Java_Oop - Fatal编程技术网

java中更好的OOPs概念

java中更好的OOPs概念,java,oop,Java,Oop,我有两门课,分别是 用户和用户配置文件 用户包含(一些属性,如):- 用户ID 罗吉尼 密码 及 UserProfile包含(其他所有属性,如):- 用户ID 名字 地址 流动的 多巴哥 电子邮件 我在数据库中有两个与这些类对应的表,即User\u table和User\u profile\u table 现在我想要的是以这样一种方式来设计这些类,从而产生一个完美的OOPs概念 我的问题是,除了setter和getter方法之外,我还需要在这些类中使用哪些其他方法 我打算放一个 Use

我有两门课,分别是 用户和用户配置文件

用户包含(一些属性,如):-

  • 用户ID
  • 罗吉尼
  • 密码
及 UserProfile包含(其他所有属性,如):-

  • 用户ID
  • 名字
  • 地址
  • 流动的
  • 多巴哥
  • 电子邮件
我在数据库中有两个与这些类对应的表,即User\u table和User\u profile\u table 现在我想要的是以这样一种方式来设计这些类,从而产生一个完美的OOPs概念

我的问题是,除了setter和getter方法之外,我还需要在这些类中使用哪些其他方法

我打算放一个

  • UserProfile类中的构造函数UserProfile(Integer userId),它将获取userId,从User\u profile\u表中获取值并初始化所有属性
  • 另一个构造函数UserProfile(),不带参数,用于初始化具有空值的对象
  • saveUserProfile()用于将配置文件保存到数据库中
我只需要处理数据库,如:-

对于用户类方法,如 -saveUser() -检索用户()

与UserProfile类似

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

我会让您更改表名:“user”和“user\u profile”应该足够了,除非您有一个命名约定,强制您这样命名它们

什么可能有用

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

你的申请将告诉你其他人。当您发现自己调用getter并处理返回的内容时,您应该将其视为将行为封装在对象内的机会。

有些类是值类型,表示一段数据。对于这些,getter和setter可能是您所需要的全部

使用getter/setter而不是public字段可以在不影响调用方的情况下更改表示形式

每节课都应该有一节课。如果它代表一个用户配置文件,那么它就应该这样做。您可以在其他类中放置额外的功能——例如,UserValidator

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

没有“完美”的答案。模型始终取决于总体环境(您比任何人都了解)。但是,通过您在下面提供的少量信息,我可以看到一些方法是用户体验的一部分

  • 验证()
  • 未经验证()
存储库接口

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

如果你问我,我会把唯一的功能放在数据传输对象中,就是验证和方法,让你检索某种类型的对象表示(hashcode、toString、toJson,如果简单的话)。身份验证、数据库访问等是独立的关注点,因此它们属于其他组件。

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

就OOPs和我的知识范围而言。 我想给你一些建议:

1) 请记住,您的域名必须告知,而不是询问

正如我在您的问题中所看到的,在表层次结构中,User\u表比User\u profile\u表更重要。所以,您应该告诉User\u profile\u表有关User的信息,而不是从中询问User的对象

2) 注意是否存在双向关联,但我看不出有,不要将两个对象的状态耦合得太紧


请参阅。

Nice post,但我不同意验证不属于数据传输对象的部分。定义对象是否包含有效数据的规则集肯定存在。这就是Bean验证框架背后的想法。()@vstoyanov-谢谢。没错,您可以选择在类中包含简单验证。将验证放在别处的一个优点是,如果可以有多个并发的验证规则。在你的帖子中,关于独立的关注点,比如属于其他类的验证,你也是对的。