2017-07-02 8 views
-1

私はAndroid用のアプリケーションを作成する必要があり、私は自分のアプリケーションを設計するためのより良い方法があるかどうか尋ねています。M:NはOOPの悪いスタイルですか? 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

次の3つのクラスを作成する必要があります。

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は、人とグループ間の関係を表します。

人物AがあるGroupe Xに存在する場合は、人Xがの一部であるすべてのグループを取得したいのであれば、あなたはそうPersonGroupクラス

のインスタンスを持つ必要があります。各クラスの子の一覧または別のJOINのクラスを使用して

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のデザインアプリを説明するだろう。なぜなら、リレーショナルデータベースではそれを理解するのが簡単だからです.3つのクラスは、あなたの問題を解決するのに十分です。 – Karim

+1

個人的には、尋ねるユーザーがより良い視点を得るためにSQLを使用していたという事実を本当に感謝しています。 –

0

意見の問題である:あなたはすべての人のGroupe Yは、の一部であるを取得したい場合は、このクエリ(

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

使用しますあなたが各クラスに一覧で解決しなければならない最大の問題は、循環依存である。

関連する問題