2013年12月29日日曜日

Frameworkに依存しないcodeをどう書くか

元々はSymfonyのLTSが3年間というところから。
え〜、そんなに短いんだ。

フレームワーク(FW)よりビジネスのほうが長生きなので、フレームワークに依存しないコードが書きたいな、と。
もっともFWのサポート期間とはなんだろう?期間が過ぎても動くものは動いているし、PHPとかアップグレードしなければ(!)大丈夫なはずだし。脆弱性は最初から入ってないという仮定も必要だけど。
本来、プロジェクトで一番大事な部分はFWというより、それ以外の部分だと思う。それ以外の部分、と言うのはMVCでのモデルというところか。あるいはDDDで言うドメインというところか。

その部分がFWに依存しなければ、何も悩む必要はない、はず。

その部分をどう書くのかな、と最近考え始めた。

DDDとDCI

モデルやドメインといえばDDD。あるいはDCI。

ただDDDとかDCIなど、どうPHPコードに落とせばいいのだろうか?どう書くと、仕様が分かりやすい、テストしやすいコードになるのか。今のところさっぱり。

一方、今の仕事でDDDが必要になるほど複雑な仕様は無いという話もある。ということで、今後少しずつ勉強する予定。

FWとのインターフェース

モデル・ドメインを分離して書いても、フレームワークとのインターフェースは必要だ。ここがFW依存になるので、何かを挟む、ということになるのだろうか?

モデルを、ひとまずエンティティと考えれば、エンティティとフレームワークとの接点は、
*Persistence、
*Validation、
*Presentation、
それと、DBやHTMLフォームはテキストベースなので、エンティティとテキストの変換機能も必要かも。これぐらいあれば、簡単なことなら出来そう。

ということで、以上を抽象化したFWモデルを作っておけば、フレームワークが変わってもFWモデルを変えるだけで、ドメイン側には修正は必要ない、とか考えている。

ちょっと作ってみた

この1年以上PHP5.3で新フレームワークを開発していたら、受注した仕事がPHP5.2ばかり。ということで、PHP4時代から使っているライブラリで開発する羽目になった。

頭にきたので、FWモデルを書いてみた。
モデル内で、PHP4時代(コンストラクターがクラス名とかw)のオブジェクトをnewしまくりながら、ぱっと見は格好良いクラスに見せかける。もうテスタビリティとか無視してざざっと書いてみた。

時間がない中で、わけの分からんことを始めたので、方針はブレるしで、ひどいコードだが、考え方自体は気に入ってます。

ただ、このまま機能を追加してゆき、コードや複雑性が増えてゆき、結局FWモデル自体がフレームワーク化してしまうという未来が見えなくもないですが。

2013年を振り返って

年の瀬なので今年を振り返ってみる。
年内中に書けそうだ。

今年の抱負は「アウトプットを増やす」だった。

結果は、
2013 (15) ←今年!
2012 (40)
2011 (23)
2010 (41)
2009 (22)

と減ってしまいました。

ブログは減ったが、増えたのがgithubのプロジェクト。
とうとうフルスタック可能なWScoreフレームワークを作ってしまいました

作成は楽して、学ぶことが多かった一方、
自分の知識の無さを実感もしました。

大学も機械工学、卒業後の10年はほぼマネージャー、プログラマーになってからは一人での開発がほとんどだったので、よくて知識が偏っている感じ。はっきり言えば知識不足。

だからか人と会話をする際に、自分の考えを正確に説明できない。まぁツイッターで絡んでも、今ひとつ相手の内容が理解できてないので、こちらも色々と書き込めないことが多かった。やはり網羅的な知識を一度は頭に入れたいと思うようになった。

これが来年の課題かなと考えている。

2013年12月20日金曜日

「寄付」は英語でDonationかContribution?

ちょっと英訳をしていて。

英語で寄付といえば「Donation」とばかり思ってたが、
「Contribution」という言い方もあると知った。
http://ejje.weblio.jp/content/寄付

何が違うのだろう?
と調べてみたら、
Donation refers to a gift to a charitable organization whereas a contribution is generally associated with a gift to a common fund or collection.

つまり「Donation」は慈善団体に寄付するときに使い、
それ以外の組織に対する寄付の場合は「Contribution」になると。


Dictionary.comで「Donation」調べてみたが、はっきりとは書いてないなぁ。DonationはContributionでもあると書いてあるし。

確かにContributionの方が広い意味があり、Donationのように善意を受け付けるというより自分たちに賛同する人の助けを(お金として)受け取る、という使い方になるのかもしれない。

ということで、今回は「Contribution」を使うことにした。