今天在搭三层结构的时候,遇到了一个问题,一个关于查询的问题. 因为刚接触三层+ActiveRecord+工厂模式结构,对这一套结构体系还不是很熟悉,所以只能是边学边搭,结果在数据层(DAL)遇到这样一个问题:对一个管理员分组表进行相应条件的筛选.返回DataTable. 一开始自己的想法很简单,不就是一个普通的筛选吗?接着开始写代码:
/// <summary>
/// 返回管理员分组数据集合
/// </summary>
/// <param name="where">Sql语句条件</param>
/// <param name="parameters">参数</param>
/// <returns>数据集</returns>
public DataTable GetListTable(string where, SqlParameter[] parameters)
{
return MySqlHelper.ExceteDataTable(Sql,parameters);
}
写完以后接着一想,好像不大对.这样一个方法在业务逻辑层调用的时候势必要写Sql语句和调用SqlParameter,
这样项目就不可能实现支持多数据库,并且分层也不明确了.
后来经过思考,修改代码
public DataTable GetListTable(AdminGroup Model)
{
.................(相关代码(拼写Sql语句))
return MySqlHelper.ExceteDataTable(Sql,parameters);
}
但是这样一来,如果我需要多表查询的时候怎么办?
经过几个小时的思考和google,baidu还有寻求朋友的帮助 以后一个朋友和我对话提醒了我,他说:关系型数据库和面向对象编程天生不搭配,你只能根据需求在灵活和性能上取一个平衡点. 我想是啊 一个后台管理员分组的表记录一定很少 基本是不用筛选的 所以直接写一个返回所有记录的方法就可以了.如果有些表涉及多表查询,那就专门针对它们写一个针对多表查询的方法,一切以需求为主取灵活和性能的平衡点