【问题标题】:Creating a Class Diagram to model a MVC application创建类图以对 MVC 应用程序建模
【发布时间】:2011-05-04 16:39:11
【问题描述】:

我正在创建一个以 Ruby on Rails 作为应用服务器并以 Java 客户端作为前端的库存系统。

项目的一部分要求我们创建一个集成的类图(一个包含所有类并显示关系的类图)。类的设计方式和我们之前学习的方法是使用 Boundary-Entity-Controller (BCE) 模式来创建适当的类,但是,因为我们使用的是 Rails,它使用一个 MVC 架构,它们直接冲突,因为这两种模式之间没有 1:1 的相关性,特别是考虑到在我们的例子中的“视图”只是 XML,所以不会有视图的类图和 Boundary 类共享控制器的输入和视图的输出

到目前为止,我们的类图只包含 Rails 相关的类(因为客户端类大多只是 UI)。这是我们到目前为止所做的结果(忽略我们有一百万个 getter 和 setter 的事实——这是我们实际上不会以这种方式实现的项目的要求;我们将使用 @987654322 @):

那么,我们是否走在正确的轨道上?有什么要添加/编辑/移动的吗?我们如何正确地建模我们将使用的内置 ActiveRecord 验证器方法(例如 validates_numericality_of :price)?

非常感谢任何帮助!谢谢。

【问题讨论】:

    标签: ruby-on-rails model-view-controller uml class-diagram


    【解决方案1】:

    您已经正确分析了conflict between BCE and MVC。因此,让我们尝试映射您的类:

    • EmployeeStoreProductLocation 显然是«entity»
    • EmployeeControllerStoreControllerProductControllerLocationController 显然是«control»,对应于单个实体的简单管理。
    • ActiveRecord 并不是真正的实体。这表明您不再处于分析模型中,而是已经处于更精细的设计模型中。您仍然可以使用 «entity»,因为此类仅有助于它们的实现。
    • ManagerReceiver 对我来说有点模棱两可,无法正确分类。但是,如果应该代表Employee 的特殊角色,最好使用组合而不是继承,因为Employee 可能以Employee 开头,然后有一天是receiver,然后是manager。泛化/专业化关系不允许这种灵活性:如果创建了员工,则其终生都将是经理或接收者。

    不清楚的是,您的 XxxController 是否真的对应于用例,并且真的在贡献类之间进行协调:

    • 用例通常由动词描述,例如 Maintain employee records 而不是 EmployeeController
    • 用例可能需要访问多个实体。例如,维护员工记录的一部分当然是将员工分配到商店。由于控制器将负责协调所有对象,它还应该访问商店,因为它需要确保分配给员工的商店确实存在并且处于允许分配的状态(例如,不在状态“StoreShutDownDefinitively ”)。并且这在您当前的图表中绝对不清楚。

    最后但同样重要的是,对于参与者(用户或远程系统)和用例之间的每个链接,原则上都需要 «boundary»。制作 XML 是不够的:您需要将 XML 发送到另一个系统,或者在屏幕上显示 XML,如果需要,可以进行一些滚动。并且也许您必须对请求做出反应或让用户有机会查询另一条记录:

    • 在分析模型中,“边界”类的数量与链接的参与者一样多。
    • 但在设计模型中,您可以决定将多个边界重新组合到一个涵盖所有边界的类中。但您至少需要一个边界类。
    • 我不知道 RoR,但如果我对 diagram in that article 理解得很好,您的边界将对应于视图和路由。在经典的 MVC 中,您还可以在边界中使用控制器。但是查看文章的细节,我的印象是 RoR ActionController 实际上更接近于用例(即“控制”)而不是 MVC 控制器。

    【讨论】:

      【解决方案2】:

      您似乎受到了一些限制。如果我理解正确,您在分析中使用了 BCE,并在架构中使用了 MVC。在 RUP 中有两个用于这些目的的模型——分析模型和设计模型——都通过类图来表达。因此,如果您想在一个怪异的图表中展示您使用 BCE 方法以及 MVC 架构,您可以从分析中绘制边界、控件和实体,以及基于 RoR 的解决方案类进行设计,并使用 @ 的依赖关系将它们连接起来987654321@ 刻板印象。

      我不完全确定 RoR 中的 validate 方法是如何实现的,我的猜测是,当您在模型类定义中调用 validates... 方法时,特定的模型类通过使用新私有方法的元编程得到增强,这将作为验证阶段的回调。我真的不确定这一点,但如果这是真的并且涉及元编程,那么你就有问题了。 AFAIK,您可以绘制在添加方法后显示类的图表(类似于类级别的对象图......),或者您可以通过包合并对元程序进行建模,这也不容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2018-08-30
        • 1970-01-01
        • 2019-05-08
        • 1970-01-01
        相关资源
        最近更新 更多