【问题标题】:What is the relationships between Android-Activity and Android-Fragment; Activity/Fragment and ViewModel in UML class diagram?Android-Activity和Android-Fragment有什么关系; UML 类图中的 Activity/Fragment 和 ViewModel?
【发布时间】:2020-07-16 05:03:01
【问题描述】:

让我们简要地看一下这些术语的简要说明。

  1. Android-Activity 是独立的,它可以自己呈现视图。
  2. Android-Fragment 不能独立运行,需要一个 Android-activity 作为其宿主,这意味着当 Android-activity 被销毁/被销毁时,Android-fragment 也会被销毁。 Android-fragment 没有严格指定应该或可以托管哪个 Android-activity,只要它是 Android-activity 就可以了。
  3. Android-activity 和 Android-fragment 都可以有 ViewModel。
  4. ViewModel 始终依赖于 Android-activity 或 Android-fragment 生命周期,这意味着当 Android-activity/Android-fragment 被销毁时,ViewModel 也将被销毁(配置更改除外)。李>

让我们看看 UML 类图中定义的一些关系。

  1. 组成(不确定,因为 Android-activity 不依赖于 Android-fragment)
  2. 聚合(不确定,因为如果 Android-activity 与 ViewModel 销毁相同,Android-fragment 将被销毁,聚合鼓励双方可以使用自己的)
  3. 关联(可能是或否?)
  4. 依赖关系(可能是或否?)
  5. 泛化(绝对没有)
  6. 实现(绝对没有)

现在,要在 UML 类图上对它们进行建模,有一些问题:

  • Android-activity 和 Android-fragment 有什么关系?
  • Android-activity/Android-fragment 与 ViewModel 有什么关系?

【问题讨论】:

  • “这意味着当活动/片段被破坏时,视图模型也被破坏”,不,如果配置发生变化,如旋转设备活动和片段破坏但视图模型仍然存在
  • 你的问题没有任何问题,考虑到我们每天看到的糟糕帖子的数量,这个帖子的定义和研究都很好,所以我删除了你帖子的顶部。我不完全确定这篇文章是否属于堆栈溢出,它可能会被更有知识的人迁移:)
  • 我编辑了您的问题以添加前缀“Android-”,以免与 UML-activity 和 UML-(combined)fragment 混淆
  • @CôngHải 你确定吗?在那种情况下,答案也是错误的
  • 您的问题隐含地认为 Android-activity 和 Android-fragment 是通过 UML 类建模的,您确定吗?

标签: android android-fragments android-activity uml class-diagram


【解决方案1】:

在这两种情况下,适当的关系都是组合,因为当父级被销毁时,子级也被销毁。

Multiplicity 1 表示每个 Fragment 都需要一个 Activity。

多重性0..*表示多个Fragment可以属于同一个Activity,但一个Activity不一定有任何Fragment。

ViewModel 的关系如下:

更新:在您的问题中,您添加了配置更改的例外。在这种情况下,与 ViewModel 的关系不是组合。但是如果你不想让这个异常影响你的模型,你可以在图表中添加一个注释来解释这个异常。

【讨论】:

  • 考虑到你已经给出了答案并且你在两个平台上,你认为这个问题对 SO 来说是题外话吗?也许它不适合软件工程吗?我认为这更像是一个理论问题
  • 我同意你的观点,但过去曾有过一些争论。一些 UML 专家在 SO 而不是 SE 上享有盛誉,他们想继续在这里。
  • @www.admiraalit.nl 感谢您的回答,我还在学习 UML 类图。你的意思是每次有一个类(例如:B类)依赖于另一个类(例如:A类)并且同时被销毁,即使A可以在没有B的情况下独立运行(或者当A到达它的寿命限制)是否会认为B是A类的组成?所以他们的关系是组合的,你是这个意思吗?
  • 是的,我就是这个意思。
  • 在 UML 中,如果(实现)A 类引用了 B 类,我们说 A 类依赖于 B 类,即如果不实现 B 类就不能实现 A 类。在你的问题中,您写道,Activity 不依赖于 Fragment。如果这只是意味着 Activity 可能有零个 Fragment,那么请忘记我关于十字架的评论。如果您的意思是说 Activity 类对 Fragment 类没有任何了解,那么我对十字架的评论是相关的。但即便如此,十字架也并不经常使用。
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多