0

私は以前の開発者がどのように決定を下したのか分かりません。 DALとBAL n-tier C#BALメソッドとDALメソッドが全く同じ名前(シグネチャなど)のアプリケーション

  • 静的で

    1. まったく同じメソッド名は、どこにでもある
    2. 私は、ベストプラクティスに従うことを新しい方法で何をすべきでしょうか?

    既存のコードの例:

    呼び出すapplictionは

    public class CreditMgr 
    { 
        public static DataSet GetCreditRqstInfo(String GeoID) 
        { 
         try 
         { 
          DataSet DS = new DataSet(); 
          DS = CreditIntfDB.GetCreditRqstInfo(GeoID); 
          return DS; 
         } 
         catch (Exception ex) 
         { 
          throw ex; 
         } 
        } 
    } 
    

    DataSet DS = CreditMgr.GetCreditRqstInfo(ddlGEO.Text); 
    

    BAL(とらわれないコンソールアプリケーションやWebアプリケーションなど。かもしれません) DAL

    public class CreditIntfDB 
    { 
        public static DataSet GetCreditRqstInfo(String GeoID) 
        { 
         try 
         { 
          Database DB = new SqlDatabase(Common.ConnectionString); 
          String SQLCommand = Common.SPGetRqstInfo; 
          DbCommand DBCommand = DB.GetStoredProcCommand(SQLCommand); 
          DBCommand.CommandTimeout = Common.CommandTimeOut; 
          DB.AddInParameter(DBCommand, "@a_geo_id", DbType.String, GeoID); 
          DataSet DS = new DataSet(); 
          DB.LoadDataSet(DBCommand, DS, new String[] { "CreditRqstInfo" }); 
    
          return DS; 
         } 
         catch (Exception ex) 
         { 
          throw ex; 
         } 
        } 
    } 
    

    はい、全体のポイントは、分離の層を持つことであるが、同じメソッド名が使用されているとき、および静的、それぞれが単純に文字列を渡すとまったく同じことをやってとを戻ってきていますデータセットは私に "コードの匂い"を持っています

    良い方法の提案?

  • +0

    。私は、クラスが 'BAL'か' DAL'かどうかを示す名前空間があることを確信しています。 – Venky

    +2

    はい、コードは悪いですが、あなたの質問は何ですか? 'catch(Exception ex){throw ex; } 'うーん。 – Blorgbeard

    +0

    これは、[Stack Exchange Code Review](https://codereview.stackexchange.com/)に適しています。一般的に私はあなたに同意します - 層のための層は良いデザインではありません。各層には目的が必要です。すべてのクラスに責任が必要です。意味のあるビジネスロジックがない場合、BALはあなたのケースにとって貴重ではないかもしれません。 –

    答えて

    0

    標準オブジェクト指向プログラミング(OOP)の設計によると、あなたのBALのクラスは、いくつかの現実世界のビジネス上の意味を持つ「もの」を表している必要があります。代わりにCreditRqstを取得するための静的メソッドを持つCreditMgrを有していると、独自のデータを格納するクラスCreditRequest(例えば、データセット)を作成し、そして好ましくはいくつかのビジネス向けやり方でそれをラップ(CreditLineまたはアカウントのリストの例リスト) 。

    そこから、CreditRequestの中にGetメソッドを実装するか、CreditMgrを(CreditBureau、Bank、AccountsDeskなどの)サービスオブジェクトに変更することができます。それはString GeoIDを受け取り、CreditRequestを返します。

    さらに、キー(GeoIDなど)を文字列として使用することも賢明です。もう少し強く入力したものを考え出すことができますか?あなたは、(最大長さ、使用できる文字、チェックサムの要件など)の要件を強制するクラスジオイドを作成することができ

    あなたがDAL`を特定するのは簡単だろう `BAL``と接尾辞またはできれば名前が同じであるにもかかわらず
    関連する問題