我刚开始进行应用程序开发,目前正在编写一个Android应用程序,该应用程序已经注册了用户,并提供了“挑战”列表,用户可以选择这些列表,然后将其标记为已完成/失败。
计划最终将所有用户/挑战/等数据存储在数据库中,尽管我还没有实现。
我遇到的问题是-在我当前的设计中,每个用户都有列出变量,其中包含他们当前的挑战和已完成的挑战,例如。两个ArrayList字段。
用户当前从不同挑战对象的列表视图中选择挑战,然后将其添加到用户的CurrentChallenges列表中。
我没有考虑的是如何组织这种结构,以便当用户进行挑战时,他们拥有该挑战的自己的唯一副本,可以将其独立标记为已完成等,而每个选择的用户在此刻都会说,挑战1,就是与选择挑战1的每个其他用户添加具有相同ID等的相同挑战。
我以为我可以让每个不同的挑战都成为其自己的挑战子类,并为每个选择该挑战类型的用户分配一个该类的不同实例,但是由于所有不同的类,这似乎是一种非常混乱/低效的方法大致相同。
有没有人对此案有任何好的想法或设计模式?最好是一种与以后将这些挑战存储在数据库中并且大概使用ORM兼容的解决方案。
非常感谢您的任何建议,
Ë
最佳答案
我会将针对每个用户的挑战的各个方面转移到新的Attempt
类中。因此,Challenge
可能具有name
,description
等变量,而Attempt
可能具有inProgress
,completed
等。显然,这些只是示例,用您实际存储的任何数据替换它们。
现在,在您的User
类中,您可以使用Map
记录挑战。将其设置为Map<Challenge, Attempt>
,每个User
将能够为每个Attempt
存储一个Challenge
以记录其进度。 Challenge
实例在用户之间共享,但是Attempt
和User
的每种组合都有一个Challenge
实例。
稍后实现数据库时,Challenge
,User
和Attempt
都将转换为一个表。 Attempt
对于其他两个表都具有外键。不幸的是,我没有使用ORM,所以我不确定他们是否可以正确地使用Map
。
关于java - Java/Android中的用户-挑战关系设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20303768/