2008-09-22 3 views
2

객체 지향 프로그래밍에 대해 배웠던 이래로이 질문이있었습니다. 이제, 나는 이것을 묻는 멋진 포럼을 가지고있다.객체 지향에 관한 질문

EJB를 사용하여 직원 관리 응용 프로그램을 구현할 수 있습니다.

이제이 작업에는 두 가지 방법이 있습니다.

  1. 일반적으로 직원을 나타내는 엔티티 (POJO)를 만듭니다. 그런 다음 add, delete, update, retrieve, retrieveAll 메소드를 사용하여 EJB 인터페이스 'EmployeeManager'를 작성합니다. 이 방법으로 'employee'엔티티를 데이터 전송 객체로 사용할 수 있습니다.

  2. 우리는 EJB 인터페이스 자체를 'Employee'라고 부릅니다. 구현은 필드 인과 메소드 구현 (추가, 삭제, 업데이트, 검색, retrieveAll)이있는 'EmployeeImpl'이라고 부를 수 있습니다. 내 비즈니스 로직에서 직원 세부 정보에 액세스해야하는 계층화 된 접근 방식을 사용하는 경우 값이 포함되어 있으므로 'EmployeeImpl'을 전달해야합니다.

어느 쪽이 더 좋은 방법이라고 생각하십니까?

내가보기에 좋고 어색함을 느끼지 않기 때문에 첫 번째 것을 선호합니다. 같은 (나는 확실하지 오전하지만) 두 번째는

Employee emp = // JNDI lookup; 
emp.setName(); //set the properties 
emp.add(); 
Employee employees[] = emp.retrieveAll(); 

, 같을 것이다 당신이 볼 수 있듯이, 두 번째는 어색하게 보이는

EmployeeMgr empMgr = // JNDI lookup; 
Employee emp = new Employee(); 
empMgr.add(emp); 
Employee employees[] = empMgr.retrieveAll(); 

.

나는 여러분에게이 점에 대해 조언 해 줄 것을 요청합니다.

감사 만주

답변

2

첫 번째는 확실히 명확하고 명료 확실히 코드의 목적이어야한다. 그러나 첫 번째 측면에서 나는 here을 안내 할 것입니다. 제프 앳 우드 (Jeff Atwood)가 "SomethingManager"라는 것을 사용하는 것을 권합니다 - 권장하지는 않습니다.

3

예제 중 Employee 클래스에 너무 많은 책임을 부여하기 때문에 # 2를 사용하지 않는 것이 좋습니다.

직접적인 대답은 아니지만 마틴 파울러 (Martin Fowler)의 저서 Patterns of Enterprise Application Architecture을 적극적으로 권유 할 수 있습니다. 저는 개인적으로 저에게 큰 주목을 받았으며 이것에 대한 몇 가지 다른 접근법을 설명합니다.

나는 또한 오픈 소스 Hibernate이 엔티티를 지속시키기위한 훌륭한 도구라고 생각합니다. 거기에 좋은 의견을 많이 찾을 수있을 것이라고 확신합니다.

0

지속성을위한 분리 클래스가 있어야합니다. 직원이 더 많이 보입니다. 테스트를 위해 DBEmployeeMrg, FileSystemEmployeeMrg, InMemoryEmployeeMgr 및 MockEmployeeMgr을 사용하려는 경우가 많으므로보다 유연합니다. 이러한 모든 클래스는 서로 다른 방식으로 EmployeeMrg 인터페이스를 구현할 수 있습니다.

코드가 짧아 지도록하려면 employeeMrg.save (직원) 대신 employee.save()를 저장하는 것이 좋습니다. 직원이 자신을 저장하고, 업데이트하고 심지어 삭제하는 경우에도 설계를 이해할 수 있습니다. 그러나 분명히 한 명의 직원이 ID로 다른 직원을로드하고 직원 목록을로드하는 데 필요하지 않습니다.

2

"OO 준수"가 아닌 적절한 디자인을 위해 노력하십시오.

덧붙여서 EJB는 전혀 객체 지향적이지 않습니다.

EJB를 사용하기위한 가장 좋은 방법은 다음과 같습니다

  • DataContainer 클래스는 DB하거나 사용자로부터받은 데이터를 유지; "POJO"
  • EJB에는 DataContainers에서 작동하는 메서드가 있습니다.
  • DAO는 데이터베이스에서 DataContainers를 지속/검색하는 것을 처리합니다.

EJB는 일반적으로 드물게 필요한 Stateless로 배포하지 않는 한 필드가 없습니다.

대부분의 사람들이 기대할 수있는 EJB를 사용하고 있다면. DataContainer에는 실제 메소드가없고 EJB/DAO에는 실제 데이터가 포함되어 있지 않으므로 분명히 OO가 아닙니다.

이것은 나쁜 것이 아닙니다. 그것은 관심사를 분리하고 시스템을 더 변 경 가능하고 유지 보수 가능하게 만듭니다.