2011-07-01 8 views
1

私は、主にマイクロソフトの技術を使用しているショップの商用SaSサイトを構築する技術を研究しています。SaSの推奨(Microsoftベース)フレームワークですか?

サイトにはプラグイン可能なモジュールがあり、機能は無料または有料です。お客様は&の機能の変更をチョップすることができます。&は請求の自動調整が可能です。

私はこの自分自身を転がしていた場合、私が使用したい:

...と手ロールIOCベースのプラグイン・アーキテクチャー(例えば、ASP.NET MVCプラグインherehereにいくつかの良い議論があります)。

しかし、この時点で私は疑問に思っています - これは前に行われていますか?私はプラグインを組み込んだぼんやりとしたCMSのようなアーキテクチャーを想像しています。コマース&購読物です。そのすべては、FOSSまたは商用のいずれかの「棚外れ」のソリューションに組み込まれています。

このようなソリューションをお勧めする人はいらっしゃるのですか、それとも単に自分自身の仕事をしているのでしょうか?私はDotNetNukeを見て価値があるかもしれないと思っていますが、この種の作業のために本番環境で使用した人からのフィードバックに感謝します。

DotNetNukeがcontinuing with WebFormsに設定されているように見えますが、これは少なくとも私にとっては大きなターンオフです。その投稿のコメント投稿者の一人が言ったように、それは進化の行き詰まりです。

編集済み:このプロジェクトでは、Silverlightはで、間違いなくです。 AndroidやiOSタブレット&携帯電話などのMicrosoft以外の携帯端末など、幅広い端末をサポートする必要があります。合理的に豊かなUIが必要ですが、Javascriptでこれをやっていきます。

答えて

1

プラグ可能なモジュールが必要なプロジェクトでは、MEF(.net 4.0に組み込まれています)を使用しました。

this great code for compiling views into a dllを使用することにより、MEFを使用して、追加のビューと拡張機能を簡単にロードすることが容易になりました。

あなたの提案とは違ったことは、LinqをSqlに変換するのではなく、LinqをEntityに使うことだけです。最新のコード-最初のバージョンは、物事を得るために、それは非常に迅速になり、

マーティン

0

は、なぜ誰もが「既製品」ソリューションでは、これらをロールでしょう実行していますか? アーキテクチャのこれらの部分は非常に独立しており、ニーズに合わせて代替することができます。

1

私はVOIP PBXソリューションで同様のソリューションを行っています。私はnhibernate、autofac、およびいくつかの独自のライブラリを使用してすべてを自分で作っています。通常のアプリケーションを実行することと実際には違いはありません。

あなたが理解する必要がある最も重要な点は、すべてのモジュールが常にロードされていることです。あなたがうまくいくソリューションが必要な場合(顧客ごとに1つのアプリドメインで混乱する可能性がありますが、それはあまり効率的ではありません)、その周りにはありません。

代わりに、標準の.NET CAS(コードアクセスセキュリティ)ソリューションを使用して承認を制御する必要があります。独自のIPrincipalIIdentityを作成してください。プリンシパルはテナント(組織)に対応し、IPrincipalはユーザーに対応する必要があります。

テナントに属すべきすべてのクラス/エンティティにITenantEntityインターフェイス(テナントdb idを含む)を使用します。現在ログオンしているユーザーが実際に要求されたエンティティにアクセスできることを検証するために使用されます。

アプリケーションがマルチスレッドの場合(例えば、バックグラウンドスレッドやメンテナンスを行っているタイマーがある場合など)は最も難しいことです。その理由は、正確なIPrincipalに切り替えることを忘れることは非常に簡単であるため、すべてのCASチェックが失敗します。これを回避する最も簡単な方法は、TimerThreadのカスタムクラスを作成して、IPrincipalを指定するようにするか、少なくとも切り替えるのが簡単です。

もう1つの一般的なアプローチは、すべてのサービス/リポジトリメソッドでtenantId引数を使用することです。しかし、それは非常に堅牢なソリューションではありません。

関連する問題