数据链路层和最佳实践

时间:2014-08-05 04:53:22

标签: layered data-link-layer

我需要了解以下方法中的最佳做法。 我有一个使用分层架构的应用程序。在数据层,我有两个类,如下所示。

将数据表转换为具有相应业务对象的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查询编写不同的函数来返回不同的业务对象。

感谢。

1 个答案:

答案 0 :(得分:0)

您应该拥有以下图层:

  • 数据库
  • 数据访问层(负责支持每个表所需的每种操作类型的层)
  • 业务层(负责算法数据库操作组合的层)
  • 发动机
  • UI

假设您有一个银行应用程序并且用户想要向另一个用户汇款,因此他键入值,选择其他用户然后单击按钮。这发生在UI上。按钮单击会触发引擎中的事件。事件:寄钱。引擎将任务传递给业务层。在业务层,必须执行算法。在交易中有两种操作:从您的金额减去金额并为接收者增加相同的金额。然后,业务层将任务传递给访问层,访问层又生成要执行的SQL并将其发送到数据库服务器。