1

私のビジネス サービス クラスが SqlConnection を開くことを密結合と見なしますか?

実際、ビジネス サービスは具体的なデータ プロバイダーを認識する必要はありません。

パブリック クラス UnitService:

 public void DeleteUnit(Unit unit)
            {
                using (SqlConnection con = new SqlConnection());
                using (TransactionScope trans = new TransactionScope())
                {
                    con.Open();

                    _unitDataProvider.Delete(unit,con);
                    _employeeDataProvider.UpdateEmployees(con);

                    trans.Complete();
                }             
            }
4

2 に答える 2

3

あなたの質問は非常に意見に左右されます...

私はコードを抽象化し、可能な限り分離するのが大好きです。いつものように、問題は時間と要件です。

ビジネス層内で広範な単体テストを必要としない小規模で単純なプロジェクトの場合、必ずしもベスト プラクティスに従っているとは限りませんが、結合はまさに顧客/エンド ユーザーが必要としているものであり、よりタイムリーにソフトウェアを提供できる可能性があります。ファッション。

より大規模な/より複雑な/などのプロジェクトでは、永続化レイヤーを抽象化するのが最善の場合があります。

作成するすべてのコード行についてベスト プラクティスベスト デザイン パターンベスト コーディング原則に従うことは、まったく現実的ではありません。私は、そのような本の著者が、パターンは要件に潜在的に過剰であり、必要に応じて単にツールとして使用する必要があると言及していることがよくあることを発見しました。

それが役立つことを願っていますか?

于 2012-01-26T21:18:53.640 に答える
0

私のビジネスサービスクラスがSqlConnectionを開くことは、緊密な結合だと思いますか?

はい。その仕事をするための計算がある場合は、プレゼンテーション層に到達する前にビジネス層で行うことができます。

私が提案したいもう1つのことは、次の場合にIDisposableオブジェクトに「Using」ステートメントを使用することです。SQLConnection class

私はそれが以下のようになるべきだという意味でした。

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) {
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Parameter value";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) {
        if (dr.Read()) {
        }
    }
}
于 2012-01-26T21:13:22.970 に答える