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中。
所以我的问题是
- 是可以保持sql查询在BLL还是我应该把它们移动到DAL?
- 是否可以使用数据表在层之间移动数据,或者我应该使用DTO代替?
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可能意味着重构业务层和数据层中的对象。
我个人认为业务对象不应该看到数据表。更好的方法是使用数据层和业务层都引用的共享对象(或接口)。