【问题标题】:Is there a better way to model in UML?有没有更好的方法在 UML 中建模?
【发布时间】:2013-08-06 04:51:06
【问题描述】:

我正在尝试创建一个模型,使我能够捕获给定组织中的所有者、用户和资产。我似乎遇到了一个绊脚石,因为我无法回答以下问题,也不确定我是否正确建模。

  1. 如何表达给定资产的所有权和用户?
  2. 如何表达对象的所有权和使用值,例如服务器对象的供应商值为 IBM,归 ABC Corp 所有,由 DEF 用户使用。
  3. 有没有一种方法可以进一步解耦公共属性或属性,例如姓名,地点?是否需要进一步解耦?
  4. 如何评估行为约束,例如如果用户离开组织或资产损坏会怎样?如果不在模型中,我应该在哪里获取这些信息?

模型示例

编辑

进一步回答我已经更新了我的模型。不确定它是否走在正确的道路上。

【问题讨论】:

    标签: uml


    【解决方案1】:

    您的设计似乎与您对问题的描述相吻合。对于问题 4,这实际上取决于您想用系统捕获什么。如果资产损坏,是否还需要在系统中进行记录?如果一个用户离开了它的组织,你想在系统的内存中存储什么?

    对于问题 3,您可以使用一个通用的抽象类,如下所示:

    asset ownership UML Class diagram http://app.genmymodel.com/engine/xaelis/assetOwnership.jpg

    如果你想复制和调整这个模型,你可以使用这个link

    【讨论】:

    • 感谢赛利斯。有比实体更好的术语吗?我开始使用与您建议的方法相同的方法,但是我向模型展示的人被术语实体混淆了。我想捕获诸如损坏之类的约束的原因是因为它为诸如当时的用户、损坏和可能替换的内容等方面提供了历史背景。最后,我怎样才能让对象显示运行时值用于所有权、用户等,尤其是当资产不是用户的专业化或泛化时。
    • 仅仅因为两个类共享一个名称和位置而使用一个公共基础是非常值得怀疑的。它们的子类应该有一些共同的语义;它不应该只是为了节省您打字的方便。但是,您的模型具有多重性并定义了一些角色,这很好。他们可能对也可能不对——这取决于要求。但好在它提出了问题。
    • 是的@sfinnie,如果通用类只是为了节省打字,这是一个糟糕的设计。例如,如果 LocalizableElement 上有一些常见的行为或关系,则可以证明这一点。
    • @Xaelis:是的 - 正是 - 一些常见的语义。 OP在这种情况下没有提及,根据我们所知道的,这是不合理的。当然,可能会发现其他激发基类的要求。 如果有必要,也许在这种情况下更好的名称是“党”——这将与党-角色模式命名法保持一致。
    • @PeanutsMonkey:Asset 的基类很可能是有意义的。不确定您是否需要服务器、桌面和笔记本电脑的单独子类,因为它们都具有相同的属性。根据我的回答,一个子类——比如“计算机”或类似的——就足够了。我在质疑 Xaelis 模型中是否需要“实体”基类。根据你所说的,没有明显的需要。如果您确实需要它,请查看 Party-Role 模式以获取有关命名的想法。 hth.
    【解决方案2】:

    编辑:响应 OP cmets:

    回复。记录所有权等信息这是一个例子:

    关键是获取/出售日期等是资产与组织/用户之间关系的属性。它们不是参与课程的属性。在示例中,资产使用允许许多并发用户,而资产所有权在任何给定点仅允许 1 个所有者。这是由多样性控制的。

    需要显示所有者和用户。看到资产不是所有者或用户类的子类或子类型,我将如何证明这一点?

    您的显示页面将根据关系从必要的类中提取信息。一个页面不限于一次显示一个班级的信息。

    例如,owner 下的 name 属性将具有组织的名称,但 server 下的 name 属性将具有服务器的名称,即 FQDN。

    好的:那么您可以为这两个名称使用不同的数据类型。可能是组织的简单字符串和资产的特定 FQDN。但请记住:这意味着 所有 资产必须使用 FQDN 命名。如果仅使用 FQDN 命名计算机,则将名称属性放在计算机上,而不是资产上。顺便说一句:组织拥有独立于资产类型的资产命名方案是很常见的。唯一的要求是它是独一无二的。例如,我已经在上面的 diag 中展示了这一点。 hth。

    结束编辑

    回答您的具体问题:

    我如何表达给定资产的所有权 [..]?

    大概这就是Organisation - Asset 协会所涵盖的内容?如果是这样,多重性是多少?大概:

    • 每项资产仅由一个组织拥有或者一项资产可以共同拥有吗?
    • 每个组织都拥有许多(零个或多个)资产?
    • 您是否需要记录有关所有权的任何信息 - 例如,资产何时被收购、何时被出售等。如果是这样,您将需要一个关联类来捕获这些信息。

    我如何表达给定资产的用户?

    与上述类似的问题。许多用户可以使用相同的资产吗?同时还是顺序?您是否需要记录资产使用的开始/结束日期?

    如何表示 [..] 服务器对象的供应商值为 IBM

    您使用Asset.vendor 属性对此进行了建模 - 这可能就足够了。但是:您需要为供应商捕获任何详细信息吗?例如联系信息、地址、支持合同等。如果是这样,您可能需要拆分一个单独的 Vendor 类。

    有没有办法可以进一步解耦常见的属性或属性,例如姓名,地点?是否需要进一步解耦?

    所有 3 个子类具有相同的属性。闻起来很糟糕——这表明它们并没有真正的不同。你可以使用一个类(Asset)来捕获所有属性 - 并且有一个额外的“assetType”(或类似的)具有合法值“Server”、“Destop”、“Laptop”?但是:您是否需要跟踪不是某种类型的计算机的资产?如果是这样,单个资产类就不够灵活。

    我如何评估行为约束,例如如果用户离开组织或资产损坏会怎样?

    取决于您的业务需求。如果用户离开,需要发生什么?资产是否应该没有用户?在这种情况下,关系需要是可选的 (0..*)。

    资产受损意味着什么?需要记录损失吗?如果是这样,您需要另一个课程。

    如果不在模型中,我在哪里获取这些信息?

    如果它不在模型中,则无法记录或更改它。所以我会非常警惕任何你认为需要捕捉的不在模型中的东西。这更有可能意味着您的模型不完整和/或您缺少需求。

    一般来说,我建议您进一步考虑关联的命名和多样性。这样做无疑会引发有关需求和/或域约束的问题。这将帮助您获得一个更有可能满足要求的模型。

    第一次。

    【讨论】:

    • 感谢您的详细回复。在此阶段不要求资产可以共同拥有。这并不是说它永远不会发生。如何模拟它发生的可能性?我不明白你的评论Do you need to record any info about the ownership - for example, when the asset was acquired, when it was sold, etc. If so you'll need an association class to capture that.我确实需要记录这些信息。
    • 至于你的问题Similar questions to above. Can many users use the same asset? Concurrently or sequentially? 是的,多个用户可以使用同一个资产,它可能同时发生或顺序发生。例如,数据库服务器会有并发用户。
    • 至于我关于运行时对象的问题,我的意思是说需要显示所有者和用户。看到资产不是所有者或用户类的子类或子类型,我将如何证明这一点?
    • 对于具有共同属性的类,这是正确的,但是它们会有不同的值。例如,所有者下的名称属性将具有组织的名称,但服务器下的名称属性将具有服务器的名称,即 FQDN。
    • 关联类是具体的类——不是抽象的。它们适用于 association 具有不属于参与类的属性的情况。尝试将日期放在参与课程中,并通过一些示例进行操作。这应该说明为什么属性属于关联 - 而不是参与者。
    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2019-12-09
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多