应用程序的体系结构 - Multiplewindows - JavaFX - 建议

时间:2018-03-25 14:28:04

标签: java javafx architecture

我需要一些关于规划应用程序架构的建议。我想将我的聊天应用程序的控制台版本升级到JavaFX。所以我开始计划。现在我有一个主要类来管理客户端和一个来管理服务器。乍一看问题就出现了。我想要登录/注册窗口,其中"我"将连接到服务器并验证来自输入字段(如登录等)的数据。当一切正确时,我想将已创建的连接(套接字,流等)传递到主聊天窗口。 我如何以正确的方式做到这一点? 我的意思是如何通过多个窗口管理一个类客户端? 何时/ Where实例化Client对象?

2 个答案:

答案 0 :(得分:0)

我是这样做的:

//loading main chat window fxml
FXMLLoader loader = new FXMLLoader(ClientMain.class.getResource("your_path.fxml"));
Parent mainSceneFXML = loader.load();
//getting controller object
MainController ctrl = (MainController)(loader.getController());

现在,您可以从ctrl访问所需的属性或方法。将MainController替换为主聊天窗口控制器的类名。

答案 1 :(得分:0)

因为你说:

  

我需要一些关于规划应用程序架构的建议

JavaFx应用程序有很多模式,例如抽象 MVC (模型 - 视图 - 控制器),MVVM(模型 - 视图 - 视图 - 模型),带服务层的MVC,MVP (Model-View-Presenter)以及模式或体系结构的选择取决于您的项目以及您希望实现的目标。

基于@James_D评论,最好将MVC模型与Service层一起使用(如果您需要服务层来管理您的连接)。我让这个模式能够大致描述这种模式的好处: Schema description

现在,对于客户端登录,您可以通过检查客户端输入来验证登录控制器中的数据并进行测试(真或假)(它必须具有存储的数据)来管理许多客户端,因为如果您在此状态下使用静态测试if(userNameField.getText()=="Ala Eddine")您将处理具有相同共享数据的许多客户端,之后如果输入为false,则可以显示Dialog。等等。

ServerController 中,当您启动服务器时,创建一个循环,每次接收新连接时都会收到,在此状态下您有两个选择:

  1. 通过创建Inner classes

  2. 处理ServerContoller中的客户端
  3. 添加ServiceImp类来处理客户端

  4. 对于MVC模型,您应该尊重模型之间的关系 OneToOne OneToMany ......等等。您的模型取决于现实生活,例如:

    1. 父亲有很多孩子
    2. 孩子有一个父亲
    3. 在您的示例中

      1. 服务器有很多客户端。
      2. 客户有很多消息
      3. 消息包含内容,附件,日期作为属性..
      4. 现在你可以看到包裹树的大概:

        enter image description here

        最后,您可以看到控制器之间的通信:

        enter image description here