locked
Silverlight 2でMVCアーキテクチャのV(View)を担当できるか RRS feed

  • 質問

  • はじめまして。

    このスレッドでは初めて質問させてもらいます。mkmarimoと申します。
    よろしくお願いします。

    最近仕事の内容が変わり、初めてWebアプリの開発をやることになりました。
    ※今まではWindowsアプリの開発をC#でやっていました。

    そこで、JavaのJSP/サーブレットやStrutsによるWebアプリ開発の基礎は
    勉強したんですが、急遽、タイトルにも書かせていただいたように、
    MVCアーキテクチャのV部分にSilverlight 2を採用した
    Webアプリを開発することになりました。

    現在の開発環境としてはVS2008 SP1 + Silverlight Tools、
    Expression Blend 2で、C#を使っています。

    Silverlightを使うこと自体が初めてなので、Webでいろいろ勉強していますが、
    いまいち以下のことがわかりません。

     ・Silverlight 2でMVCアーキテクチャのV(View)を担当できるか

     ・その際はASP.NETと連携するしかないのか(ASP.NET自体も使ったことありません)
      →Javaのサーブレットとは無理か?

     ・Silverlightからどのようにサーバに処理やデータを渡すのか
      →画面上のボタンを押したときなどにサーバ上のDBから値を取得して、
       次の画面に遷移するなど可能か

     ・Webアプリのロジック部分(MVCのMとC)はサーバ上で動作するのが一般的だと
      思うが、Silverlightだとすべてクライアント上(ブラウザ上)で動作するのか

     ・Silverlightでの画面遷移はどう実現するのか

     ・どういったアーキテクチャ(システムの構成)を使えばいいのか
      →Webサーバ、アプリケーションサーバ、RDBMSなどを含めて

     ・勉強する順番はあるのか(ASP.NET→Silverlight 2など)

    プロトタイプを作るのにあまり時間がなく困っており、稚拙な内容の質問を
    してしまっているかもしれませんが、どれかひとつだけでも結構ですので
    わかる方がいらっしゃいましたら教えていただけると幸いです。

    2009年4月16日 8:47

