我们在开发三层Web应用程序时,通常做法界面访问业务逻辑层对象提供的数据获取服务来获取要呈现的数据(业务逻辑层对象可能访问数据库层对象返回数据)。为了支持界面数据查询要求,业务逻辑层对象需提供用来接收查询条件带参数的获取数据方法。当变更要求増加新的查询条件支持时我们不得不修改三层代码可扩性很差。我的做法业务层方法改为组合对象做为参数,这个自定义集合对象包含参数对象,参数对象有参数名称和条件值及枚举类型判定对象如><=!=等操作符,页面封装参数集合对象传给业务对象转成where条件并组装SQL执行追回数据。但这种做法传入参数名是字段名显然依赖了表字段,当表字段名更改我还需要修改三层代码!大家有什么好的办法?
解决方案 »
- 服务中使用事务循环提交的问题 急等...
- money类型
- 一个网页一个按钮,按一下弹出另一个网页,再按一下,还是那个那个网页,只刷新里面的数据??
- 急求一条sql语句
- 请教各位大侠水晶报表问题:放到服务器上后在客户端不能显示出现错误,可是在本地服务器上又可以,这是什么原因啊?
- 新人,高分,简单问题!
- 如何做一个DataGrid中嵌套
- .net高手请进,高分相赠
- 想用ASP.NET写个论坛,没有方向
- 我想在本页面中调用另一个页面中的edit1.text ,怎么调用呢???这样 另一个页面.edit1.text 不行的???
- dotnetCharting legendbox的使用方法
- C#为什么在子窗体中调用父窗没有作用
/// <summary>
/// 会员管理
/// </summary>
public class User
{
/// <summary>
/// 用户操作接口
/// </summary>
Ig_user us = DataAccess.CreateIg_user(); /// <summary>
/// 根据ID获取用户信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public g_userinfo getInfoByID(int id)
{
string _cond = " id=@id "; g_userinfo _param = new g_userinfo();
_param.id = id; return us.GetInfoByID(_cond, _param);
}
/// <summary>
/// 根据用户名获取用户信息
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public g_userinfo getInfoByUser(string UserName)
{
string _cond = " username=@username ";
g_userinfo _param = new g_userinfo();
_param.UserName = UserName; return us.GetInfoByID(_cond, _param);
} public g_userinfo getInfoByUser(string UserName, string Password)
{
string _cond = " username=@username and password=@password ";
g_userinfo _param = new g_userinfo();
_param.UserName = UserName;
_param.Password = Password; return us.GetInfoByID(_cond, _param);
}
/// <summary>
/// 创建用户
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public bool Create(g_userinfo info)
{
return us.Create(info) > 0;
} /// <summary>
/// 修改用户信息
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public bool Update(g_userinfo info)
{
string _cond = " id=@id "; return us.Update(info, _cond) > 0;
}
public bool SetPassword(int id, string password)
{
string _cond = " id=@id ";
g_userinfo info = getInfoByID(id);
if (info == null || info.id<=0) return false; info.Password = password; return us.Update(info, _cond) > 0;
}
/// <summary>
/// 删除用户信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool Delete(int id)
{
string _cond = " id=@id "; g_userinfo _param = new g_userinfo();
_param.id = id; return us.Delete(_cond, _param) > 0;
} /// <summary>
/// 获取用户列表
/// </summary>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <param name="keyword"></param>
/// <param name="rowcount"></param>
/// <returns></returns>
public IList<g_userinfo> getInfoList(int pageindex,int pagesize,string keyword,out int rowcount)
{
string _cond = " UserName like ('%' + @UserName +'%') or CNName like ('%'+ @UserName +'%')"
+ " or ENName like ('%'+ @UserName +'%') or Phone like ('%'+ @UserName +'%')"; g_userinfo _param = new g_userinfo();
_param.UserName = keyword; rowcount = us.GetRowCount(_cond, _param); return us.GetInfoList(pageindex, pagesize, " CreaTime DESC,id DESC ", _cond, _param);
}
}
1、只支持针对一个字符串类型的查询条件,只满足一个特定的应用,即使要提供排除掉特定关键字的数据代码都要修改,建议,传入一个查询条件集合对象,这个对象有关键字、判定条件(如=、!=、like 、<、>等)、关键值,这样是不是扩展性更好!
2、业务逻辑内含了SQL,限制了可支持的数据库。欢迎指教!