2016-12-03 67 views
0

我有一个小的vaadin应用程序,它允许用户在表单中输入一些数据(员工详细信息如姓名,地址等),并将每个员工对象存储在列表中。 这是迄今结构:在哪里把我的企业登录到vaadin应用程序

EmployeeForm 
    src/main/java 
     com.vaadin.project.EmployeeForm 
      MyUI.java 
     employee 
      Address.java 
      Employee.java 

所以,为了测试我里面MyUI.java创建了一个Employee对象直接,就像这样:

Address address1 = new Address(34, "Flinch Street","KT25AG"); 
Employee employee1 = new Employee("John","Smith", "Male", 39, address1, "Permanent", 8765); 
List<Employee> employee = new ArrayList<Employee>(); 
employee.add(employee1); 
for(Employee currentEmployee : employee){ 
    System.out.println(employee); 
} 

只是为了确保一切工作,但它在那里做这件事似乎是错误的,所以我想创建另一个处理所有业务逻辑的类,我想知道最好的方法是什么。 通过企业登录我的意思是,我需要确保它发生的是,用户在MyUI.java文件上填写表单并单击提交按钮后,将创建一个新的Employee对象并将其存储在列表中。 所以我想,我可以在MyUI.java中调用函数,如createNewEmployee(),然后在另一个类CreateEmployee.java中定义该函数,从MyUI.java获取所需的所有数据(名称,姓氏,地址等)并在CreateEmployee.java中构建新的Employee对象?这听起来合理吗?在MyUI.java中很容易做到这一点,但我认为应该只处理GUI,你们觉得怎么样?

回答

1

我喜欢使用服务设计模式,其中所有业务逻辑都封装在服务中。

您将有一个最简单形式的EmployeeService类可以在MyUI上实例化为一个成员变量。我的服务通常是无国籍的,并有商业方法。在你的例子中,它会有一个名为createNewEmployee()的方法。

我通常喜欢为我的服务提供一个界面。有些人使用额外的图层进行数据源交互(搜索DAO)。我想保持简单并直接从我的服务访问数据源。

如果我认为我将要有多个实现或将来需要交换数据源,那么我将拥有一个AbstractEmployeeService,其中大多数真正的业务逻辑将会去,然后具有特定于数据源的实现做数据源交互(例如JdbcEmployeeService)。

如果您想要获得更高级的,我建议使用Spring来注入您的服务。请参阅http://vaadin.github.io/spring-tutorial/开始。

不同的开发者会有不同的意见。没有一个正确的答案,但你正在正确的道路上分离我们的业务逻辑!

+0

谢谢你的建议,我创建了一个类的EmployeeService和执行'createNewEmployee(...)'和'clearTextFields(...)'有(均来自MyUI.java调用),它的所有作品。现在还有另一个相关的事情,我该怎么处理错误,意思是说,我应该为它创建另一个单独的类还是在MyUI.java中处理它? – antobbo

+0

我喜欢在UI上使用'setErrorHandler'并弹出我自己的自定义错误窗口来处理整个板子上的错误。如果我需要特殊的错误处理,那么我可以在需要时处理它。每当我不确定如何处理错误时,我都会通过包装在RuntimeExceptions中来解决泡沫错误。我通常也会在错误处理程序中记录异常。 – chenson42

+0

你碰巧有一个例子吗? [Vaadin(https://vaadin.com/docs/-/part/framework/application/application-errors.html)似乎处理它们的UI。在我的特定情况下,我需要处理空输入域和至少一个NumberFormatException异常的情况下,在文本框的字符串不能转换成一个int – antobbo

相关问题