3层架构——把sql查询放在业务层好吗?

本文关键字:业务 查询 sql 3层 | 更新日期: 2023-09-27 18:03:42

我的asp.net项目是基于三层架构的。

(数据访问层)DAL -(类库)

    private static string connString ="";
    private static OracleConnection conn;
    public static OracleConnection OpenConn()
    {
        if (conn==null)
        {
            conn = new OracleConnection(connString);
        }
        if (conn.State != ConnectionState.Open)
        {
            conn.Open();
        }
        return conn;
    }
    public static DataTable Select(string query)
    {
        DataTable dt = new DataTable();
        OracleDataAdapter da = new OracleDataAdapter(query, OpenConn());
        da.Fill(dt);
        return dt;
    }
    public static void Execute(string query)
    {
        OracleCommand cmd = new OracleCommand(query, OpenConn());
        cmd.ExecuteNonQuery();
    } 

我已经把我所有的查询(业务逻辑层)BLL类(所有BLL类都在单独的类库项目)

e。g EmployeeBLL

public static class EmployeeBLL
{
    public static DataTable Employees()
    {
       DataTable dt = new DataTable();
        string q = string.Format("select * from employees");
        dt = OraDAL.Select(q);
        return dt;
    }
    public static DataTable AddEmployee(string name)
    {
        DataTable dt = new DataTable();
        string q = string.Format("INSERT INTO employees (ename) VALUES('{0}')", name);
        dt = OraDAL.Select(q);
        return dt;
    }
}

我看过一些关于三层架构的博客文章,其中sql查询是在BLL中构建的,这就是为什么我开发了这个项目,保留sql查询在BLL中,但现在我觉得我应该把它们移到DAL中。

所以我的问题是

  1. 是可以保持sql查询在BLL还是我应该把它们移动到DAL?
  2. 是否可以使用数据表在层之间移动数据,或者我应该使用DTO代替?

3层架构——把sql查询放在业务层好吗?

Is it okay to keep sql queries in BLL or I should move them to DAL?

没关系,但我不认为这是正确的事情。把它们放到你的文件夹里,放到它们该去的地方。

Is it okay to use datatables for moving data between layers or I should use DTO's instead?

我更喜欢使用dto,我认为这是一种方法,但使用数据表也是可以接受的。

你应该检查像NHibernate或实体框架4+这样的orm,但如果你正在使用Oracle,我认为NHibernate更好。

ORM将基本代表您的DAL,它将负责用您当前映射到的数据库的方言为您创建SELECT, INSERT, UPDATE和DELETE语句。

它将允许您在域模型上而不是在表上执行查询。这就是你想要做的。它将抽象您的数据库,以便您可以在将来创建新的映射,并将您的域对象映射到MySQL。或者在一些内存数据库上做额外的映射,以允许您运行快速集成测试。

学习NHibernate(或其他ORM)是一项投资,但在我看来,如果你将来要使用。net和RDBMS,那么它值得你花时间。

将应用程序分层的好处在于,如果您需要更改数据存储库,您可以以最小的痛苦来完成;此外,您可以使用模拟等单独测试对象。

如果你开始将sql查询等硬连接到业务对象中,那么迁移到sql而不是oracle可能意味着重构业务层和数据层中的对象。

我个人认为业务对象不应该看到数据表。更好的方法是使用数据层和业务层都引用的共享对象(或接口)。