【问题标题】:Check my UML Class Diagram检查我的 UML 类图
【发布时间】:2011-01-22 14:52:43
【问题描述】:

谁能检查我的类图,因为我不太擅长绘制这种类型的 uml 图

  1. 用户可以是个人用户或企业用户
  2. 管理员是一种特殊类型的 PersonalUser
  3. 个人用户或企业用户可以创建多个拍卖
  4. 但拍卖只能由一位个人用户或一位企业用户创建
  5. 没有 PersonalUser 或 BusinessUser 就无法进行拍卖
  6. 拍卖只能包含一件物品
  7. 一件物品只能参加一次拍卖
  8. 没有拍卖,物品就无法存在
  9. 没有物品就无法进行拍卖
  10. 一个项目有一个类别
  11. 类别可以有很多项目
  12. 没有类别就不能存在项目
  13. 一个类别可以有一个父类别,但这不是强制性的
  14. 一个类别可以有很多属性
  15. 但一个属性只适用于一个类别
  16. 一个属性不能存在一个类别
  17. 一个属性可以有多个属性选项
  18. 但一个 AttributeOption 只链接到一个 Attribute
  19. 没有属性就不能存在 AttributeOption
  20. 一个拍卖可以有多个出价
  21. 出价仅限于一次拍卖
  22. 没有拍卖和个人用户或商业用户,投标就无法存在
  23. 一个Item可以有很多图片
  24. 图片只能用于一次物品,没有物品就不能存在图片
  25. 一个用户可以创建多个论坛主题,但一个论坛主题只能由一个用户创建
  26. ForumTopics 可以包含一个或多个 ForumMessage
  27. ForumTopic 不能没有 User 存在,ForumMessage 不能没有 ForumTopic 存在
  28. 一个 BusinessUser 可以有多个 BusinessContactNumber,但一个 BusinessContactNumber 仅适用于一个 BusinessUser
  29. BusinessContactNumber 不能没有企业就存在

【问题讨论】:

    标签: uml class-diagram


    【解决方案1】:

    乍一看,您使用了很多聚合。这是相当少见的。我从来没有见过一个很好的例子来说明什么时候聚合是合理的。它通常是一个简单的关联(没有整体关系)或组合(当整体被删除时,部分被删除)。

    Cannot exist without 并不意味着聚合。适当的多重性就足够了。 可以创建并不意味着聚合。除非创建者和创建之间存在关联(在这种情况下,创建不需要明确提及),否则创建通常使用适当的定型使用关系(即虚线箭头)建模。

    4 但拍卖只能由一个个人用户或一个企业用户创建。

    那么 Auction-PersonalUser 关联的多重性在 PersonalUser 端不能为 1(因为 Auction 可能是由 BusinessUser 创建的)并且 Auction-BusinessUser 关联的多重性在 BusinessUser 端不能是 1(对于很多同理)。使用 0..1 作为多重性,但要注意我将写的关于 3 的内容。

    3 PersonalUser 或 BusinessUser 可以创建多个拍卖

    这相当于一个用户可以创建多个拍卖

    6 拍卖只能包含一件物品

    7 一件物品只能参加一次拍卖

    8 没有拍卖,物品就无法存在

    9 没有物品就无法进行拍卖

    然后在 Item 和 Auction 之间有一个单一的关联,两端的重数为 1。不要对其进行聚合,也不要为它使用两个关联。

    13 一个类别可以有一个父类别,但这不是强制性的

    如果您将关联标记为结束,那将会很清楚。

    25 一个用户可以创建多个论坛主题,但一个论坛主题只能由一个用户创建

    这只是模糊地与拍卖相关,也可能独立于拍卖而存在。将论坛内容放入单独的包中。那么也许拍卖的东西和用户的东西也应该得到一个单独的包。

    顺便说一句:你没有提到投标服务。似乎只是为了模拟这些对象的概念并不凭空存在,它们实际上被某些软件使用。在这种情况下,请忽略它。

    【讨论】:

    • 您好,感谢您的详细说明,我会进行更正。 BiddingService 是实现许多方法的类,例如用户可以登录,登录检查方法由投标服务处理,投标服务处理删除论坛主题,创建论坛帖子等整体方法,投标服务通过连接数据库,我应该省略吗??
    • @Noor 不一定。但是你可能应该减少它的关联。当转换为代码时,关联通常会转换为属性。 Bidding 服务是否具有您输入的所有关联的属性?
    • @Osward No Bidding Service 根本没有任何属性,它只实现了 checkcredentials 等方法。
    • @Noor 然后你应该删除关联并将 uses-relations 从 BiddingService 添加到适当的类。
    • @Noor: BiddingService 让我担心。听起来它包含 - 或者至少是路线 - 模型的大部分行为?它具有“贫血域模型”反模式的所有特征......
    【解决方案2】:

    我基本同意之前的回答,所以我只提出不同之处和补充意见。

    更准确地说,“可以创建...”应该使用依赖关系(而不是使用)来描述。

    1. 如果应该存在一些区别,它并不完全等同。如果您出于某种原因想要避免枚举,则可以将 User 类与枚举或 UserType 类一起使用。

    6.-9。所以不能存在 Auction 或 Item 对象。要么以一种方式放松关系并使用组合,要么将这两者合并为一个类或创建一个关联类。

    1. 也许一个类别可以包含多个子类别?如果为 true,则编辑相应的多重性。

    2. 同4.,查看其他答案。

    还要重新考虑设计中的类数量。类不仅仅是数据持有者,它们应该有行为。 AttributeOption 或 Attribute 或 BusinessContact 等的行为是什么? Getter 和 setter 不计入行为......我猜你计划在 BidingService 中拥有所有这些行为,所以我建议你删除它并根据哪些对象类应该负责通过各自的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多