回答

  • やや抽象的なご質問ですね。Silverlight でも MVC の V は担当できます(表示のための技術ですので)。ASP.NET と連携することもできますが、必須ではありません。Java Servlet とも連携できるでしょうが、こちらは事例を存じません。サーバーとのデータ交換には Web サービスが使えます。サーバーからデータを取得して表示し、次の画面に移るということがクライアント側で処理できます。Silverlight は、クライアント側の技術ですから、画面遷移はクライアント側で実装します。誤解を恐れずに言えば、マルチウィンドウを使わない Windows フォームのようなものです。

    データベースを扱うのであれば、サーバー側の ASP.NET についても学ぶ方がよいでしょう。MSDN Online(http://msdn.microsoft.com/ja-jp/default.aspx)などを調べてみてください。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。


    マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 IT技術者アドバンス テクノロジー本部 デベロッパーエバンジェリズムグループ
    • 回答としてマーク mkmarimo 2009年4月20日 6:02
    2009年4月17日 9:24
  • >これをASP.NETとSilverlightでやるとすると以下で合っていますでしょうか?
    > ・Webサーバ:IIS
    > ・アプリケーションサーバ:??
    > ・RDBMS:Oracle、MySQL、PostgreSQL、SQL Server等
    > ・MVCアーキテクチャ:M(.NETのクラスライブラリ)、V(Silverlight)、C(Webサービス、WCFサービス等?)
    Cの捉え方が正しくないかもしれません。

    IISをWebサーバーとした場合、その上で動作するASP.NETは、アプリケーションサーバーとなります。
    ASP.NETは、単にActive Server PagesやASP.NETによるWebページを動的に出力するだけではなく、WebサービスやWCFのサービス、ADO.NET Data Servicesを実行できるからです。ASP.NETには、Silverlightのアプリケーションを読み込むためのコントロールが提供されています。こちらは、<object>タグではなく、<asp:Silverlight>タグを利用します。
    http://msdn.microsoft.com/ja-jp/library/cc838274(VS.95).aspx (利用は必須ではありません)

    RDBMSに限定せず、永続化部分は、サーバー側のデーターサービス層につながればファイルシステムでも何でもよいです。

    Silverlightの場合、MVCよりもModel-View-ViewModelのパターンがうまくいくようです。MVCの分離はうまく機能しないからです。(JavaScript APIならMVC分離になりますが、Silverlight 2からはマネージAPIを使った方がよいです)

    このような記事がありますので、ご覧ください。
    http://msdn.microsoft.com/ja-jp/magazine/dd458800.aspx


    ポイントとなるのは、
    ・役割の分離をどうやって考えているのか
    ・役割ごとの制約をどのようにするのか
    ・自動テストをどのように考えているのか
    など、設計・実装上の戦略に依存するかと思います。

    JavaのWebアプリケーションの典型的なMVCの場合、サーバーサイドのVとCは、サーブレットで動いています。(JSPはコンパイルされてサーブレットになるため)
    Mの部分は、Java Beansにしたり、単純なJavaオブジェクトだったり、EJBだったりしますが、その先には何らかの永続化が行われるものが存在します。(主にJDBC経由のデータベース)

    Silverlightは単純なWebアプリケーションではなく、RIAのプラットフォームですので、クライアント側でもいろんなことができます。
    RIAは、URLを切り替えずに画面(ページ)遷移ができるのがポイントなので、Webアプリケーションと同じように捉えない方がいいです。
    Webアプリケーションのロジックのようにサーバー集中にする必要はありません。クライアントで処理・計算できることは、クライアントに任せる方が効率的です。
    画面遷移については、Silverlight 2では組み込みのナビゲーション用部品がありませんが、どのように実装するかは、次のURLに書かれています。
    http://msdn.microsoft.com/ja-jp/library/cc838245(VS.95).aspx

    ブラウザのプラグインからは、直接データベースへ接続することはできません。このため、Webサービスとしてデータベースアクセスするものを作っておき、Silverlightのアプリケーションからは、そのサービスのメソッドを経由して、データアクセスすることができます。また、Silverlightにおいて、アプリケーションサーバーはIIS/ASP.NETに限定されません。HTTP/HTTPSで通信できるWebサービスと連携できるためです。
    たとえば、Java Servletを応用して、Java固有のデータ型に依存しないWebサービスが公開されているのであれば、SilverlightからWebClientやHttpWebRequestによって通信することができます。もちろん、ASP.NETを利用すると、XML WebサービスやWCFのサービスを簡単に作ることができます。

    勉強するポイントですが、JavaでMVCを経験されていることを踏まえると、次のようなところから始められるとよいでしょう。
    ・Silverlightの概要
    http://msdn.microsoft.com/ja-jp/library/bb404700(VS.95).aspx
    ・SilverlightのXAMLによる画面表現 (Expression Blend 2 SP1を併用すると簡単)
    http://msdn.microsoft.com/ja-jp/library/cc189050(VS.95).aspx
    ・XAMLと分離コードの関係、イベントハンドラの実装方法
    http://msdn.microsoft.com/ja-jp/library/cc189018(VS.95).aspx
    ・Webサービスとの通信
    http://msdn.microsoft.com/ja-jp/library/cc645029(VS.95).aspx


    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。
    • 回答としてマーク mkmarimo 2009年4月20日 6:02
    2009年4月20日 2:15

すべての返信

  • やや抽象的なご質問ですね。Silverlight でも MVC の V は担当できます(表示のための技術ですので)。ASP.NET と連携することもできますが、必須ではありません。Java Servlet とも連携できるでしょうが、こちらは事例を存じません。サーバーとのデータ交換には Web サービスが使えます。サーバーからデータを取得して表示し、次の画面に移るということがクライアント側で処理できます。Silverlight は、クライアント側の技術ですから、画面遷移はクライアント側で実装します。誤解を恐れずに言えば、マルチウィンドウを使わない Windows フォームのようなものです。

    データベースを扱うのであれば、サーバー側の ASP.NET についても学ぶ方がよいでしょう。MSDN Online(http://msdn.microsoft.com/ja-jp/default.aspx)などを調べてみてください。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。


    マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 IT技術者アドバンス テクノロジー本部 デベロッパーエバンジェリズムグループ
    • 回答としてマーク mkmarimo 2009年4月20日 6:02
    2009年4月17日 9:24
  • 大野様

    こちらでもご回答ありがとうございます。mkmarimoです。

    質問の投稿をさせていただいてからいろいろ勉強し、
    徐々にSilvelightがわかってきています。

    最後にスレッドが違うかもしれないんですが質問させてください。

    JavaでWebアプリケーションを作るときは一般的に以下のような
    構成で構築すると思います(一例です)。

     ・Webサーバ:Apache
     ・アプリケーションサーバ:Tomcat
     ・RDBMS:Oracle、MySQL、PostgreSQL等
     ・MVCアーキテクチャ:M(Javaのライブラリ)、V(JSP)、C(サーブレット、Struts等)

    これをASP.NETとSilverlightでやるとすると以下で合っていますでしょうか?

     ・Webサーバ:IIS
     ・アプリケーションサーバ:??
     ・RDBMS:Oracle、MySQL、PostgreSQL、SQL Server等
     ・MVCアーキテクチャ:M(.NETのクラスライブラリ)、V(Silverlight)、C(Webサービス、WCFサービス等?)

    以上、よろしくお願いします。

    2009年4月17日 12:45
  • >これをASP.NETとSilverlightでやるとすると以下で合っていますでしょうか?
    > ・Webサーバ:IIS
    > ・アプリケーションサーバ:??
    > ・RDBMS:Oracle、MySQL、PostgreSQL、SQL Server等
    > ・MVCアーキテクチャ:M(.NETのクラスライブラリ)、V(Silverlight)、C(Webサービス、WCFサービス等?)
    Cの捉え方が正しくないかもしれません。

    IISをWebサーバーとした場合、その上で動作するASP.NETは、アプリケーションサーバーとなります。
    ASP.NETは、単にActive Server PagesやASP.NETによるWebページを動的に出力するだけではなく、WebサービスやWCFのサービス、ADO.NET Data Servicesを実行できるからです。ASP.NETには、Silverlightのアプリケーションを読み込むためのコントロールが提供されています。こちらは、<object>タグではなく、<asp:Silverlight>タグを利用します。
    http://msdn.microsoft.com/ja-jp/library/cc838274(VS.95).aspx (利用は必須ではありません)

    RDBMSに限定せず、永続化部分は、サーバー側のデーターサービス層につながればファイルシステムでも何でもよいです。

    Silverlightの場合、MVCよりもModel-View-ViewModelのパターンがうまくいくようです。MVCの分離はうまく機能しないからです。(JavaScript APIならMVC分離になりますが、Silverlight 2からはマネージAPIを使った方がよいです)

    このような記事がありますので、ご覧ください。
    http://msdn.microsoft.com/ja-jp/magazine/dd458800.aspx


    ポイントとなるのは、
    ・役割の分離をどうやって考えているのか
    ・役割ごとの制約をどのようにするのか
    ・自動テストをどのように考えているのか
    など、設計・実装上の戦略に依存するかと思います。

    JavaのWebアプリケーションの典型的なMVCの場合、サーバーサイドのVとCは、サーブレットで動いています。(JSPはコンパイルされてサーブレットになるため)
    Mの部分は、Java Beansにしたり、単純なJavaオブジェクトだったり、EJBだったりしますが、その先には何らかの永続化が行われるものが存在します。(主にJDBC経由のデータベース)

    Silverlightは単純なWebアプリケーションではなく、RIAのプラットフォームですので、クライアント側でもいろんなことができます。
    RIAは、URLを切り替えずに画面(ページ)遷移ができるのがポイントなので、Webアプリケーションと同じように捉えない方がいいです。
    Webアプリケーションのロジックのようにサーバー集中にする必要はありません。クライアントで処理・計算できることは、クライアントに任せる方が効率的です。
    画面遷移については、Silverlight 2では組み込みのナビゲーション用部品がありませんが、どのように実装するかは、次のURLに書かれています。
    http://msdn.microsoft.com/ja-jp/library/cc838245(VS.95).aspx

    ブラウザのプラグインからは、直接データベースへ接続することはできません。このため、Webサービスとしてデータベースアクセスするものを作っておき、Silverlightのアプリケーションからは、そのサービスのメソッドを経由して、データアクセスすることができます。また、Silverlightにおいて、アプリケーションサーバーはIIS/ASP.NETに限定されません。HTTP/HTTPSで通信できるWebサービスと連携できるためです。
    たとえば、Java Servletを応用して、Java固有のデータ型に依存しないWebサービスが公開されているのであれば、SilverlightからWebClientやHttpWebRequestによって通信することができます。もちろん、ASP.NETを利用すると、XML WebサービスやWCFのサービスを簡単に作ることができます。

    勉強するポイントですが、JavaでMVCを経験されていることを踏まえると、次のようなところから始められるとよいでしょう。
    ・Silverlightの概要
    http://msdn.microsoft.com/ja-jp/library/bb404700(VS.95).aspx
    ・SilverlightのXAMLによる画面表現 (Expression Blend 2 SP1を併用すると簡単)
    http://msdn.microsoft.com/ja-jp/library/cc189050(VS.95).aspx
    ・XAMLと分離コードの関係、イベントハンドラの実装方法
    http://msdn.microsoft.com/ja-jp/library/cc189018(VS.95).aspx
    ・Webサービスとの通信
    http://msdn.microsoft.com/ja-jp/library/cc645029(VS.95).aspx


    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。
    • 回答としてマーク mkmarimo 2009年4月20日 6:02
    2009年4月20日 2:15
  • 大西様

    ご回答ありがとうございます。mkmarimoです。

    Silverlightは単純なWebアプリケーションではなく、RIAのプラットフォームですので、クライアント側でもいろんなことができます。
    RIAは、URLを切り替えずに画面(ページ)遷移ができるのがポイントなので、Webアプリケーションと同じように捉えない方がいいです。
    Webアプリケーションのロジックのようにサーバー集中にする必要はありません。クライアントで処理・計算できることは、クライアントに任せる方が効率的です。

    なるほど。
    いちいちサーバとやりとりする必要がなくなるんですね。

    ほかにもいろいろご丁寧にご教授いただきありがとうございます。

    紹介いただいたページはひとつずつ読んでできるだけ理解したいと思います。

    以上、ありがとうございました。

    2009年4月20日 6:01