【问题标题】:how to design model classes in java project如何在java项目中设计模型类
【发布时间】:2016-04-21 23:43:15
【问题描述】:

我是 jsp 的新手。我想做一个测试项目来熟悉它。

我选择做的项目是设计一个人们可以注册并为自己制作简历的网站。

每个注册的人都可以定义一些他以前做过的项目。

比如我用用户名SHT注册,定义PROJECTAPROJECTB,表示这些项目应该显示在我的简历。

顺便说一下,我想用MVC设计。

我的问题是,当我想设计模型类时,我不知道从以下场景中哪种方法最好:

1- 我首先想到的是,我可以为 Users 创建一个包含 UserIdUserName 的类,并且...
我需要另一个包含 ProjectNameProjectIdProjects 类,以及另一个包含 UserProject 的类>UserId、ProjectId,以便能够找到属于特定用户的项目。

在这个例子中,我有一个来自用户类的用户对象,用户 ID 是 1,用户名是“SHT”。

我有 2 个来自项目类的对象:

OBJECT1{ProjectId = 1, ProjectName = "PROJECTA"}

OBJECT2{ProjectId = 2, ProjectName = "PROJECTB"}

我再次从 UserProject 获得这些对象:

OBJECT1{UserId = 1, ProjectId = 1} ,

OBJECT2 {UserId =1, ProjectId = 2}

2- 第二种方式,我可以为 Projects 设置一个包含以下字段的类:ProjectIdProjectName。我又为 Users 提供了另一个类,其中包含以下字段:UserIdUserName 和用户项目列表。

例如我有这种方式:

来自项目的 2 个对象:

OBJECT1{ ProjectId = 1 , ProjectName = "PROJECTA"}

OBJECTB { ProjectId = 2, ProjectName = "PROOJECTB"}

和来自用户的对象:

USER1 { UserId = 1 , UserNAme = "SHT", ListOfProjects = {ProjectId = 1,ProjectId = 2}}

这是我想到的两种方式。但我不知道在这种情况下哪个更好。 我想也许第一种方式更好,因为稍后我可能想添加每个用户可以注册一些项目并且每个用户可以拥有技能列表等功能。有了这些功能,我认为第一种方法可能更容易处理。

谁能帮我看看哪个更好?

如果您认为有更好的方法,我将不胜感激。

提前感谢您的关注。

【问题讨论】:

  • 您的问题的答案实际上是基于您认为更合适的。一方面,第二种方法允许您在创建用户后轻松地向该用户添加更多项目,并且该用户还具有用户名,而第一个没有。我真的还是不完全确定你打算用这个项目做什么,所以很难说哪个“更好”。
  • @BenjaminLowry 感谢您的评论。恐怕第二种方法会使我的代码变得复杂。另一方面,我担心第一个会让我的代码变脏。
  • 好吧,我建议使用第二种方法,因为它可以让你有能力在未来做更多的事情。复杂性的缺点确实不会在未来对您造成严重影响,而使用过于简单的方法可能会迫使您重新设计整个项目或只是阻止您实现某些功能。

标签: java model


【解决方案1】:

我想说你想根据 3 点来判断解决方案。

  • 存储空间
  • 项目搜索时间 -> 用户
  • 用户搜索时间 -> 项目

对于您的两个解决方案,存储空间渐近相等,对于解决方案 1 中的每个 UserProject 对象,解决方案 2 中某个用户的 ListOfProjects 中都有一项。

对于进行项目 -> 用户搜索,他们的表现也同样出色,因为在解决方案 2 中,您必须检查每个用户并查看他们从事的项目,这与检查解决方案 1 中的每个 UserProject 相同。

对于做一个用户 -> 项目搜索解决方案 2 更快,因为它可以直接从有答案的用户那里获得一个列表。

我自己也会提出另外两个解决方案,我们称它们为解决方案 3 和解决方案 4。

解决方案 3: 与解决方案 2 相同,但反过来说,项目存储在其上工作的用户列表。

解决方案 4: 解决方案 2 和解决方案 3 相结合,用户存储他们正在处理的项目,而项目存储用户正在处理的项目。

所有解决方案的优缺点:

  • 解决方案 1
    • 小存储
    • 慢项目 -> 用户搜索
    • 慢速用户 -> 项目搜索
  • 解决方案 2
    • 小存储
    • 慢项目 -> 用户搜索
    • 快速用户 -> 项目搜索
  • 解决方案 3
    • 小存储
    • 快速项目 -> 用户搜索
    • 慢用户 -> 项目搜索
  • 解决方案 4
    • 大存储
    • 快速项目 -> 用户搜索
    • 快速用户 -> 项目搜索

我会说解决方案 1 绝对是最糟糕的选择,其他的取决于你的情况。

【讨论】:

  • 非常感谢您的完美解释。顺便说一句,我有一个来自解决方案 4 的问题:“项目存储哪些用户正在处理它们”是什么意思?在这个项目中,我将不得不添加用户要求做一个项目的功能。因此,通过“项目存储哪些用户正在处理它们”。你的意思是我应该把这些要求做项目的用户保存在项目类中吗?或者你的意思是我应该保存在这个类中创建项目的用户?
  • 两者,对于直接项目 -> 用户存储,您必须将每个以某种方式连接到项目的用户存储在项目对象中,就像您必须存储每个以某种方式连接到项目的项目一样直接用户的用户对象中的用户 -> 项目。
猜你喜欢
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多