Asp.net WebアプリケーションはLINQ-to-SQLを使用しており(ストアドプロシージャはdbmlファイルにドラッグされてクラスを作成します)、3層アーキテクチャは以下のようなものです。読者がうまく答えられるように、読者に適切なアイデアを与えるための大まかな方法を作成しました。
namespace MyDataLayer
{
public class MyDataAccess
{
// global instance of datacontext
MyDataModelDataContext myDB = new MyDataModelDataContext(); (#1)
public void GetUserIDByUsername(string sUserName, ref int iUserID)
{
int? iUserIDout = 0;
// this will make call to SP in SQL DB
myDB.USP_RP_GETUSERIDBYUSERNAME(sUserName, "", ref iUserIDout);
iUserID = (int)iUserIDout;
}
public List<USP_APP_USERDETAILSResult> GetUserDetails(string sUserIDs)
{
// this will make call to SP in SQL DB
return myDB.USP_APP_USERDETAILS(sUserIDs).ToList();
}
...
... // several CRUD methods
}
}
namespace MyBusinessLayer
{
public class SiteUser
{
// global DataAccess instance
MyDataLayer.MyDataAccess myDA = new MyDataAccess(); (#2)
public void GetUserIDByUsername(string sUserName, ref int iUserID)
{
myDA.GetUserIDByUsername(sUserName, ref iUserID);
}
public List<USP_APP_USERDETAILSResult> GetUserDetails(string sUserIDs)
{
// this will make call to SP in SQL DB
return myDA.GetUserDetails(sUserIDs);
}
...
... // several CRUD methods
}
}
namespace MyWebApplication
{
public class BaseWebPage : System.Web.UI.Page
{
// static business layer instance
public static MyBusinessLayer.SiteUser UserBLInstance = new SiteUser(); (#3)
...
}
}
// Index.aspx.cs code fragment
namespace MyWebApplication
{
public class Index : BaseWebPage
{
public void PopulateUserDropDown()
{
// using static business layer instance declared in BaseWebPage
List<USP_APP_USERDETAILSResult> listUsers = UserBLInstance.GetUserDetails("1,2,3");
// do databinding and so on ...
}
...
}
}
質問
- (参照#1)DataAccessにグローバルデータコンテキストを設定することは良いアプローチですか?はい/いいえなぜですか?
- 提案がリクエストごとにdatacontextを持っている場合、そのためのベストプラクティスは何ですか
- (参照#2)BusinessLayerにグローバルDataAccessインスタンスを配置することは良いアプローチですか?はい/いいえなぜですか?
- リクエストごとにDataAccessインスタンスを使用することを提案している場合、そのためのベストプラクティスは何ですか
- (参照#3)BaseWebPageで宣言された静的ビジネスレイヤーインスタンスは良いアプローチですか?はい/いいえなぜですか?
- BLインスタンスとDLインスタンスの寿命を一般的に管理するための最良のアプローチ
IISからアプリケーションを再起動すると正常に機能する非常に単純な方法で、本番サーバーで定期的にInvalidCastExceptionが発生します。この問題が発生すると、SQL Management Studioから同じデータベースにアクセスして、同じSPを実行できます。
この問題に関する私たちの主な疑いは、DataContextの管理が不十分であり、DataContextの存続期間の管理についてネット上で多くの記事を読んだことがありますが、現在、さまざまなアプローチについて混乱しています。そのため、同じ状況にある多くの人が問題/回答について明確なアイデアを得ることができるように、質問を詳しく説明しました。