我正在创建一个库存系统,其中Ruby on Rails作为应用服务器,Java客户机作为前端。
项目的一部分要求我们创建一个集成的类图(一个包含所有类并显示关系的类图)。类的设计方式和我们之前学到的是使用 Boundary-Entity-Controller(BCE)模式来创建适当的类,然而,由于我们使用的是使用MVC架构的Rails,它们直接冲突,因为在两个模式之间没有1:1的相关性,特别是考虑到我们案例中的“视图”仅仅是XML,所以没有视图的类图,而 Boundary 类共享控制器的 * 输入 * 和视图的 * 输出 *。
到目前为止,我们的类图只展示了Rails相关的类(因为客户端类大多只是UI),以下是我们到目前为止所做的工作的结果(忽略我们有一百万个getter和setter的事实--这是项目的需求,我们实际上不会以这种方式实现;我们将使用attr_accessor
):
那么,我们的思路是否正确?有什么要添加/编辑/移动的吗?我们如何准确地对将要使用的内置ActiveRecord验证器方法(例如validates_numericality_of :price
)进行正确建模?
任何帮助都非常感谢!谢谢。
2条答案
按热度按时间rn0zuynd1#
看起来你被赋予了几个约束。如果我理解正确的话,你在分析中使用了BCE,在架构中使用了MVC。在RUP中有两个模型用于这些目的--分析模型和设计模型--都是通过类图来表达的。所以如果你想在一个巨大的图中显示你使用了BCE方法以及MVC架构,你可以画出边界,分析中的控件和实体以及基于RoR的解决方案类,并使用依赖关系将它们与
<<trace>>
构造型连接起来。我并不完全确定validate方法是如何在RoR中实现的,我的猜测是,当你在一个模型类定义中调用validate... method时,这个特定的模型类会通过元编程得到增强,这个元编程使用了新的私有方法,它将作为验证阶段的回调函数。我真的不确定这一点,但是如果这是真的,并且涉及到元编程,那么你就有问题了。AFAIK,你可以画一个图来显示添加方法后的类(类似于类级别上的对象图...),或者你可以通过包合并来建模元程序,这也不容易。
vc9ivgsu2#
您已经正确地分析了conflict between BCE and MVC,现在让我们尝试Map您的类:
EmployeeController
、StoreController
、ProductController
、LocationController
显然是«control»
,其对应于各个实体的简单管理。ActiveRecord
并不是一个真正的实体。这表明您不再处于分析模型中,而是已经处于一个更精细的设计模型中。然后您仍然可以使用“entity”,因为该类只对它们的实现有贡献。Manager
和Receiver
对于我来说有点模糊,无法正确分类。但是,如果应该表示Employee
的特殊角色,则最好使用组合而不是继承,因为Employee
可能开始为Employee
,然后某一天成为receiver
。而后来是manager
。泛化/特化关系不允许这种灵活性:如果创建了职员,则该职员在其整个生命周期中将不是“经理”就是“接收人”。不太清楚的是,您的
XxxController
是否真的对应于用例,是否真的在贡献类之间进行了协调:Maintain employee records
而不是EmployeeController
。最后但并非最不重要的一点是,原则上,对于参与者(用户或远程系统)和用例之间的每个链接,都需要一个
«boundary»
。您需要将XML发送到另一个系统,或者在屏幕上显示XML,如果需要的话,可以进行一些滚动。并且您可能需要对请求做出React,或者给予用户查询另一个记录的机会:ActionController
实际上更接近于用例(即“控制”),而不是MVC控制器。