2009年8月28日金曜日

ボフったー

本日BoFに参加してくださったみなさま!ありがとうございました!

超、緊張しました。結構あれこれとしゃべること用意してたんですが、全然しゃべれませんでした。自己紹介を途中棄権ってなんだよ!みたいな。

内容的にはちゃんと「適材適所で使い分け」というのを入れたかったんですが、なにもかもが後の祭り。だって、管理画面なんか小野さんのサンプルみたいにゼロコーディングで出来たら最高ですよね。ViewState/PostBackなPage Controllerスタイルで、コントロールに処理を完全に委譲してしまうWebFormは最強です。それらの機能を少し横取りして、Pageからすべての機能を切り離し(この時点でもうアーキテクチャスタイルが違うので比較することじたいに無理があるんですけど)Front ControllerスタイルにしたASP.NET MVCによるスクラッチ開発は面白さ爆発です!

とにかくまず最初に驚いたのがASP.NET MVCで何か作ったことのある開発者の方が思ってた以上に多かったこと。ビックリしました。可能性たっぷりですね!フレームワークと名乗るにはまだまだ万人向けなものにはなってないMVCですが、何となくこの路線を突っ走って欲しいという個人的には思ってます。だってチャップリンも言ってるじゃないですか。

人生は恐れなければ、とても素晴らしいものなんだよ。
人生に必要なもの。それは勇気と想像力、そして少しのお金だ。

うん、全然関係無い言葉だね!

えと、ちなみにデスね、今日話したかったメモを以下に残しておきます。

  • 共通のnamespaceはImportでaspx/ascx毎にしていするんじゃなくて、web.configで指定しておこう。
  • HTML入力を受け付ける時にはValidateInput属性で指定しよう。Pageディレクティブやweb.configでのValidateRequestはController関係無いよ!
  • csprojのMvcBuildViewsをtrueにしてViewのコンパイルを強制するのが便利なときもある。
  • JavaScript無しで機能を実装したあとに、JavaScriptでのUX向上を目指すのが王道。でも、こだわらなくてもいいかもね。
  • URLはリソース指向に考えてルーティングに定義しよう。
  • RepositoryとServiceを作成しといて、アクションでは単なる呼び出しがいい。
  • DB Modelと View Modelを分ける(相互にマッピングする)。
  • テストしやすくするために、HttpContextへの依存をControllerからなくす(UserNameとIsXhr)。依存性が無いならテストは結構楽ちん!
  • 全体共通なBaseControllerを定義しておくと何かと楽ちん(abstractでね!)。
  • Viewでの作業を楽にするためにヘルパーを定義。
  • Controller名やAction名のマジックストリングをなくすために、T4MVCを活用。
  • 入力検証を楽にするためにDataAnnotationsModelBinderを活用。
  • もっと複雑になるならDIでRepository/Serviceの依存性注入。
  • マッピングも大変ならAutoMapperやら(自分で書いてもいいけど)。
  • テストが複雑になりそうなら(依存性を持ったもののテストをしたいとか)Mockを使おう。MoqやらRhino.Mocksやら。
  • カッコ良くRESTfulな実装にしたいならREST for ASP.NET MVC!

参考にするといいかもなURL

お勧め書籍

サンプルに実装してる項目もあれば、無い項目もあります(DIやMockや)が、こういうのを取り入れると楽しく開発出来るっていうのを話したかったデス。

サンプル一式は↓こちらからどうぞ。

動かすにはSQLServer2008Express以上が必要になります。Databasesフォルダ内の2つのMDFをそれぞれAspNetDBとMyTimeDataという名前でアタッチ(MS SQL Server 2008 Attach Database .MDF File)するとそのままで動くんじゃないかと思います。

※App_Dataに入れてAttachDbFilenameをConnectionStringに指定する方が簡単なんですが、それだとウェブのプロジェクトとテストのプロジェクトで同じインスタンス名でDB作成しようとして動かないんで気をつけてください。

機能的な物はBoFで紹介したとおり、Membershipによるユーザー管理とログイン、作業時間の追加・更新・削除と合計表示のみです。これにチャートコントロールでの表示やら、月内デイリー合計なんかの機能をつければ、それなりに使える物になるんじゃないかと思いますがどうでしょうかね。プロジェクトの名前を「ボフったー」にしなかったのが「エドったー」に完全に負けてるところデス!

細かいサンプルの説明は...、必要ならしますが、どうなんでしょう。週末だし書くかもしれないですが、ホッケーもしたいので微妙です。たけはらが書かなくてもチャックが説明してくれると思います!無茶ぶり返し!

最後に。

こういう機会を与えてくれた、小野さんとナオキさんには感謝しきれません。ボスにはいろんな人を紹介してもらってマジ感謝です。一人だと誰とも知り合えずに過ごす事になったこと間違い無しです。MSの方達も、こんなどこの馬の骨なのか分からないチンピラ開発者の話に耳を傾けてくれてホント嬉しかったです。

BoFでたけはらの話に耳を傾けてくれた人たちの暖かさには、感謝しても仕切れません。マジ泣ける。本当にありがとうございました。