Hatena::ブログ(Diary)

Crought

2008-11-26

S2Container.NET (Quill) を試してみる

| 03:28 | S2Container.NET (Quill) を試してみるを含むブックマーク

とりあえず@ITの記事の通りにやってみよう.

.NET開発者のためのDI&AOP入門(前編), (後編)

開発環境はVisual Studio 2005, OSはビスたけ.

VS2005は [既定の環境設定] を [Visual Basic 開発設定] にしてあるよ.


1. S2Container.NETの導入

S2Container.NETのサイトに行く.

左のメニューから [ダウンロード] を選ぶ.

[最新のリリース] からS2Container.NETの最新版をダウンロード.

(2008-11-27時点での最新版は 1.3.13)

ダウンロードが済んだら解凍してみる.

s2container.net-1.3.13 ってフォルダが展開される.

とりあえずほっといて次へ.


2. MbUnitインストール

MbUnitのサイトに行く.

左のメニューから [Downloads] を選んで, MbUnitの最新版をダウンロード.

(2008-11-27時点での最新版は 2.4.2)

ダウンロードした実行ファイルを実行して, MbUnitインストール.

よくわかんなければ [Next] とか [I Agree] とかをお選びなさい (n‘∀‘)η


3. プロジェクトの作成

f:id:ernestcroft:20081127012703j:image:w128,right

VS2005を起動して, メニューから [ファイル] -> [新しいプロジェクト]

[プロジェクトの種類] はVisualBasicで, [Windows アプリケーション] を選択.

プロジェクト名は QuillSample にしとこうか.

f:id:ernestcroft:20081127012704j:image:w128,right

プロジェクトができたら, すぐさま保存する.

なんか聞かれると思うけど [上書き保存] でいいよ.


4. プロジェクトへのS2Container.NETの追加 (1)

f:id:ernestcroft:20081127012705j:image:w128,right

最初に, ソリューションのフォルダの下に lib というフォルダを作る.

VS2005が標準設定なら, マイドキュメントにソリューションがある.

ここに lib ってフォルダを作る.


5. プロジェクトへのS2Container.NETの追加 (2)

4で作った lib フォルダに, 1で解凍した s2container.net-1.3.13 の中の, 以下のファイルをコピーする.

次に, lib フォルダに ja-JP というフォルダを作る.

ja-JP フォルダの中に, s2container.net-1.3.13 から以下のファイルをコピーする.

6. プロジェクトへのS2Container.NETの追加 (3)

f:id:ernestcroft:20081127022320j:image:w128,right

VS2005での操作に戻る.

ソリューション・エクスプローラからQuillSampleプロジェクトを, 右クリック -> [参照の追加]

[.NET] タブから [MbUnit.Framework] を選択して [OK]

もう一回 [参照の追加] を開いて,

[参照] タブから, 5でコピーしたうちの以下のファイルを選択して [OK]


7. やっとコーディングのお時間です

@IT先生のいうとおりにコーディングする.

生粋のVB.NETerの人はC#にもめげずにがんばる.

ちなみに, VB.NETだとこんな感じになるよ.

>IEmployeeDao

Imports Seasar.Quill.Attrs

<Implementation(GetType(EmployeeDao))> _
Public Interface IEmployeeDao

    Function GetEmpName(ByVal empNo As Integer) As String

End Interface

>Form1

Imports Seasar.Quill

Public Class Form1

    Public EmpLogic As IEmployeeLogic

    Public Sub New()

        ' この呼び出しは、Windows フォーム デザイナで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        QuillInjector.GetInstance.Inject(Me)

    End Sub

    Private Sub searchButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles searchButton.Click

        Dim empNo As Integer = Integer.Parse(empCodeTextBox.Text)

        Dim empName As String = EmpLogic.GetEmpNameWithTitle(empNo)
        empNameTextBox.Text = empName

    End Sub

End Class

ぜんぶできた? できたら動かしてみよう.

f:id:ernestcroft:20081127022321j:image:w256

わーい動いた!


8. テストしてみる (1)

ひきつづき@IT先生のいうとおりに, UnitTestも書いてみる.

>MockEmployeeDao

Public Class MockEmployeeDao
    Implements IEmployeeDao

    Public Function GetEmpName(ByVal empNo As Integer) As String Implements IEmployeeDao.GetEmpName
        Return ":y=-( ゚д゚)・∵;; "
    End Function

End Class

>EmployeeLogicTest

Imports MbUnit.Framework
Imports Seasar.Quill.Unit

<TestFixture ()> _
Public Class EmployeeLogicTest

    Protected EmpLogic As IEmployeeLogic

    <Test()> _
    Public Sub TestGetEmpNameWithTitle()

        MockInjector.GetInstance.Inject(Me)

        Dim actual As String = EmpLogic.GetEmpNameWithTitle(42)
        Dim expected As String = ":y=-( ゚д゚)・∵;; タン"

        Assert.AreEqual(expected, actual)

    End Sub

End Class

テストがひどいって? 気にすんな.


9. テストしてみる (2)

テストが書けたらMbUnitでテストしてみよう.

Windowsのスタートメニューから [すべてのプログラム] -> [MbUnit] -> [MbUnit.GUI]

MbUnitが起動するので, メニューから [Assemblies] -> [Add Assemblies...]

以下のファイルを選択する.

  • <My Documents>\Visual Studio 2005\Projects\QuillSample\QuillSample\bin\Release\QuillSample.exe
  • *上手く開かなかったら, 一度プログラムデバッグで起動してみたりするといいかも.

画面左のツリーでは, 作ったテストを分類ごとに見られるみたい.

今はテストを1個しか作ってないので, 気にせず画面右上の [Run] ボタンを押す.

