首页 新闻 搜索 专区 学院

有关三层架构的问题

0
悬赏园豆:50 [已关闭问题]
<P><BR>现在两段代码<BR>&nbsp;数据层:<BR>&nbsp;public static int GetCount(int UserID)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp; SqlParameter[] ps = BaseProvider.GetParameter("User","UserID");<BR>&nbsp;&nbsp;&nbsp; ps[2].Value = " UserID = " + UserID + " and IsFreeze=0";<BR>&nbsp;&nbsp;&nbsp; SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "GetTotalCountByWhere", ps);<BR>&nbsp;&nbsp;&nbsp; return Convert.ToInt32(ps[3].Value.ToString());<BR>&nbsp;}<BR>&nbsp;逻辑层:<BR>&nbsp;public int GetFreezeCount(int UserID)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp; return Provider.User.GetCount(UserID);<BR>&nbsp;}<BR>还有一种是<BR>&nbsp;数据层:<BR>&nbsp;public static int GetCount(string Where)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp; SqlParameter[] ps = BaseProvider.GetParameter("User","UserID");<BR>&nbsp;&nbsp;&nbsp; ps[2].Value = Where<BR>&nbsp;&nbsp;&nbsp; SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, "GetTotalCountByWhere", ps);<BR>&nbsp;&nbsp;&nbsp; return Convert.ToInt32(ps[3].Value.ToString());<BR>&nbsp;}<BR>&nbsp;逻辑层:<BR>&nbsp;public int GetFreezeCount(int UserID)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp; return Provider.User.GetCount("UserID="+UserID.ToString()+" and IsFreeze=0");<BR>&nbsp;}<BR>到底哪一种写法才是对的呢<BR>IsFreeze表示是否冻结的意思,那个IsFreeze=0这个条件是属于业务逻辑呢?还是属于数据操作呢<BR>第一种好还是第二种好呢</P> <P>&nbsp;</P> <P>还有一个问题就是<BR>在做数据更新的时候一般都是这些写的<BR>public void UpdateInfo(Module.PlanInfo info)<BR>{<BR>&nbsp; Provider.Plan.Update(info.PlanID,&nbsp;info.AdCount,info.PlanCount, info.IsStop,info.AdvertiseID);<BR>}<BR>这样表示全部字段都更新,但是一般情况下只要更新一两个字段就够了<BR>例如public void UpdateAdCount(int PlanID,int AdCount,int PlanCount){}<BR>现在有两种做法一种是在UpdateAdCount根据PlanID重新Get至一个实体类,再把这两个参数的值赋给实体类的字段<BR>最后还是调用UpdateInfo这个方法</P> <P><BR>另外一种做法就是到数据层再写一个方法<BR>Provider.Plan.Update(int PlanID, int AdCount,int PlanCount);<BR>最后逻辑层直接调用这个方法</P> <P>第一种要损耗一点性能<BR>第二种代码写多很多,<BR>要如何取舍呢<BR></P>
马陈灵的主页 马陈灵 | 初学一级 | 园豆:12
提问于:2008-05-08 18:16
< >
分享
其他回答(3)
0
个人感觉,在业务逻辑层不应该出现任何SQL语句与拼接字符串之类的信息.所有SQL语句全部放在数据库访问层.而业务逻辑层只负责业务操作.
侯垒 | 园豆:3435 (老鸟四级) | 2008-05-09 09:12
0
业务逻辑层是不应该出现写SQL相关的信息的,像上楼说的那样,一般只负责用户逻辑。如果感得参数据过多的话,可以用实体对象。UpdateInfo时以使用方便为主,多写几个重载,也是值得的。
伽马科技.攻城师 | 园豆:1303 (小虾三级) | 2008-05-09 17:27
0
在逻辑层拼接sql条件是不正确的;这些条件可以翻译成业务逻辑参数,传递到da层去做拼接sql操作。 请看下面的随笔: 三层开发中容易犯的错误 http://www.cnblogs.com/yukaizhao/archive/2007/03/08/layer_develop_errors.html
玉开 | 园豆:8822 (大侠五级) | 2008-05-14 11:22
0
不要在逻辑层里掺入SQL.. Update还是整个实体进去好... 性能耗损也不会太大的.
Animax! | 园豆:315 (菜鸟二级) | 2008-05-23 20:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册