09

Learning ASP.NET MVC4

何年ぶりかで、.NETの世界で仕事する事になった。

正直最近の状況が全く分からないので、まずはサンプルのプロジェクトを生成した上で簡単に動かしてみて、とりあえずユーザのサインアップとログインなんかができていることを確認。 結構いろいろなファイルが生成されているのだけど、それぞれどんな役割を担っているのだか全然分からないので、個人的にWebサービスを実装する上での要素を順番に見ていく。以下はそのときのめも。調べるに従って分かってくる事もあると思うので、そういう点は後で追記というか、修正していくかも。

リクエストの受け方

  • 何かしらRouterがあるようだ
  • App_Start/RouteConfig.cs で設定しているっぽい。
  • WebAPIの分は WebApiConfig.cs で設定するようだ。
    • 微妙に呼び出しているメソッドが異なるのはなぜ?
    • 取り扱いが異なる意味があるのかしら
    • default { controller = “Home” … }HomeController クラスとバインディングされるらしい。
      • なんでわざわざ異なる表記(HomeとHomeController)を採用しているのか?
      • ビューの決定と関連があるのかなあ
  • ログインとかアカウント登録周りのルーティングは全く書かれていないように見えるけど、どうなってるんだ
    • App_Start/AuthConfig.cs ってのがあるけどこいつがすべて隠蔽しているとか?
    • 単に一つのルーティング設定でAccountControllerまでカバーされているだけだ。おそらく。

コンロトーラ

  • Controllerクラスを継承している。インタフェースじゃない。つまりいろいろ仕込んであるっぽい。
  • ViewBag というオブジェクトがあり、これを使って値をテンプレートにバインドするようだ。
    • 宣言を見ると:
    • [Dynamic] public dynamic ViewBag { get; }
    • 修飾子 dynamic って何だ?
    • じゃあアノテーション? [Dynamic] は何?
      • 簡単に検索してみたけど説明しているサイトは見つからない。
      • System.Dynamicみたいだけど、namespaceとなっている。属性のネームスペースなの?
  • return View(); で終わっている。どのテンプレートを使用するかは特に指定していないように見える。
  • ログイン失敗の部分を見ると ModelState.AddModelError("", "指定されたユーザー名またはパスワードが正しくありません。”); とか書いている。その後に return View(model);
    • コントローラが処理状態を持っている?
    • 結局どのテンプレートを使うのかは記述してないように見えるが、引数のmodelがviewを決定するのか?

Bundling(静的リソースの参照)

  • App_Start/BundleConfig.cs
  • 具体的にどこからどこまでの範囲を司るのかしらないが、staticリソースの配置と参照に関する機能らしい
  • これも見る限りルーティングのように見えるが・・・。
  • 複数のリソースを単一のパス(ソースコード上)にまとめられると解釈していいのかな
  • BundleConfig.csで bundles.Add(new ScriptBundle(“path”) でバインドしたパスをView上で@Scripts.Render(“path”) として展開するようだ。Style Sheetも同様だがStylesという記述になっている。

小休止

とりあえずクライアントサイドを重視したモックアップ的な実装から始めたいので、この辺で一旦区切っておこう。残りはまた別な機会に書くかもしれない。

しかしこれはどこから書いていったら良いんだろうなー。 とりあえず?基本としてサーバサイドは実装しないで作るとしてもコントローラは必要になるのかな。とりあえずの呼び出し先として。Ajaxの呼び出し先はWebApiの方で良いんだろうか。

  • まず軽くURLを設計する
  • コントローラを置く
  • View 作る
  • 必要に応じてBundle 追加していく
  • Ajax処理が冷えるに従って、コントローラのメソッドとかビューとか、さらに必要ならルーティングを追加していく。

という感じか。まあ、他のプラットフォームとあまり変わらないかね。とりあえずビューとコントローラの連携を先に書いてしまって、後からモデルおよびモデルとコントローラの間を埋めていってみよう。