2010-11-29 4 views
0

부서 (ID, 이름), 코스 (ID, 이름), 직원 (ID, 이름, dept_id) 및 staff_to_course (staff_id, course_id)의 4 개의 테이블이 있습니다. 나는 SQL 쿼리에 가입 할 수JOIN 쿼리의 데이터 OOP 표현

 | Course 1 | Course 2 | Average | 
---------------------------------------- 
Dept 1 |  20% |  30% |  25% | 
---------------------------------------- 
Dept 2 |  10% |  40% |  25% | 
---------------------------------------- 
All |  18% |  33% |  25% | 
---------------------------------------- 

하지만 I : I는 각 부서에서 많은 사람들이 (그리고하지 않은 경우) 각 코스에 대한 각 코스뿐만 아니라 각 부서의 평균과를 완료하는 방법을 표시해야 내부적으로 데이터를 표현하기 위해 객체를 적절히 사용하는 방법에 대해 혼란 스럽다.

저는 현재 코스 및 부서 객체를 가지고 있지만 $course->percentComplete($dept_id)과 같은 작성 방법은 다소 틀렸고 $course->percentComplete('all') 느낌이 훨씬 더 잘못되었습니다. 코스 평균 수치는 코스 인스턴스 객체의 합리적인 속성이 아니지만 부서 객체에 두는 것은 분명히 틀린 두 클래스에 걸쳐 코드를 복제하는 것을 의미합니다.

내가 여기 위반하고있는 몇 가지 기본 OO 원칙이있을 것으로 기대하지만 나는 그것이 무엇인지 알 수 없습니다.

답변

0

코드를 정적 메서드의 Staff 클래스에 넣습니다. 예를 들어

...

public class Staff extends MyAbstractDB{ 

    // your attributes 

    // your getter/setter 

    public static List<Staff> listCompleted(Department dep){ 
    // here you should execute the sql query or use a criteria builder if you are using Hibernate 
    } 

    public static List<Staff> listCompleted(){ 
    // ... 
    } 

} 

수있는 당신을 위해이 솔루션을 사용할 수 있습니까?

+0

Fabrizio에게 감사하지만, 정적 방식을 사용하는 것이 본질적으로 OOP를 포기하고 기능으로 돌아가는 것처럼 보입니다. – Tamlyn