2016-12-03 4 views
0

사용자가 양식 (이름, 성, 주소 등의 직원 세부 정보)을 입력하고 각 직원 개체를 목록에 저장할 수있는 작은 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 객체가 생성되어 List에 저장된다는 것을 의미합니다. 그래서 나는 createNewEmployee()과 같은 MyUI.java에서 함수 호출을 할 수 있고 그 함수를 다른 클래스 내에서 정의했다. CreateEmployee.java, MyUI.java에서 필요한 모든 데이터 (이름, 성, 주소 등)를 얻는다. CreateEmployee.java에 새 Employee 개체를 생성 하시겠습니까? 그게 합리적이라고 생각하니? MyUI.java 내부에서 그렇게하기는 쉽지만 GUI 만 다루어야한다고 생각한다. 너희들은 어떻게 생각하니?

답변

1

모든 비즈니스 로직이 서비스에 캡슐화 된 서비스 디자인 패턴을 사용하고 싶습니다.

가장 간단한 형태로 MyUI에서 멤버 변수로 인스턴스화 할 수있는 EmployeeService 클래스가 있습니다. 내 서비스는 일반적으로 무국적이며 비즈니스 방법이 있습니다. 귀하의 예제에서는 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 처리해야합니다. textField의 문자열을 int로 변환 할 수없는 경우 – antobbo