今やってるSilverlightの事とか

前書き

なんか書きたい!
でもBlogじゃないとプライベート感がなくて書く気にならん!
てことでBlogで適当に書いてみる。途中、やっぱSlide Shareとか使えばよかったかなとか思ったり。

今やってるSilverlight案件について

めっさコテコテの業務システム。サーバ側はCakePHP
サーバ側がCakeである必要性は全くもってないんだけど、客先の慣れている箇所が一箇所くらいは必要だということで採用!
俺としてはPHPでいいから俺フレームワーク使いたかったんだけど、習熟コスト減らすと初動コストも減るしね。まあいいかなと。


んで、そのCakePHPのやつにログイン情報送って、後はWebブラウザと同じようにCookieでログイントークン送って、という、Silverlightにありがちな普通の"SilverlightGUIとして採用した業務システム"というもの。

プロジェクト構成

言語はC#Silverlightのバージョンは4で、デスクトップでもWebでも動作するような構成のシステムなんだけど、とりあえずC#っつったらまずはプロジェクト構成からじゃろって事でプロジェクトの構成を切ってみた。

  1. ユーティリティ
  2. サーバ通信関係
  3. 画面コンポーネント関係
  4. メイン
  5. テスト

の、4つ。
最後の一個は想定外だったんだけど、少なくともExpress EditionじゃSilverlightのテストは全く出来なかったんで、Unitテスト用のしょぼいフレームワークを自作することに。
てことで一から作るけどテストという作業だから別プロジェクトだよねって事でプロジェクトわけた。


他のは上から依存していく感じ。ユーティリティは依存0、サーバ通信関係はユーティリティいぞ、画面コンポーネント関係はサーバ通信関係依存、メインは画面コンポーネント依存。
プロジェクト分けるとビルドが遅くなって鬱陶しいんだけど、ユーティリティとか普段使わないのはビルド対象から外して運用すると結構快適。

設計とか

サーバはありがちなService + Model構成なので割愛。
画面コンポーネント関係はレイアウトとコンポーネントがあるんだけど、コンポーネントもありがちだから割愛。関係ないけど自作コンポーネントのBindingが超面倒くせぇ。MSしっかりして!


レイアウトはこんな感じ。

書き忘れたけど親と子供の間にもう一枚あって、タブとか入ったりする。


親そのものを切り替えると画面全体切り替わる。これでログインとかスプラッシュとかやる。
その後は別のレイアウト用コントロールを親に入れ込んで、検索+結果+詳細の3ペイン構成の画面を実現する感じ。


この3ペイン間のインターフェースは決まってて、左画面から「検索したよ」ってデータを親に送って、親が噛み砕いてから検索結果画面に送ってあげる流れ。
左から親へはイベント通知、親から結果には関数コール通知だね。
まあ、普通。


当然だけど、検索と検索結果と詳細はそれぞれスーパークラスがあって、それぞれスーパークラスにある程度処理を任せながらカスタム処理だけ書いてく感じ。
スーパークラスXAMLを使ってないので、デザインはサブクラスで自由にやれよと。

Silverlightのいいところ

Flashでやってると_rootのあいつにどうのとかやらないといけないのが、こういうちょい複雑なのでも普通の設計で出来るところ。
Flex開発だと実はそうでもないんだけど、下位互換性がある分書こうと思えば出来ちゃうからな。「出来る」って事はいいことでもなんでもなくて、出来ちゃう以上やっちゃうんだよね。
俺がPerlをDisるのも出来すぎるところにあるんだけど、Flashもやっぱ出来ちゃう事自体がソースコードの難読化を生んでる。


バランス的にはJavaScriptフレームワークもいいんだけど、速度面が怖い。
JavaScriptの問題じゃなくてHTML4系(またはXHTML1系)のDOMの問題が大きいと思うんだけど、根本的にDIV連ね合わせてレイアウト整えるとかおかしいからね。
だからこのデータ構造でリッチで高速なのは限界あるってことで、Googleが最初に着手したいのがHTML4をHTML5にするという作業なわけだ。


Silverlightは当初打倒Flashって安易な目標値だったのかもしれんけど、今はHTMLよりちょっとリッチなことやろうって事を目標においてるから、スタート地点からしてHyper TextなMarkup Languageベースとは違ってて重たいもの前提なので、まだ多少不安はあるけどまあJavaScriptで10万行のソースを詰め込む時の不安に比べたら大分マシよ。


ってことで、HTML + CSS + JavaSriptの一個上でやろうと思うと、色々不満はあるけど依然俺としてはSilverlightが総合力で今んとこベストソリューションでないかなと思う次第で。
もっと普及しねぇかなぁ。