2010-11-29 6 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% | 
---------------------------------------- 

が、私:私は、各部門から多くの人が持っている(とされていない)各コースの各コースだけでなく、各部門の平均と完成方法を示す必要があります内部でデータを表現するためにオブジェクトを適切に使用する方法については混乱しています。

私は現在コースと部署のオブジェクトを持っていますが、$course->percentComplete($dept_id)のような書き込み方法はちょっと間違っていると感じて、$course->percentComplete('all')はもっと間違って感じます。コース平均人物は、コースインスタンスオブジェクトの分かりやすいプロパティではありませんが、部門オブジェクトに配置することは、2つのクラス間でコードを複製することを意味します。間違いは間違いです。

私はここに違反しているいくつかの基本的な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