-1

テキストの壁を事前に申し訳ありません!

シナリオ:

「スタンドアロン」モデル(デスクトップマシンで実行されるフロントエンド+バックエンド)だけでなく、ローカルサーバーモード(ローカルサーバーにインストールされたバックエンド)もサポートする必要があるLOBアプリに選択するテクノロジーを検討しています。インターネット経由のサービスとしてのソフトウェア(ホストされたサーバーにインストールされたバックエンド)。

開発作業を最小限に抑えたいので、Silverlightフロントエンドを選択しました。3つのモデルすべてに同じコードベースを再利用する予定です。

LOBアプリはデータ入力に重点を置いており、バックエンドでいくつかの計算作業を行います。たくさんのビューがあります。そして、80以上のテーブルを持つデータベースができます。現在、MSSQL、MySQL、およびOracleをDBMSとして使用できるようにする独自のDALがあります。

現在のビジョンは、Caliburnフレームワークを使用したC#のフロントエンドとしてアジャイルTDD Silverlight4.0MVVMアプリを使用することです。また、バックエンドとしてWCF(RIA?)サービスを使用する(Silverlight以外、プレーンな.NET 4.0)。これは、バックエンドをどこにインストールするかだけの問題であるため、さまざまなモデルにうまく適合します。SAASモデルの場合、バックエンドが存在する可能性のあるサーバーがインターネット上にあります。

質問:

  1. これはまったく実行可能に聞こえますか、それとも、異なるモデルに同じコードベースを使用できると考えているのでしょうか。

  2. バックエンドに関しては、WCF RIAサービスを検討していますが、WCFのSilverlight実装では不可能と思われる「メッセージセキュリティ」が必要です。WCF RIAは有効な選択ですか?それとも、セキュリティに関して、プレーンなWCFの方が「優れている」のでしょうか。

  3. さまざまなDBMSに関しては、サポートする必要があります。これはWCFRIAサービスと関係がありますか?それとも、独自のBLL / DALを作成し、それをプレーンなWCFを介して公開する方がよいでしょうか。

  4. インラインSQLを使用せず、ストアドプロシージャのみを使用した複数のDBMSセットアップの経験がある人はいますか?元のアプリはインラインSQLに重点を置いていますが、さまざまなDBMSにストアドプロシージャを配置するだけで、このアプリをどのように保守できるのか疑問に思っています。

  5. 最後の質問ですが、MVVMとセキュリティに関しては、セキュリティ/コード保護の理由から、バックエンドでロジックの多くを「非表示」にしたいと思います。これのために行う論理的なことは何でしょうか?TDDを実行する必要があるため、モデルをモックアウトできる必要があります。つまり、フロントエンドで使用できる必要があります。ただし、すべてのロジックをバックエンドに含める必要があります。フロントエンドで「ラッパー」を使用して、バックエンドの「実際のモデル」を「リンク」する必要がありますか?バックエンドモデルと1対1で適合するダミーモデルの一種。それとも、これを行うための「より良い」方法はありますか?

あなたがこれらの主題のいずれかで私たちに与えることができるどんな助けにも前もって感謝します!

ヒューロン。

4

2 に答える 2

1
  1. それは実行可能であるはずですが、あなたは本当にコミュニケーションモデルを考え抜かなければならないでしょう。SaaSシナリオは最も制限が厳しく、セキュリティに敏感であるため、そこから始めて、すべてローカルのセットアップにスケールバックする必要があります。

  2. RIAサービスに反対することをお勧めします。MSの場合によくあることですが、単純なものには適していますが、すぐにその制限に遭遇し、それを呪うでしょう。SLでメッセージセキュリティを実行する方法については、こちらをご覧ください。

  3. 質問2のように、私はRIAを使用しませんが、使用する場合でも、Entity Frameworkを使用して、DBMSに依存しないようにすることができます。

  4. 私は、ストアドプロシージャのファンです。はい、それは複数の展開ポイント(およびバージョンの違いの固有のリスク)を作成しますが、私は常に「SQLをSQLに保持する」と言います。

  5. 残念ながら、あなたが説明しているのは、インターフェースシステムのTDDにおける一般的な問題です。モックアップクライアントを使用してサーバーをテストしてから、実サーバーを使用してクライアントをテストします。

于 2011-03-22T12:25:46.970 に答える
0

これが私たちがLOBに選択することになったものです-local/client-server / saas app:

  1. これは非常に実行可能であることが判明しました。例外はほとんどありません。ほとんどのコードベースは、ローカル、クライアントサーバー、およびSaaSでまったく同じです。

  2. WCF RIAを使用しないことにしましたが、通常のWCF呼び出しを使用するために、「TransportWithMessageCredential」を使用して通信を保護しています。

  3. データベースをバックエンドアプリケーションに公開するためにEntityFrameworkを使用しています。ここに、ドメインレイヤーとカスタムの「Entity」クラスがあり、取得したEntityFrameworkクラスに基づいて入力します。

  4. Entity Frameworkを使用しているため、SQLステートメントはすべて完全になくなりました。Linqを使用して必要なものを選択しています。これまでのところ、これはうまく機能しています。したがって、インラインSQLはもう必要ありません。また、個別のレイヤー(Entity Framework-> Context class-> Mapper Class-> Entity Class)を導入することで、高い保守性を実現しています。

  5. フロントエンドを可能な限りダミングダウンしました。そこにあるViewModelは、すべてのバインドされたプロパティを埋めるために厳密に使用されるため、ビューには操作するデータがあります。どのデータまたは何が可能かに関するすべての決定は、バックエンドで行われています。アプリケーションのフロー全体は、バックエンドのManagerクラスによって実行されます。このクラスは、WCF Duplex接続を使用して、フロントエンドに何をすべきかを指示します。

于 2012-03-08T11:43:42.220 に答える