MVC,Swing,观察者模式设计决策

时间:2013-08-02 11:38:38

标签: swing model-view-controller architecture observer-pattern

我正在尝试使用Swing和MVC Design Pattern以及MS SQL Server作为后端来实现一个小应用程序。 应用程序以简单的登录表单开始。此外,应用程序的用户还有两种角色。

  1. 管理员:可以创建,删除,修改,查看所有用户以及应用程序提供的所有功能。
  2. 应用程序用户:只能使用应用程序提供的功能。
  3. 我想有两个独立的框架,即每个角色的UI。

    主登录表单/ GUI充当视图,具有使用Observer模式注册视图的Login控制器类。该按钮注册控制器侦听的事件,调用适当的DAO连接到数据库并验证用户是否可以登录到应用程序。 登录的存储过程返回access_role,即管理员,应用程序用户,未知用户或通过DAO返回给登录控制器的非认证用户。

    我希望保持耦合尽可能低,因此将关注点和MVC设计与观察者模式分开。

    现在我的问题是,

    1. Login控制器是否应该根据返回的access_role决定显示应用程序用户UI或管理员UI,还是应该将该信息传递回应该初始化相应GUI的Login UI?
    2. 如果登录控制器应决定启动哪个UI,那么它还需要为相应的GUI设置所有侦听器吗?这是一个很好的设计决策还是有更好的方法来做到这一点?
    3. 如果Login Controller将access_control传递回Login Form,那么该Login Form必须初始化新GUI的所有Listener并实例化新的GUI?这比控制器更好吗?
    4. 管理员和应用程序用户的UI应该是JFrame还是Dialogs?
    5. 希望听到您对此的看法。

      祝你好运, 卡希夫汗

1 个答案:

答案 0 :(得分:0)

  1. 我不确定我是否希望Login Controller或Login UI初始化我的应用程序的不同部分。为了保持事物解耦,我希望Login的东西不处理其他功能,而是登录用户。最好让应用程序控制器初始化应用程序的登录部分,并在验证用户时将该消息传递给它,这将决定接下来需要初始化哪个GUI。

  2. 如第1部分所述,登录控制器应该只将消息传递回整体应用程序控制器,该控制器将决定下一步需要初始化应用程序的哪一部分。

  3. 处理所有这些操作似乎超出了登录表单的范围。登录表单应该只是与应用程序控制器通信是否登录成功以及有关用户的一些基本信息,以便在初始化的下一部分期间根据需要从数据库中收集附加信息。

  4. 来自JDialog Oracle文档“对话窗口是一个独立的子窗口,用于在主Swing应用程序窗口之外进行临时通知”这可以说您不希望将Dialog用于主应用程序。但是,如果您选择并且可以接受,则可以使用“登录”表单的对话框。

  5. 我希望这会有所帮助。