Java 具有依赖关系的父子关系表示
在我正在开发的Android应用程序中,我不太确定我认为的模型结构在易用性和低复杂性方面是否是最好的 我需要代表以下关系:Java 具有依赖关系的父子关系表示,java,android,oop,structure,relationship,Java,Android,Oop,Structure,Relationship,在我正在开发的Android应用程序中,我不太确定我认为的模型结构在易用性和低复杂性方面是否是最好的 我需要代表以下关系: TypeA(可以看作是一个保险库,在整个程序中只有一个)保存着TypeB 每个TypeB(其中可以有0..*)都可以保存TypeC 每个TypeC(与TypeB相关;0..*)都可以保存键入的对象 TypeD(与TypeC,0相关) 由于TypeC或TypeD的实例都与已定义的父级密切相关,因此我想到了以下结构(不包括title-Strings、program-rela
(可以看作是一个保险库,在整个程序中只有一个)保存着TypeA
TypeB
- 每个
(其中可以有0..*)都可以保存TypeB
TypeC
- 每个
(与TypeC
相关;0..*)都可以保存TypeB
键入的对象
(与TypeD
,0相关)TypeC
String
s、program-relatedboolean
s等成员变量,用于查看CheckBox
es,…:
:TypeA
Singleton
- 成员:
ArrayList
- 方法:
,addTypeB(UUID)
,removeTypeB(UUID)
,getTypeB
getTypeB(UUID)
- 成员:
:TypeB
class
- 成员:
,ArrayList
UUID-mId
- 方法:
,addTypeC(UUID)
,removeTypeC(UUID)
,getTypeCs
getTypeC(UUID)
- 成员:
:TypeC
class
- 成员:
,ArrayList
,UUID mId
UUID mParentTypeBId
- 方法:
,addTypeD(UUID)
,removeTypeD(UUID)
,getTypeDs
getTypeD(UUID)
- 成员:
:键入的
类
- 成员:
,UUID mId
,UUID mParentTypeBId
UUID mParentTypeCId
- 成员:
mTypeD= TypeA.getInstance(getActivity())
.getTypeB(typeBId)
.getTypeC(typeCId)
.getTypeD(typeDId);
有没有更好的方法将给定的关系或基本上任何这类关系转化为代码?这个问题可能甚至不是Java特有的,而是与许多面向对象编程语言有关
编辑:对于TypeA上面的每种类型,我都有三个列表视图,即TypeB、TypeC、TypeD,其中包含所有当前实例以及打开每种类型的单个实例的详细视图的可能性。这就是为什么我首先考虑使用我提供的模式
EDIT2:启动应用程序时,如果尚未创建数据,则会向用户显示一个空的列表视图
。在应用程序启动时打开的列表视图
表示可以在TypeA的数组列表
中找到的TypeB的所有实例的列表。如果用户点击“新建”按钮,创建一个新的TypeB实例,用户重定向该特定TypeB的详细视图。在离开详细视图时,他/她被重定向回TypeB实例列表(此时仅填充了刚刚创建的一个实例)
点击列表中的一个TypeB
实例时,用户将被定向到a(n空)ListView
对于以前未连接到TypeB
的TypeC
实例所属的TypeB
实例,TypeC
实例没有意义,因此必须以某种方式将TypeC
的所有实例存储在一种显示它们与一个partict的关系的方式中ularTypeB
实例
对于TypeC
->TypeC
也是一样。在TypeC
实例ListView
中创建TypeC
实例后,新创建的TypeC
实例的TypeC
详细视图将被打开,用户按下返回到TypeC的ListView
代码>实例。在点击TypeC实例时,他/她会进入TypeD
实例的ListView
,TypeD
实例也与特定的TypeC
实例密切相关;不知道父实例,它们就没有意义
为了显示列表视图
,我让ArrayAdapter
遍历给定类型的所有ArrayList
项。用于删除(通过长按项-->ContextualActionBar
)或编辑(与上一操作相同的交互)我调用父对象的数组列表的.remove
方法,或者分别打开详细视图。您总是可以这样对数据进行非规范化-您不需要只将其存储在一个位置,您可以将其存储在多个位置。例如,您可以将UUID哈希映射到类型化对象,从而允许您直接查找数据UUID键入的y。问题是,您需要确保始终更新存储它的所有位置-如果您要删除类型d,并且它位于此树结构和hashmap中,您需要将其从两个视图中删除,否则数据的两个视图将不同步。您的意思是将hashmap作为我当前结构的附加手段吗?如果我理解正确,那么我就可以通过检查hashmap中我传递给Android活动/片段的指定UUID来获得的单个实例,例如,TypeD
;如果我想获得所有TypeD
s的实例,这些实例总是属于TypeC
的某个实例,我仍然需要查阅TypeC
-属于TypeB
-ArrayList
的某个实例,通过其UUID指定TypeC
父(TypeB)。是否正确?是的。当然,您也可以将类型C反规范化