2004-05-15
■ ちょっと遊ぶ。
d:id:masataka_kさんのチュートリアルを一通りやったので、ちょっとずつ遊んでみよう。
依存性は後から与えられるということは、極端な話、何も考えずにロジックを組むことができちゃうってことを意味するはず?実際にやってみる。題材は「ログイン」。何を使って認証するかは決めていない。DBかもしれないし、ファイルかもしれないし、LDAPかもしれない。今はとりあえずおいておく。
ということで思いつくままにロジックとインターフェースだけ書いてみる。
ロジック
LoginLogicComponent.java package swat.test; public class LoginLogicComponent { /** * @param auth * @param principal void */ public void login(Authenticator auth, Principal principal) throws LoginFaliedException { //ログインに必要なパラメータを取り出す。 LoginArg arg = principal.getLoginArgs(); //認証せよ!! Role role = auth.authenticate(arg); if (role == null) { throw new LoginFaliedException(); } //Roleをセット principal.setRole(role); } }
ログインする主体
Principal.java package swat.test; public interface Principal { LoginArg getLoginArgs(); void setRole(Role role); }
認証を行なう者
Authenticator.java package swat.test; public interface Authenticator { Role authenticate(LoginArg arg); }
ログインに必要なパラメータ
LoginArg.java package swat.test; public interface LoginArg { }
ログインしたものに与えられるロール
Role.java package swat.test; public interface Role { }
ログイン失敗時の例外
LoginFaliedException.java package swat.test; public class LoginFaliedException extends Exception { }
ブートストラップ
ComponentRunner.java package swat.test; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.S2ContainerFactory; public class ComponentRunner { public static void main(String[] args) throws LoginFaliedException { S2Container container = S2ContainerFactory.create("swat.test.login.xml"); Authenticator auth = (Authenticator) container.getComponent(Authenticator.class); Principal principal = (Principal) container.getComponent(Principal.class); LoginLogicComponent component = new LoginLogicComponent(); component.login(auth, principal); } }
例外が具象クラスになってしまったけれど、それは仕方がないかな。ログイン失敗したときの挙動をS2で制御できればいいか。
さて、今度は少しずつ具象クラスを書いていこう。その過程でインターフェースにメソッドを追加していく予定。
コメントを書く
トラックバック - http://seasarproject.g.hatena.ne.jp/swat/20040515