Java中的MVC模式

8
这是一个关于学校作业的问题,所以我正在按照规定办事。我感觉我已经掌握了Java,但是好的编程实践、设计模式等对我来说都是新的东西。
我已经创建了我的模型,并且它运行良好。它包含一个学生类,其中包含一些学生信息字段(显然)。现在我想将这些信息显示在几个JLabel中。通过将整个学生对象传递给GUI并使用JLabel.settext.getname()等方法最容易,毫无疑问这将完美地工作。但是我觉得学生对象是模型的一部分,通过将其传递给GUI,我就不再使用MVC模式了。我这样做对吗?
我为传递数据到和从模型和GUI的控制器对象,但是为了将字符串仅传递到标签或通过控制器设置JLabel文本,我需要在GUI中添加很多setter,或者我必须使所有JLabels成为全局字段,这也不太好。
您有什么建议吗?
3个回答

4
请注意,Swing组件都在内部使用MVC模式,因此它们已经有了一个模型。这在像JTable这样的复杂小部件中更为相关,其中您绝对希望您的模型实现TableModel接口。
重要问题是如何将您的域模型与各个Swing组件的内部模型协调一致。一种方法是在您的GUI类中具有setModel()和getModel()方法,这些方法在它们之间进行转换,即setModel()获取您的模型并在各个JLabel上调用setText()等方法。

1

GUI 应该关注所有的界面事务。我猜你有一个类是你的 GUI,用于通过 JLabels 对学生进行“操作”。只需将你的学生实例传递给这个类,让它执行所需的操作。完成后,它将调用控制器方法执行必要的操作。

OOD 处理传递你想要操作的对象。在 MVC 中,你不需要拆分对象以进行传递。如果这是一般情况,你应该传递它们。模型定义了你将使用的数据对象...或者更具体地说,系统将使用(控制器),用户将使用(GUI)。这些类被构建为可传递的。如果你取消封装所有信息,你将需要做更多的工作 :)


0

视图需要您的模型来创建 UI(从模型中提取)并从中接收更新(由模型推送)。理想情况下,模型以只读方式呈现给视图。控制器将提供视图用于更新模型的方法,以实现良好的关注点分离。

有许多不同形式和解释 MVC 的方式,请尝试在 Google 上搜索。此外,您还可以在应用程序的不同级别上经常找到 MVC(例如 Swing 模型、域模型等)。

使用 MVC 和其变体,最重要的是您能够解释各个子模式(观察者、外观等),并为您所做的设计选择进行辩护(优缺点),而不是试图实现“唯一”的 MVC 模式(如果存在的话)。

因此,如果可能的话,我建议您在受 MVC 及其子模式启发的基础上实现一些有效的东西,并在之后查看它与您可以找到的一些“传统” MVC 模式描述是否相符或不相符。


这一切都是真的,但不要忘记,作业通常是关于你的老师而不是作业本身。可悲的是。 - Boris Callens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接