次のアプローチのベスト プラクティスを知る必要があります。階層化アーキテクチャを使用しているアプリケーションがあります。データ層には、以下のような 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 クエリを使用して別の関数を記述する必要があります。
ありがとう。