0

次のアプローチのベスト プラクティスを知る必要があります。階層化アーキテクチャを使用しているアプリケーションがあります。データ層には、以下のような 2 つのクラスがあります。

対応するビジネス オブジェクトを使用して、データ テーブルをリストに変換するクラス。

public List<User> GetUser()
        {
            List<User> user = new  List<User>();
            DataTable dtLoginDetails = new DataTable();
            string selectQuery = "SELECT * FROM user_details";
           try
            {

                dtUserDetails = connection.SelectCommand(selectQuery); // call the function in another class
            }
            catch (MySqlException mx)
            {
                throw;
            }
            if (dtUserDetails.Rows.Count > 0)
            {
               //loops through datatable 'dtUserDetails' and converts to List
            }
            return user;            
        }

すべてのデータベース操作を行う別のクラス。

public DataTable SelectCommand(String query)
        {

                DataTable dtSelect = new DataTable();
                try
                {
                    MySqlCommand command = ConnecttoDB().CreateCommand();
                    command.CommandText = query;
                    MySqlDataAdapter dtAdapter = new MySqlDataAdapter(command);
                    dtAdapter.Fill(dtSelect);
                    DisconnecttoDB();
                }
                catch (MySqlException mx)
                {
                    throw;
                }
                finally
                {
                    DisconnecttoDB(); 
                }
                return dtSelect;
        }

だから、これが良いアプローチなのか、それとも以下のように書くべきなのか知りたいだけです。

 public List<Person> Read()

        {
            con.ConnectionString = ConString;
            if (ConnectionState.Closed == con.State)
                con.Open();
            SqlCommand cmd = new SqlCommand("select * from Person",con);
            try
            {
                SqlDataReader rd = cmd.ExecuteReader();
                while (rd.Read())
                {
                    objP = new Person();
                    objP.ID = Convert.ToInt16(rd.GetValue(0));
                    objP.name = rd.GetString(1);
                    objP.surname = rd.GetString(2);
                    List.Add(objP);
                }

                return List;
            }
            catch

            {
                throw;

            }
        }

この場合、データベース操作を行うための別のクラスはありませんが、別のビジネス オブジェクトを返す別の SQL クエリを使用して別の関数を記述する必要があります。

ありがとう。

4

1 に答える 1

0

次のレイヤーが必要です。

  • データベース
  • データ アクセス層 (各テーブルに必要な各操作タイプをサポートする層)
  • ビジネスレイヤー(アルゴリズムデータベース操作の組み合わせを担当するレイヤー)
  • エンジン
  • UI

バンキング アプリケーションがあり、ユーザーが別のユーザーに送金したいとします。彼は値を入力し、別のユーザーを選択してからボタンをクリックします。これは UI で発生します。ボタンをクリックすると、エンジンでイベントがトリガーされます。イベント: 送金。エンジンはタスクをビジネス層に渡します。ビジネス層では、アルゴリズムを実行する必要があります。トランザクション内には 2 つの操作があります。自分の金額からの金額の減算と、受信者への同じ金額の加算です。次に、ビジネス レイヤーはタスクをアクセス レイヤーに渡します。アクセス レイヤーは、実行する SQL を生成し、データベース サーバーに送信します。

于 2014-08-05T05:34:54.680 に答える