2017-07-02 20 views
-1

我必须为Android编写一个应用程序,我在问自己是否有更好的方法来设计我的应用程序。M:N是面向对象的不好的风格吗?管理m:n关系有没有更好的办法?

我的问题:我必须创建包含Person的组。在我的第一个活动中,我想展示人员属于的所有组。当我点击一个组时,我想显示所有属于这个组的成员。

问:那么我需要M:N关系吗?这是一个糟糕的设计,是他们设计应用程序的更好的想法吗?

public class Person { 
private List<Group> allGroups 
} 


public Group { 
private List<Person> allGroupMembers 
} 

我已经搜索了大约30分钟,但无法找到我的问题的答案。

我期待着您的帮助。

+0

如果你想显示的所有组人的一部分,一组中的所有的人的话,好像自然你的Person类应该提供一个返回组列表的方法,你的Group类应该提供一个返回人员列表的方法。我不清楚你为什么会认为“OOP”可能暗示你做了不同的事情。 – ajb

+0

但你有类似的东西[这里](https://stackoverflow.com/questions/1103693/how-to-model-a-many-to-many-relationship-in-code) – Isac

+0

@Isac是的,这是与来自卡里姆的答案相同。这非常有帮助。谢谢:) –

回答

0

您应该创建三类:

public class Person { 
private int id_person; (primary key) 
.... 
} 


public class Group { 
private int id_group; (primary key) 
...... 
} 

public class PersonGroup { 
private int id_person_group (primary key) 
private int id_person 
private int id_group 
.... 
} 

PersonGroupe代表个人和团体之间的关系。

因此,如果一个人在狮X存在,你应该有PersonGroup类的实例

所以,如果你想获得所有组的人,X是的一部分。如果你想获得的所有的人的狮Y是的一部分,您使用此查询(

Select * from Group 
Join PersonGroupe on PersonGroupe.id_group = Group.id_group 
where PersonGroupe.id_person = X.id_person (id_person of X) 

Select * from Person 
Join PersonGroupe on PersonGroupe.id_person = Person.id_person 
where Groupe.id_group = Y.id_group (id_group of Y) 
+0

你为什么要提供SQL。 OP没有提及任何关系数据库 - 只是OOP。 –

+0

我知道..但我只是解释SQL中的设计应用程序。因为使用关系数据库很容易理解它。另外,这三个类足以解决您的问题。 – Karim

+1

个人而言,我非常欣赏你使用SQL来帮助请求用户获得更好的视角。 – 2017-07-02 01:59:14

0

使用子列表中的每个类或单独的连接类是见仁见智。

你必须在每个班级列表时遇到的最大问题就是循环依赖。

相关问题