我需要知道以下方法中的最佳实践。我有一个使用分层架构的应用程序。在数据层,我有两个类如下。
将数据表转换为具有相应业务对象的List的类。
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查询编写不同的函数,返回不同的业务对象。
谢谢。
您应该有以下图层:
- 数据库
- 数据访问层(负责支持每个表所需的每种操作类型的层)
- 业务层(负责算法数据库操作组合的层) 发动机UI
假设你有一个银行应用程序,一个用户想把钱汇给另一个用户,所以他输入值,选择另一个用户,然后点击一个按钮。这发生在UI上。单击按钮将触发引擎中的事件。事件:送钱。引擎将任务传递给业务层。在业务层,必须执行算法。在交易中有两个操作:从您的金额中减去金额,以及为接收方增加相同金额。然后业务层将任务传递给访问层,访问层又生成要执行的SQL并将其发送到数据库服务器。