ビジネスロジックとデータ呼び出しを別々のアセンブリとして持つasp.net Webソリューションを継承しました。ビジネス層には、HttpContextセッション値を取得/設定するコールが少数しかありません。私はビジネスロジックからこれを抽象化するための例を見てきました。私は非Webプロジェクトでこれらのアセンブリを再利用できるようにしたいと考えています。これを行う。私はセッションシナリオに応じていくつかの種類の持続ストアから値を取得するセッションファクトリを考えていましたが、私はアーキテクチャには本当に新しく、ポインタまたは2つを感謝します。ビジネスロジックからASP.netセッションコールを削除する
答えて
ビジネス層にはどのようなビジネスがセッションを持っていますか?この文をもう少し理解するには、次のように考えてください:なぜビジネス層はユーザー関連の情報を永続させる必要がありますか?
ビジネス層はとプロセスで仕事にユーザー関連のデータが必要ですが、ない店こと。つまり、現在格納されているデータを注入する必要があります。つまり、必要な機能にパラメータとして渡す必要があります。このようにして建築契約を結ぶことは、あまりにも明白な方法で、「ちょっと、私の仕事をするためのユーザー情報が必要です」と言います。ビジネスレイヤーは、そのデータを使用して何らかの方法でユーザーを認証または承認することはできますが、認証結果の処理が完了したら破棄する必要があります。値が永続化されて1つまたは2つのデータベースをデータベースに保存する場合、データベース呼び出しの効率性に問題があります。そのような単純なものに対するデータベース呼び出しは迅速です。
私の提案は、ビジネスレイヤーからセッションへの参照をすべて削除し、渡される必要があるユーザーデータを含めるように関数の署名を変更することです。
リフレクションには正しいですが、そのレイヤーに値を保存する必要はありません。セッションで現在保持されているデータをレイヤーで使用できるようにするだけです。この例では、セッションに格納されているGuidのリストはデータベースに直接反映されるため、必要に応じてそこから取得できます。 私が本当に望んでいたのは、このデータのリクエストを、適切な場所からリストを返すサードパーティ(セッションファクトリ)に渡すことでした。これは、UIとデータベースから呼び出されるSessionです。そうでない場合。 –
恐ろしい...私は正当な理由で投票に反対しているわけではありませんが、私はこの投票に投票した人から私の間違いで教育されるのが大好きです。私は2ポイントを欠場することはありません、それは単に原理の問題です。 – slugster
私の意見では、ISessionProvider
インターフェイスを作成し、Dictionary<string, object> {get; }
とするのが最も簡単な方法です。その後、実際のセッションバッグの内容を返すpublic class HttpSessionProvider : ISessionProvider
を作成します。
少なくとも、このオブジェクトをWebアプリケーションでインスタンス化し、手動で指定するか、IOCパターンを使用してバックエンドクラスに指定します。
[編集]小さな反射の後、それはクリーンな方法ではありません。 asp.netのフレームワークに依存することはありませんが、セッションの "asp.net"コンテンツにはまだアクセスできます。この場合 、インタフェースを保つが、どちらかは、特定のプロパティ(文字列の顧客、int型のユーザーIDなど)を追加したり、唯一の私はいくつかのプロジェクトにこのような何かを行っている
実際のビジネス・データと辞書を返します:
public interface IAppContext {
string SomeVariable {
set;
get;
}
}
public class HttpContextAppContext : IAppContext {
public static readonly string CONTEXT_PREFIX = "appcontext_";
public string SomeVariable {
set { HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"] = value; }
get { return (string)HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"]; }
}
}
- 1. 特定のDjangoセッションコールを削除する
- 2. 「ビジネスロジック」レイヤーから「GUI」レイヤーを削除する方法はありますか?
- 3. ASP.NET MVC - ショッピングカートから削除
- 4. ビジネスロジックASP.NET MV
- 5. asp.netプロジェクトからDLL(アセンブリ)をパッケージから削除するには?
- 6. 複数のテーブルからの削除ASP.NET
- 7. 私のasp.netデータベースから項目を削除する方法
- 8. ASP.NETのmasterpage: - masterpageからusercontrolを削除するには
- 9. ASP.Net Core 2 MVCプロジェクトからブートストラップを削除する
- 10. ASP.NETアプリケーションのgridviewからレコードを削除する
- 11. データベースからショッピングカートを削除するときのASP.NET MVC?
- 12. Asp.Net Web Api Projectから参照を削除する
- 13. Subversionからweb.configを削除する(ASP.NETプロジェクト)
- 14. asp.netのDataTableから行を削除する
- 15. ASP.Net Coreのログエントリからプロパティを削除する方法
- 16. ASP.NETがキャッシュからページを削除する
- 17. アップロードしたファイルをASP.NET MVC3のサーバーから削除する
- 18. ASP.NET MVCの部分ビューからロジックを削除する
- 19. ASP.NetからアプリケーションTempファイルを削除する
- 20. Asp.Netキャッシュからアイテムを削除するときのキャッシュとメモリリーク
- 21. ASP.NETアイデンティティコア2.0からロール関連テーブルを削除する方法
- 22. 応答からHttpErrorを削除するASP.NET Web API
- 23. 複数のテーブルからユーザーレコードを削除するASP.Net mvc
- 24. キャッシュから特定の項目を削除する(ASP.NET)
- 25. asp.netページからWebResource.axdを削除するには?
- 26. 時刻asp.netから秒数を削除する
- 27. Asp.NetのTreeViewNodeからノードのインデントを削除する
- 28. asp.net mvcのURLからコントローラ名を削除するには?
- 29. フォルダからファイルを削除する - ajax asp.net c#
- 30. Androidをリストビューから削除してから削除する
セッション状態にはどのような値が格納されていますか? –
今はGuidのリストとしてユーザーの詳細とそのデータ権限を含む複雑な型です。 –