1:Nマッピング
アクセサに関する仕様をどうするか考え中です。アイディアが沢山ある訳では無いのですが…
- 単に、java.util.Collectionのサブクラスを引数に取るアクセサがあったらそれを使う。
仕組みとして必須になるのはsetterのみになります。
型が明らかにならないのでアノテーションなりなんなりで、型を設定出来なければなりません。
コードとしては、こんな感じになりますね。
public class Depertment { public static final Class employees_BEAN = Employee.class; public void setEmployees(List emps); // 3つのうちどれか1つがあればOK public void setEmployees(Set emps); public void setEmployees(Collection emps); }
- JavaBeans風にする。StrutsのActionFormで配列を扱う時と同じですね。
こんな感じのメソッドを期待します。getterとsetterの両方が必須になります。
1:NのNの件数分だけgetEmployeeが呼び出され、同じ回数setEmployeeが呼び出されます。
型がアクセサから明らかになるのがポイントです。
但し、幾つか落とし穴があり、正しく処理を実装するのが意外と難しかったりします。
まぁ、ユーティリティメソッドの1つも提供すれば済む話ですが…。
public class Depertment { public Employee getEmployee(int index); public void setEmployee(int index, Employee emp); }
- ハイブリッドな(?)案もあったりします。
public class Depertment { public void setEmployees(Employee[] emps); }
どれもそれなりに、一長一短あるかなぁ…と。僕が個人的に好きなのは、ハイブリッドな案だったりします。
但し、Javaは固定長配列に対するサポートがちょっと消極的な感があるので、イマイチですが…。