2008-12-27 28 views
8

这是关于一个学校的任务,所以我试图按照本书做事。我觉得自己正在掌握Java,但良好的编程习惯,设计模式等对我来说都是相当新颖的。Java中的MVC

我做了我的模型,它工作正常。它包含一个学生类,其中包含许多带有学生信息的字段(显然)。现在我想将这些信息显示在几个JLabel中。将整个学生对象传递给GUI最简单,并使用JLabel.settext.getname()等很多次,毫无疑问,这会很好地工作。但我觉得学生对象是模型的一部分,并将它传递给GUI,我不再使用MVC模式。我在这里吗?

我做了一个控制器对象,用于向模型和GUI传递数据,但只传递字符串到标签或通过控制器设置JLabel文本,我需要GUI中的很多setter,或者我将不得不使所有JLabels全球领域都感觉不好。

对此有何建议?

回答

1

图形用户界面应该担心所有的界面的东西。我想你有一个类是你的GUI,用你的JLabels为学生做'东西'。只需将你的学生实例传递给这个类,并让它做它需要做的事情。完成后,它会调用一个控制器方法来完成任何需要的操作。

OOD处理传递你想要操作的对象。您不需要为了传递MVC而拆分对象。如果这是一般情况,你应该真的把它传递出去。模型定义了您将要使用的数据对象......或者更具体地说,系统将与(控制器)一起工作,用户将使用(GUI)。这些课程是建立在传递的。如果你解开所有的信息,你将不得不做更多的工作嘿:)

4

请注意,Swing组件都在内部使用MVC模式,因此它们已经有了一个模型。这与JTable等复杂小部件更为相关,在这些小部件中,您肯定希望模型实现TableModel接口。

最大的问题是如何将您的领域模型与各个Swing组件的内部模型进行协调。这样做的一个方法是让setModel()getModel()方法在你的GUI类,它们之间的转换,即setModel()把你的模型,并呼吁对个人的JLabel setText()

0

的观点需要你的模型来创建用户界面(从模型中拉出)并从中接收更新(按模型推送)。理想情况下,该模型以只读方式呈现给视图。控制器将提供视图将用于更新模型的方法,以便更好地分离关注点。

有很多不同的形式和MVC究竟是什么解释,尝试谷歌搜索它。此外,您经常可以在应用程序的不同级别上找到MVC(例如,Swing模型,您的域模型...)。

有了MVC和MVC上的变体,最重要的是你可以解释各个子模式(Observer,Facade,...)并捍卫你所做的设计选择(优点/缺点),而不是试图实现独一无二的MVC模式,如果它存在。如果可能的话,那么我的建议就是实现一些运行良好的东西,这些东西的启发来自于你在MVC及其子模式上阅读的内容,并且之后才看到它对于某些内容的赞同或不赞同您可以找到关于MVC模式的“传统”描述。

+0

这一切都是事实,但不要忘记,作业往往是关于你的老师,而不是作业。可悲的是。 – 2008-12-27 12:48:23