2016-12-03 108 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