2

我正在创建一个库存系统,其中 Ruby on Rails 作为应用程序服务器,Java 客户端作为前端。

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

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

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

任何帮助是极大的赞赏!谢谢。

4

2 回答 2

0

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

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

于 2010-12-16T12:42:10.533 回答
0

您已经正确分析了BCE 和 MVC 之间的冲突。因此,让我们尝试映射您的类:

  • Employee, Store, Product,Location 很明显«entity»
  • EmployeeController, StoreController, ProductController,LocationController 显然«control»对应于单个实体的简单管理。
  • ActiveRecord不是真正的实体。这表明您不再处于分析模型中,而是已经处于更精细的设计模型中。你仍然可以使用«entity»,因为这个类只对它们的实现有贡献。
  • Manager并且Receiver对于我正确分类来说有点模棱两可。但是,如果要表示 an 的特殊角色,Employee最好使用组合而不是继承,因为 anEmployee可能开始于Employee,然后有一天是receiver,然后是manager。泛化/专业化关系不允许这种灵活性:如果创建了员工,则其终生都将是经理或接收者。

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

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

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

  • 在分析模型中,您将拥有与链接参与者一样多的“边界”类。
  • 但是在设计模型中,您可以决定将多个边界重新组合到一个涵盖所有边界的类中。但是你至少需要一个边界等级。
  • 我不知道 RoR,但是如果我很好地理解了那篇文章中的图表,您的边界将对应于视图和路由。在经典的 MVC 中,您还可以在边界中使用控制器。但是看看文章的细节,我的印象是 RoRActionController实际上更接近于用例(即“控制”)而不是 MVC 控制器。
于 2020-09-07T21:58:02.340 回答