如何正确地实现MVC在Java中与Swing?(How to correctly implement

2019-06-25 07:16发布

如果您想了解更多详细信息,请让我知道,或者是指对这个问题的最后几行。 我已经读了很多,我觉得我转向简单的东西弄成复杂,我仍然可以在这里和那里卡住了,所以也许你能帮助我在那些非常具体的点。

我使用NetBeans IDE 7和JDK 7,没有框架。 第一个窗口是一个JFrame和所有其他窗口与模态JDialogs =真。

问题:

  1. 如何正确地实现摆动MVC模式? 从理念波纹管哪一个更好:(A)或(B)? 或者,也许又一个...为什么好?

    (A)主要:

     MyModel model MyView view(model) 

    我的看法:

     MyController(this, model) 

    (B)
    主要:

     MyModel model MyView View MyController controller(view, model) 
  2. 当我在大型机点击的jButton1我需要它来打开SettingsFrame编辑设置。 我应该在哪里实例化视图,型号和SettingsFrame的控制器? 大型机控制器?

  3. 在MVC组织和执行方面,我应该怎么处理这个(显然)缺少一个或两个MVC“腿”(无论型号或View或Controller)的更具体的功能吗? 我应该为他们创造空类?

     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? 我应该处理的模型或控制器的海量数据?

  7. 我还使用一个DAO,我在做什么是:我的模型有一个

    的ArrayList为MyModel负载()

    方法,该方法创建DAO的实例,并返回由DAO返回模型的ArrayList中,然后有时我过程模型的此ArrayList在示范有时我允许控制器来处理它。 这是一个很好的做法还是有更好的办法? 通过流程我的意思是:遍历该ArrayList,并从模型中的数据。

  8. 我有一个PasswordCheck的JDialog限制访问的一些看法。 我如何可以重复使用它在MVC而言,这样我可以使用相同的PasswordCheck对话框允许/限制访问不同的意见,而不在代码中做一个烂摊子?

  9. 任何其他提示,提示,意见,建议?

语境:我需要在短时间内用Java开发一个Java Swing的MVC软件,但默认情况下,我不是一个Java开发人员并没有那么用于实现MVC模式,特别是(我的想法,但有时缺乏我认识到实现类之间的关系)。 这些应用基本上是在主框架与一个JTable本地/在线文件显示此数据的监视器。 我使用了新WatchService API来跟踪本地文件和使用DAO节省他们的信息在H2数据库,并重新加载在主框架的JTable此数据。 我也必须通知有关新文件(我使用任务栏图标它)的用户。 对于在线监测文件/上传/下载我使用HttpsURLConnection的和JSON。 它也允许设置定制。

预先感谢您的时间和帮助。

Answer 1:

看看Sun公司(甲骨文)的建议 。

作为一个简化,可以有各组分(模型,视图,控制器)与顶层应用程序组件注册以提供参考的单个点,而不是每个组件(您的A或B)之间的单独的引用。 我举的文章提供了推拉的设计思路; 我建议推作为一种比较流行的现代的方法。 披露:我有在Swing本身Java和MVC而不是MVC的经验。

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

当然,是的,或在顶层应用程序组件。

我应该如何处理(显然)缺少一个或两个MVC“腿”(无论型号或View或Controller)的更具体的功能吗?

我想只实现GUI的作品作为自己的GUI库。 和纯粹的算法/件服务作为服务库。

我应该处理的模型或控制器的海量数据?

数据处理算法将很好地适合在一个控制器或甚至服务库; 你的模型不应该做太多的处理都超出了可能的数据类型转换或验证。

如何正确保存和贯穿整个应用程序中使用与设置的对象?

查看注册我的笔记; 一个单可能是适当的。



文章来源: How to correctly implement MVC in Java with Swing?