良いコンポーネント設計とは?
良いコンポーネント設計とは何か? 現在の自分の考えを整理しておきます。
- インタフェースと実装が分離されていること。
- インタフェースの仕様が明確に定義されていること。
- 異なる関心事が同居していないこと。
- コンポーネント間が疎結合であること。
- コンポーネント間の依存関係が循環しないこと。
- 抽象度の高いコンポーネントが抽象度の低いコンポーネントに依存しないこと。
- 特定のフレームワークやライブラリに強く依存しないこと。
- デプロイなどの面倒な手間をかけずに動作確認ができること。
- 設定ファイルが不要または簡潔であること。
- 単体テストが簡単に書けること。
これらの条件は以下の目標を満たすためにあります。
- 目的に合った品質の高いソフトウェアを作ること。
- トータルコストを安く抑えること。
- わかりやすく、開発・保守が容易であること。
で、何でこんなことをあらためて書いたかというと、EJB3 や Seasar の EJB3 対応にちょっと違和感を感じたから。
http://d.hatena.ne.jp/higayasuo/20060101
僕はその辺のところにとやかくいう立場ではないし、今後の市場がどう動くのか予測できないし、必要な機能がサポートされれば特に問題はないのですが...
- Annotation はうまく使うと 2 を高めることができそう。
- でも乱用すると、3、6、7 に悪影響を与えそう。
例えば、SessionBean を implements するのと @Stateless って書くのってそんなに違うのかなぁ? (EoD という観点ではかなり改善すると思うけど)
Seasar に関しては、EJB3 対応した場合、感覚的に「だったら素直に EJB3 使えばいいじゃん」ってならないかちょっと心配。