UML类图关系类型问题

时间:2009-03-06 12:07:44

标签: uml

我有一个包含以下方法的数据类:

  • ExecuteUDIQuery(字符串查询)
  • ExecuteSelectQuery(字符串查询)
  • ExecuteSP(string anme,string [,] params)

我有很多使用数据类的类。现在我想创建一个类图,但我不知道类与数据类有什么样的关系。它是复合材料吗?是1:1还是..?

使用数据类的类的示例是Staff类。这个类有一个方法Load(),它将使用staff成员的Id加载一个staff对象。此方法包含一个传递给Data类的ExecuteSelectQuery(字符串查询)方法的查询。

编辑: 数据类不是静态的。但是,我有疑虑。我实际上不知道该怎么做。关键是,它唯一能做的就是执行查询并返回结果。

8 个答案:

答案 0 :(得分:3)

我建议使用 用法 依赖关系。

有关简要说明,请参阅here

答案 1 :(得分:1)

我会查询你的课程的命名。一个类名通常应该是一个单数名词。实例

  • 窗口
  • 交易

数据是复数,无论如何我认为它应该是数据库。

同样对于工作人员 - 再次是复数,我认为它应该是MemberOfStaff。除非它当然是一份工作人员名单,在这种情况下我会称之为部门,项目或部门 - 无论您的问题域名是什么。

你会发现,为课程提供好名字是非常困难的,但这是非常值得的。

答案 2 :(得分:0)

聚合,复合和1对1关系之间的区别有点模糊,有些随意。

如果一个类拥有另一个类(负责生命周期),我使用聚合(开放菱形)。

在所有其他情况下,我使用1对1关系。

答案 3 :(得分:0)

该类是由使用它的类实例化还是静态方法? 如果它们是静态的,我会将其表示为非限定依赖项(从使用数据类的类指向数据类的虚线箭头)

如果使用数据类的类创建自己的该类的私有实例,则这将是1:1组合(假设数据类实例的生命周期与使用它的对象相关联)

答案 4 :(得分:0)

我无法避免评论您的整体设计,我会尝试将Load方法移出Staff类,以便此类不直接依赖于Data类。

在您现有设计的范围内,我建议如下: 如果staff类包含数据类的实例变量,那么它是一个关联。如果实例化数据类只是为了检索实例,它只是给定类型的依赖,就像@toolkit所说的那样。

答案 5 :(得分:0)

数据不足。

给我们一些课程大纲或其他内容。从我所看到的,我实际上不会称之为数据类(它看起来更像是数据访问器),听起来像可能是一个单身人士(很多) :1,聚合或关联),或者如果instanced将是1:1组件。

答案 6 :(得分:0)

  

现在我想创建一个类图,但我不知道类与数据类有什么样的关系。

我们也没有 - 您只描述了Data类,而没有说出Staff如何获取它使用的数据。

如果Staff保留数据类的一个或多个实例,那么Staff和Data之间存在关联,或者Staff具有Data类型的属性(如果Data具有值语义)。

如果多个Staff实例引用了Data实例,并且它们的生命周期依赖于Staff实例引用,那么这可能会显示为聚合关系。如果数据实例未在Staff实例之间共享,并且它们的生命周期取决于被引用,则可以将其显示为组合关系。

如果X没有保留它使用的数据实例,那么使用关系是合适的。

答案 7 :(得分:0)

依赖性和使用性是两种最弱的“连接器”。您可以考虑使用构造型,关键字来优化关系。您可能会发现实例化,调用,创建,发送构造型都有效。没有更多的信息虽然正确的答案似乎是用法。