2010-12-06 17 views
1

私の会社はASP.NETとPrismを探しています。私たちは、2つのオプションの間でどのくらいのコードを再利用できるか疑問に思っています。プリズムwith ASP.NET

私はそれを見るようにプリズムがこれらの "部" があります。モジュール

  • 疎結合サービス(ないウェブサービス)
  • 地域
    • シェル(ブートストラップなど)
    • をイベント(IEventAggregator)
    • ユニティ(実際にはこれはスタンドアロン製品です)

    これを見ると、Silverlight/WPFで絶対に使用する必要がある部分はリージョンだけです。

    シェルは少しトリッキーかもしれませんが、私はそれがASP.NETアプリで行うことができると思います。私はまた、モジュール(非地域提供モジュール)も実行可能でなければならないと考えています。 IEventAggregatorとUnityを使用するのは簡単です。

    私が抱える唯一の問題は、ASP.NETプログラミングで実際に経験していないことです。そのため、私の前提はわかりません。私は、これに関する議論が本格化する前に(私の会社では)、PrismとASP.NETの両方に精通した人からのフィードバックを愛しています。

    基本的に、私はWebサービスとビジネスロジックを実行するプリズムモジュールを作りたいと思います。私はこれらのモジュールを取り出して、ASP.NETアプリケーションとWPF/Silverlight Prismモジュール(リージョン経由)でそれらを使用したいと考えています。

    私はこれらの2つのシステムをマージすることによって難しい旅を計画していますか?

  • 答えて

    6

    問題は、クライアントアプリケーションとWebアプリケーションのライフスタイルが異なることです。

    Webアプリケーションは基本的にステートレスです。オブジェクトグラフは構築され、要求は満たされ、すべてが破棄されます。 Webアプリケーションは、多くの異なるユーザーが同時にそれを打つことを想定して作成する必要があります。

    クライアントアプリケーションは、起動し、環境を設定して、すべてをメモリに保存します。また、クライアントアプリケーションのインスタンスには1人のユーザーしか存在せず、多くのユーザーは存在しません。シェルとEventAggregatorは、特に要求を超えてもメモリ内にあるすべてのものに依存しており、誰が作業しているかを区別しません(その世界には1つしかないからです)。

    私は、正しい場所にDIコンテナを接続し、実行時にコードをプルするためのブートストラップコードを少し書くだけで、大丈夫と思うことができます。

    +0

    +1他のフレームワークで使用されているPRISMのDIの側面を見るのはかなり一般的です。 –

    1

    私はバニラasp.netで100%正しいので、私はChrisの答えをupvoted。しかし、少し創造力があれば、Knockoutjsを活用して目標に近づけることができます。

    1

    私は、あなたが傷ついている世界に向かっていると思います。私はPrismコードを掘り出したが、それはかなりではなく、WPF/Silverlightに密接に関連している。モデルは非常に異なり、コードを共有するという考えは素晴らしいと思うが、私は不可能に近いだろう。

    2

    コードの再利用が大きな問題となる場合は、プロジェクトのライフタイムの要件を検討します。数年、5年、10年生存するにはこのコードが必要ですか?もっと?明らかに、ほとんどの大きなプロジェクトでは、可能な限り保守(または書き換え)を少なくして、できるだけ長くコードを生き残ることが望まれます。

    プリズムまたはASP.NETを使用してコードモジュールを作成すると、(特定の)再利用可能なコードをその特定のテクノロジに縛り付けている可能性があります。 5年以上。これは、長期的なコードを比較的短期間の技術と結びつけることです。 「次の大きなこと」がリリースされてから数年後にプロジェクトが移行されるとどうなりますか? Prismまたは現在のASP.NETに結合されている場合、技術を切り替えるのは難しい/不可能なことがあります。

    アプリケーションロジックを抽象化し、PrismやASP.NETとインターフェースできる最先端のテクノロジーに依存しない構造に移行する方がよいでしょう。デカップリングのこのアイデアは、IoC/DIコンテナ(Unityのようなもの)が後に非常に普及した主な理由の1つです。また、単体テスト全体をより簡単にすることができます。

    本質的には、いくつかのアプリケーションインフラストラクチャ(N-tierなど)を使用して、ビジネスロジックとデータアクセスをカプセル化し、ユーザーインターフェイスを再利用できるように抽象化します。 Model-View-Presenterはまた、再利用と単体テストを最大限にするためにUIを抽象化しています。

    N階層アプリケーションインフラストラクチャは、分散コンピューティングを見ているときにも輝きます。クライアントのマシンでPrismアプリケーションを実行したいが、アプリケーションのデータ(つまり、SQL Serverデータベース例えば、サーバー上の?クライアントのマシンがネットワーク上にある場合は問題ありません。サーバーへの接続文字列を問題なく送信できます。しかし、インターネットを介してデータにアクセスする予定がある場合は、アプリケーションのデータレイヤーを抽象化し、インターネットを介してデータを(安全に)取得する方法を提供する必要があります。

    +0

    downvoteにコメントしてください? – Doug