Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有依赖关系的父子关系表示_Java_Android_Oop_Structure_Relationship - Fatal编程技术网

Java 具有依赖关系的父子关系表示

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

在我正在开发的Android应用程序中,我不太确定我认为的模型结构在易用性和低复杂性方面是否是最好的

我需要代表以下关系:

  • TypeA
    (可以看作是一个保险库,在整个程序中只有一个)保存着
    TypeB
  • 每个
    TypeB
    (其中可以有0..*)都可以保存
    TypeC
  • 每个
    TypeC
    (与
    TypeB
    相关;0..*)都可以保存
    键入的对象
  • TypeD
    (与
    TypeC
    ,0相关)
由于TypeC或TypeD的实例都与已定义的父级密切相关,因此我想到了以下结构(不包括title-
String
s、program-related
boolean
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的关系的方式中ular
TypeB
实例

对于
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反规范化