[待解决问题] 有关三层架构的问题
提问时间: 2008-05-08 18:16
悬赏分:50 离问题结束还有 10 天 23 小时 浏览:84 次


现在两段代码
 数据层:
 public static int GetCount(int UserID)
 {
    SqlParameter[] ps = BaseProvider.GetParameter("User","UserID");
    ps[2].Value = " UserID = " + UserID + " and IsFreeze=0";
    SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "GetTotalCountByWhere", ps);
    return Convert.ToInt32(ps[3].Value.ToString());
 }
 逻辑层:
 public int GetFreezeCount(int UserID)
 {
    return Provider.User.GetCount(UserID);
 }
还有一种是
 数据层:
 public static int GetCount(string Where)
 {
    SqlParameter[] ps = BaseProvider.GetParameter("User","UserID");
    ps[2].Value = Where
    SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "GetTotalCountByWhere", ps);
    return Convert.ToInt32(ps[3].Value.ToString());
 }
 逻辑层:
 public int GetFreezeCount(int UserID)
 {
    return Provider.User.GetCount("UserID="+UserID.ToString()+" and IsFreeze=0");
 }
到底哪一种写法才是对的呢
IsFreeze表示是否冻结的意思,那个IsFreeze=0这个条件是属于业务逻辑呢?还是属于数据操作呢
第一种好还是第二种好呢

 

还有一个问题就是
在做数据更新的时候一般都是这些写的
public void UpdateInfo(Module.PlanInfo info)
{
  Provider.Plan.Update(info.PlanID, info.AdCount,info.PlanCount, info.IsStop,info.AdvertiseID);
}
这样表示全部字段都更新,但是一般情况下只要更新一两个字段就够了
例如public void UpdateAdCount(int PlanID,int AdCount,int PlanCount){}
现在有两种做法一种是在UpdateAdCount根据PlanID重新Get至一个实体类,再把这两个参数的值赋给实体类的字段
最后还是调用UpdateInfo这个方法


另外一种做法就是到数据层再写一个方法
Provider.Plan.Update(int PlanID, int AdCount,int PlanCount);
最后逻辑层直接调用这个方法

第一种要损耗一点性能
第二种代码写多很多,
要如何取舍呢


提问者:马陈灵 - 初学一级
所有回答(2)
个人感觉,在业务逻辑层不应该出现任何SQL语句与拼接字符串之类的信息.所有SQL语句全部放在数据库访问层.而业务逻辑层只负责业务操作.
3天前   回答者:侯垒 - 小虾三级
业务逻辑层是不应该出现写SQL相关的信息的,像上楼说的那样,一般只负责用户逻辑。如果感得参数据过多的话,可以用实体对象。UpdateInfo时以使用方便为主,多写几个重载,也是值得的。

3天前   回答者:JackLee - 菜鸟二级
3天前   马陈灵 :
那第二问题不知道你是怎么做的呢
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除