オレオレDIコンテナ@PHP
<?php require '../NerimaDicon.php'; require 'Auth_Dto.php'; require 'interfase_Auth.php'; require 'mock_Auth_Dao.php'; NerimaDicon() // Config ->Config(Array ( // 'dsn'=> 'pgsql:host=localhost;dbname=auth' // ,'user'=> 'postgres' // ,'pass'=> 'postgres' 'dsn'=> 'sqlite:'.basename(__FILE__,'.php').'.db' ,'user'=> '' ,'pass'=> '' )) // Dto ->Dto(NerimaDicon::Factory() ->Auth_Dto() ->id('test') ->pass('test')) // Dao ->Dao(NerimaDicon::Factory()->Auth_Dao('Config')) ; // user add test NerimaDicon::Namasu(NerimaDicon()->Dao->add ( NerimaDicon()->Dto ) ->should->be(True); // user no get test NerimaDicon::Namasu(NerimaDicon()->Dao->get ( NerimaDicon::Factory()->Auth_Dto() ->no(NerimaDicon('Dto')->no) ) ->should->be ( NerimaDicon('Dto') ); // user session get test NerimaDicon::Namasu(NerimaDicon()->Dao->get ( NerimaDicon::Factory()->Auth_Dto() ->session(NerimaDicon('Dto')->session) ) ->should->be ( NerimaDicon('Dto') ); // user id:pass get test NerimaDicon::Namasu(NerimaDicon()->Dao->get ( NerimaDicon::Factory()->Auth_Dto() ->id(NerimaDicon('Dto')->id) ->pass(NerimaDicon('Dto')->pass) ) ->should->be ( NerimaDicon('Dto') );
オレオレDIコンテナを作ってみてる。
<?php // NerimaDicon() NerimaDicon() ->{$key}($value) // return $this ->{$key};// return NerimaDicon($name) // NerimaDicon::Factory NerimaDicon::Factory() ->{$className}($NerimaDicon_keyName);
てけとーにシングルトンなクラス作って
其処に必要なリテラルとかぶち込む
コンストラクタインジェクションをする為の
NerimaDicon::Factory()を使って、インスタンスを作る
その際に、コンテナのキー値を使って値を取得する
んで、作ったインスタンスもコンテナにぶち込む
NerimaDicon::Namasu()に作ったインスタンスのメソッドの返り値を
ぶち込んで、何かと比較する。
多分、こんなんでBDDっぽく、テケトーに振る舞いを示唆しながら
の実装出来るんじゃないかな。まぁ様は仮想コードを使って動作の流れを
考えるのを、マジックメソッドのオンパレードを使って、
動く、仮想コードに仕立て上げとくと、書くのと考えるのを剥離させなくて
済むかなっと。
って、ここらへんの書くのと考えるのが一番離れていない言語は
Pythonかなぁっと思ったりも。