バインディング機能再設計

まず、開発中のS2Swingの現状。以下のような画面があるとします。

public class UserDialog extends JDialog {
    private JTextField username;
    private JPasswordField passwd;
    private JTextField birthDate;
    ...
}

次のモデルクラスを書くと、UserDialogの各コンポーネントにモデルの値を自動バインディングできます。

public class UserModel {
    @ReadWrite
    private String username;
    @ReadWrite(target = "passwd")
    private String password;
    @ReadWrite
    @DateTimeConverter("yyyy/MM/dd")
    private Date birthDate;
    ...
}

でもこの方式、良く考えるとおかしいですよね。

  • passwordのバインド先コンポーネント名が"passwd"であることをモデルが知っている
  • birthDateのバインド先コンポーネントがコンバータを必要とすることをモデルが知っている

モデルが画面に依存しているわけです。モデルと画面の本来の依存関係が逆転してしまっている。

そんな訳で、S2Swingバインディング機能を再設計しようと思っています。具体的なアイデアはこれから考えますが、モデルクラスにアノテーションを極力書かずに済む方向に持っていきたいです。