我刚开始进行应用程序开发,目前正在编写一个Android应用程序,该应用程序已经注册了用户,并提供了“挑战”列表,用户可以选择这些列表,然后将其标记为已完成/失败。
计划最终将所有用户/挑战/等数据存储在数据库中,尽管我还没有实现。

我遇到的问题是-在我当前的设计中,每个用户都有列出变量,其中包含他们当前的挑战和已完成的挑战,例如。两个ArrayList字段。
用户当前从不同挑战对象的列表视图中选择挑战,然后将其添加到用户的CurrentChallenges列表中。

我没有考虑的是如何组织这种结构,以便当用户进行挑战时,他们拥有该挑战的自己的唯一副本,可以将其独立标记为已完成等,而每个选择的用户在此刻都会说,挑战1,就是与选择挑战1的每个其他用户添加具有相同ID等的相同挑战。

我以为我可以让每个不同的挑战都成为其自己的挑战子类,并为每个选择该挑战类型的用户分配一个该类的不同实例,但是由于所有不同的类,这似乎是一种非常混乱/低效的方法大致相同。

有没有人对此案有任何好的想法或设计模式?最好是一种与以后将这些挑战存储在数据库中并且大概使用ORM兼容的解决方案。

非常感谢您的任何建议,
Ë

最佳答案

我会将针对每个用户的挑战的各个方面转移到新的Attempt类中。因此,Challenge可能具有namedescription等变量,而Attempt可能具有inProgresscompleted等。显然,这些只是示例,用您实际存储的任何数据替换它们。

现在,在您的User类中,您可以使用Map记录挑战。将其设置为Map<Challenge, Attempt>,每个User将能够为每个Attempt存储一个Challenge以记录其进度。 Challenge实例在用户之间共享,但是AttemptUser的每种组合都有一个Challenge实例。



稍后实现数据库时,ChallengeUserAttempt都将转换为一个表。 Attempt对于其他两个表都具有外键。不幸的是,我没有使用ORM,所以我不确定他们是否可以正确地使用Map

关于java - Java/Android中的用户-挑战关系设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20303768/

10-09 07:20