15

如果您想了解更多详细信息,请告诉我,或参考此问题的最后几行。我已经读了很多书,我觉得我正在把一些简单的东西变成复杂的东西,我仍然在这里和那里卡住,所以也许你可以在那些非常具体的点上帮助我。

我使用的是 Netbeans IDE 7 和 JDK 7,没有框架。第一个窗口是 JFrame,所有其他窗口都是 modal=true 的 JDialogs。

问题:

  1. 如何使用 swing 正确实现 MVC 模式?从下面的想法来看,哪个更好:(A)还是(B)?或者也许是另一个......为什么它更好?

    (一)主要:

    MyModel model
    MyView view(model)
    

    我的观点:

    MyController(this, model)
    

    (B)
    主要:

    MyModel model
    MyView View
    MyController controller(view, model)
    
  2. 当我在 MainFrame 中单击 jbutton1 时,我需要它来打开 SettingsFrame 以编辑设置。我应该在哪里实例化 SettingsFrame 的视图、模型和控制器?在主机控制器中?

  3. 在 MVC 组织和实现方面,我应该如何处理(显然)缺少一两个 MVC“腿”(模型或视图或控制器)的更具体的功能?我应该为他们创建空类吗?

    a. The implementation of a TrayIcon
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files)
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file)
    d. My own implementation of TableModel
    e. json
    
  4. 如何在整个应用程序中正确保存和使用带有设置的对象?我将需要它在不同地方的信息(视图、模型、控制器),但它可能会在运行时被用户更改)。让这个模型成为单例是个好主意吗?

  5. 在以下情况下我应该怎么做:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View
    b. View needs some data from the Controller?
    What I'm doing: using the reference of Controller which I keep in the View
    c. Model needs some data from the Controller?
    Still didn't happen but I have no idea how to do correctly
    d. Model needs some data from the View?
    What I'm doing: pulling all my hair from my head...
    e. Controller needs some data from the View?
    What I'm doing: using the reference of the View which I keep in the Controller
    f. Controller needs some data from the Model?
    What I'm doing: using the reference of the Model which I keep in the Controller
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController?
    What I'm doing: thinking of jumping from the highest building...
    
  6. 关于如何知道我是否正确实现 MVC 的任何提示?我应该在 Model 还是 Controller 中处理海量数据?

  7. 我也在使用 DAO,我正在做的是:我的模型有一个

    ArrayList MyModel 加载()

    方法创建 DAO 的实例并返回 DAO 返回的模型的 ArrayList,然后有时我在模型中处理这个模型的 ArrayList,有时我允许控制器处理它。这是一个好习惯还是有更好的方法?我的意思是:遍历 ArrayList 并从模型中获取数据。

  8. 我有一个 PasswordCheck jDialog 来限制对某些视图的访问。如何在 MVC 方面重用它,以便我可以使用相同的 PasswordCheck 对话框来允许/限制对不同视图的访问,而不会弄乱代码?

  9. 还有其他提示、提示、想法、建议吗?

上下文: 我需要在短时间内开发一个 Java Swing MVC 软件,尽管默认情况下我不是 Java 开发人员并且不太习惯于实现 MVC 模式,特别是在 Java 中(我明白了,但有时它缺乏我知道实现类之间的关系)。这些应用程序基本上是本地/在线文件的监视器,主框架中有一个 JTable 来显示这些数据。我正在使用新的 WatchService API 来跟踪本地文件并使用 DAO 将它们的信息保存在 h2 数据库中,然后他们将这些数据重新加载到主框架 jtable 中。我还必须通知用户有关新文件的信息(我使用的是 TrayIcon)。对于在线文件监控/上传/下载,我使用的是 HttpsUrlConnection 和 json。它还可能允许自定义设置。

提前感谢您的时间和帮助。

4

1 回答 1

7

查看Sun (Oracle) 的建议

作为一种简化,您可以让每个组件(模型、视图、控制器)注册到顶级应用程序组件,以提供单个引用点,而不是每个组件(您的 A 或 B)之间的单独引用。我引用的文章提供了推拉式设计的想法;我建议将 push 作为一种更流行的现代方法。披露:我有 Java 和 MVC 的经验,但没有 Swing 本身的 MVC。

我应该在哪里实例化 SettingsFrame 的视图、模型和控制器?

当然,是的,或者在顶级应用程序组件中。

我应该如何处理(显然)缺少一个或两个 MVC“腿”(模型或视图或控制器)的更具体的功能?

我会将仅 GUI 的部分实现为您自己的 GUI 库。以及纯粹的算法/服务片段作为服务库。

我应该在 Model 还是 Controller 中处理海量数据?

数据处理算法非常适合控制器甚至服务库;除了可能的数据类型转换或验证之外,您的模型根本不应该做太多处理。

如何在整个应用程序中正确保存和使用带有设置的对象?

请参阅我的注册说明;单身人士可能是合适的。

于 2012-06-07T13:36:47.600 回答