none
アプリケーションアーキテクチャデザインパターン RRS feed

  • 質問

  • 皆様お世話になります。

    スマートクライアントアプリケーション開発

    開発環境:VisualStudio2012 Pro
    開発言語:C#
    APサーバー + DBサーバー + 各クライアント
    WindowsForm + WCF

    上記環境でアプリケーションを論理的に分割をしチームで開発を行う予定であります。
    ・プレゼンテーション レイヤー
    ・ビジネスレイヤー
    ・データレイヤー

    機密性の高い情報を扱う事とUIの制御を考えてASP.NETなどではなく
    WindowsForm + WCFで開発を行う事までは決定しました。

    機密性を高めたい観点から
    各クライアントにはプレゼンテーション レイヤーだけを配置し
    サーバー上でビジネスレイヤー及びデータレイヤーを配置したいと考えております。

    この場合、問題になるのはクライアントにはプレゼンテーションレイヤーだけの配置を行い
    サーバー側にビジネスレイヤーとデータレイヤーの配置を行う事は可能なのでしょうか?

    また可能な場合はどのようなアーキテクチャモデルでの開発になるのでしょうか?

    WCFサービスを利用した場合
    プレゼンテーション レイヤー(WindowsForm) ⇒ WCF ⇒ビジネスレイヤー ⇒ データレイヤー
    この順番で呼ばれるのでしょうが、WCFを通してプレゼンテーションレイヤーのプロパティ(TextBox.Text等)及び
    状態(ボタンクリックイベント等)をどのように渡していけばいいのでしょうか?

    一般論でも構いませんのでアドバイスなどを頂けると幸いです。

    2013年8月1日 1:33

回答

  • あまりWCFを使ってガッツリやったことはないんですが、

    > 上記環境でアプリケーションを論理的に分割をしチームで開発を行う予定であります。
    > ・プレゼンテーション レイヤー
    > ・ビジネスレイヤー
    > ・データレイヤー

    MVCみたいな感じかと思いますが、そうであれば上記3つを疎結合する形になるのだと思います。
    疎結合するのであれば、ビジネスレイヤーから直接プレゼンテーションレイヤーの
    コントロールの値を見ることはないと思います。
    普通に、例えばラジオボタンがチェックされていれば"1"を渡すとか、そういう形で
    ビジネスレイヤー(多分関数)に渡すことになるかと思います。

    > 機密性を高めたい観点から
    > 各クライアントにはプレゼンテーション レイヤーだけを配置し
    > サーバー上でビジネスレイヤー及びデータレイヤーを配置したいと考えております。

    機密性という観点からはあまり関係ないような気もします。
    ASP.NETと同程度のセキュリティまでしかできない気がします。
    私は WCF=従来のWebサービス ぐらいの認識で
    こう言っているので間違っているかもしれませんが。

    上記が聞きたいことと合っているか不安ですが、せっかく書いたので投稿します。

    # あと、この内容はC#と直接関係ないようにも思います。
    • 回答としてマーク 星 睦美 2013年8月26日 2:29
    2013年8月1日 5:12

すべての返信

  • あまりWCFを使ってガッツリやったことはないんですが、

    > 上記環境でアプリケーションを論理的に分割をしチームで開発を行う予定であります。
    > ・プレゼンテーション レイヤー
    > ・ビジネスレイヤー
    > ・データレイヤー

    MVCみたいな感じかと思いますが、そうであれば上記3つを疎結合する形になるのだと思います。
    疎結合するのであれば、ビジネスレイヤーから直接プレゼンテーションレイヤーの
    コントロールの値を見ることはないと思います。
    普通に、例えばラジオボタンがチェックされていれば"1"を渡すとか、そういう形で
    ビジネスレイヤー(多分関数)に渡すことになるかと思います。

    > 機密性を高めたい観点から
    > 各クライアントにはプレゼンテーション レイヤーだけを配置し
    > サーバー上でビジネスレイヤー及びデータレイヤーを配置したいと考えております。

    機密性という観点からはあまり関係ないような気もします。
    ASP.NETと同程度のセキュリティまでしかできない気がします。
    私は WCF=従来のWebサービス ぐらいの認識で
    こう言っているので間違っているかもしれませんが。

    上記が聞きたいことと合っているか不安ですが、せっかく書いたので投稿します。

    # あと、この内容はC#と直接関係ないようにも思います。
    • 回答としてマーク 星 睦美 2013年8月26日 2:29
    2013年8月1日 5:12
  • mars12様

    ご回答有難うございました。

    >MVCみたいな感じかと思いますが、そうであれば上記3つを疎結合する形になるのだと思います。
    >疎結合するのであれば、ビジネスレイヤーから直接プレゼンテーションレイヤーの
    >コントロールの値を見ることはないと思います。
    >普通に、例えばラジオボタンがチェックされていれば"1"を渡すとか、そういう形で
    >ビジネスレイヤー(多分関数)に渡すことになるかと思います

    ご指摘の通りの方法でビジネスレイヤーに渡すのがシンプルな方式だとは思いますが、
    関数と捉えてまうとオブジェクト指向の恩恵を受けられなくなってしまい、
    その問題を解決する為に他にMPC・MVVM・MVP等の考え方があるかなとは思っておりました。

    機密性の話はクライアントのexeを解析されたと時に何を行っているか知られたくない事情がある為
    WindowsForm + WCFでexeにはViewの機能だけ持たせる設計にすればと考えておりました。

    >あと、この内容はC#と直接関係ないようにも思います。
    すみまんせん、C#固有の解決方法などがあればと思いC#で質問させて頂きました。

    丁寧なご返答有難うございました。

    2013年8月2日 0:01
  • この場合、問題になるのはクライアントにはプレゼンテーションレイヤーだけの配置を行い
    サーバー側にビジネスレイヤーとデータレイヤーの配置を行う事は可能なのでしょうか?

    このような形で開発した経験がないため、感覚的で申し訳ありませんが、不可能なことではないと思います。ただし、構築されようとしているアプリケーションの仕様によっては、セッションを管理する必要が発生するかもしれません。今回の3層構造はASP.NETと同じと考えることもできるわけですが、ASP.NETにセッションを保つ機能が用意されているのと同様です。よって、クライアントが不意に落ちた場合などのタイムアウトも考慮しなければならなくなると思います。

     この順番で呼ばれるのでしょうが、WCFを通してプレゼンテーションレイヤーのプロパティ(TextBox.Text等)及び
    状態(ボタンクリックイベント等)をどのように渡していけばいいのでしょうか?

    プレゼンテーションレイヤーでボタンをクリックしたら、伝えたい値を含めてWCFに用意したメソッドを呼び出せば可能だと思います。

    #4年ほど前に勉強も兼ねてWPF+WCFの構成でメッセンジャー的なものを試作しましたが、さすがにもうだいぶ忘れてしまいました。ですから細かいことには今は答えられません。すみません。誤解を恐れずに言えば、WCFの感覚的なイメージとしては、複数コンピュータ間でメソッドやイベントを共有する仕組みという記憶が残っています。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    2013年8月2日 3:16
    モデレータ