すぐ下のバーが緑色だったら, テストは成功.

やったね! ;-)

f:id:ernestcroft:20081127022322j:image:w256


総括

.NETでもDependencyがInjectできたよ!

QuillのDIは, インターフェイスに実装クラスを書いちゃうんですね.

そんなんでいいのか... (・∀・;)

S2Containerの設定ファイルが念頭にあったので, ちょっとびっくり.

調べてみたら, フィールドインジェクションっていうみたい. 知らなかった.


さて, 次回はS2Dao.NETだー.

jflutejflute 2008/12/04 13:20 自分の周りでは、Quillを使うときはあまりインターフェースを利用していません。
実装クラスに「ただImplementation属性を付ける」だけですね。
DBFluteのBehaviorも同じにしてあります。
本当に差し替えが現実的なコンポーネントだけインターフェース経由にして、
よくある「実質インターフェースと実装クラスが1:1」のコンポーネントは
インターフェースの利用を割り切っています。参考までにということで。

ernestcrofternestcroft 2008/12/08 23:31 なるほど!
以前, まさに仰るとおりの1:1なコンポーネントを作っていて, これって要るのかナァと思っていたのですが, 要らないものは作らなくて全然良かったのですね.
参考になりました, ありがとうございます!

2008-11-25

re: 技術的負債(Technical Debt)

| 14:22 | re: 技術的負債(Technical Debt)を含むブックマーク

技術的負債(Technical Debt) - masayangの日記(ピスト通勤他

あらゆる設計・あらゆる実装は負債になり得る, とも言えるのかな.

少なくともぼくの職場だとそうです (・∀・;)ギギギ

よき設計・よき実装は負債を避けたり減らしたりはすれど, 決して返済はしてくれない.

ぼくらは常に水面下で闘っている.

負債を返済する

有用だと考えられている開発手法は, 負債をうまく減らしたり, 返済したりする手法でもあるんじゃないだろうか.

Agileは, 短期間で負債を返済しつづける手法を, 体系化して示した.

利息が膨らまないのも嬉しい. UnitTestはさしずめ借用書といったところ.

対極を行くのがクリーンルーム手法で, こっちは最初からなるべく負債を作らない慎重策だ.

負債を返済できない

一方, 契約ベースのぼくの会社では, 負債を返済する体系立った手法がない.

他にも, そんな会社は少なくないだろう.

天下のウォーターフォールは開発中の返済を許さない.

われらが営業や上司は, 負債なんてないかのような工数見積もってくるから, 返済どころじゃない.

* 契約に技術的負債を減らすための継続的保守を盛り込む。

* 契約ベースで開発する現場は、技術的負債を返すことができず、職場は荒んだままになる。

ま、後者だろうな...

はいそうです ( ´д⊂ヽ

これはひどい. これはまずい. どうしよう.

この先生きのこる

負債スパイラルから抜け出せない企業に対して, ぼくらができることは何かないだろうか.

ひとつの提案として, 既存のシステムに対する保守や追加案件が発生した際, リファクタリング分の工数を盛り込んでもらうのはどうだろう.

うまく場に食い込む必要はあるけれど, 組織的改善ほど骨が折れるわけじゃない.

「どれくらいかかる?」なんて訊かれる機会があれば最高だ.

そうして実績を重ねてゆくことが, 漸近的な"前者"への道のりとなるんじゃないだろうか.


あわせて読みたい:

レガシーコード借金説 - ratio - rational - irrational

2008-11-20

俺々フレームワークをやっつけろ!

| 02:17 | 俺々フレームワークをやっつけろ!を含むブックマーク

あらすじ

ぼくの会社のオープンシステム開発はVB.NETが中心で, 5年ほど前に作られたらしい俺々フレームワークが幅を利かせてます.

このフレームワークが実にムキムキを催すシロモノで, 精神衛生上好ましくない.

ぼくは社内マイノリティであるJavaプロジェクトから, 最近とあるVB.NETプロジェクトへ異動になったんだけど, もうここんとこ毎日, 微妙なツラしてディスプレイに向かってる状態.

たまに「なめてんの?」とか声に出ちゃって, 隣の人に苦笑されたりとか ><

代替案を提案して, 平穏を取り戻したい!

ゴール

以下の構成を会社に提案して, "採用される"ところをゴールに定めようと思う.

この構成である理由はすごく簡単で, 社内唯一のJavaプロジェクトが同構成だから.

JavaプロジェクトとVB.NETプロジェクト間で人員の互換性が発生する, という点がきっとウリになる.

ロードマップ

S2Container.NETを試してみる

S2Dao.NETを試してみる

・組込DBとしてH2を使って, 配布して見てもらえる状態にする

DBFluteを導入してみる

・何かそれなりに動くものを作る

・感動的なプレゼンを作る

・決戦

よし

宝くじだって買わなきゃ当たらないし, どんなにあんまりなプロジェクトでも這い出そうとしなきゃ灼けつくしかない.

|-')/ とりあえず年内に何か結果を出すよ!

ernestcrofternestcroft 2008/11/25 14:54 jfluteさんから星もらっちゃった!
テンション上がってきた! (・∀・ ≡ ・∀・)

2008-11-16

はじめまして

| 02:37 | はじめましてを含むブックマーク

自己紹介

はじめまして, ernestcroftです.

方向性のない人生を歩んできたけれど, プログラムという波長の合うものを見つけられました.

中小独立系SIに就職して2年目, ひとかどのプログラマになれたらいいなと思ってます.

Javaとかできます.

ブログの方向性

このブログは, 書くための筋肉をつけて, 人月なんか飛び越えるための, 泥の中の一歩です.

引用ばっかりでごめんなさい.

よろしくね

b( ゝД・) ミ☆