0

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

将数据表转换为具有相应业务对象的列表的类。

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 上。按钮单击触发引擎中的事件。事件:汇款。引擎将任务传递给业务层。在业务层必须执行算法。在交易中,有两个操作:从您的金额中减去金额,以及为接收方添加相同的金额。然后业务层将任务传递给访问层,访问层依次生成要执行的 SQL 并将其发送到数据库服务器。

于 2014-08-05T05:34:54.680 回答