200分!! .net 7层架构调用规则!

7层架构(3层加工厂模式)调用顺序,说仔细点,比如:WEB层只能调用Rules(DAL),DAL又只能调用工厂....................
要求:调用顺序和规则都写出来。(其实对于高手来说,这很简单).
~
拜托,会就会,不会就不会,搞什么看书。我没有书。
不懂就别回答,虽然你是好心。但真是等于白说.

其实也就是3层,不用分的那么细,三层分别是表现层,业务逻辑层和数据访问层,一般来说的命名就是Model(表现层),BLL(业务逻辑层)和DAL(数据访问层)
一般来说Model是用来获取一个表中的数据,下面是一个Model类的一般写法,你可以看看
/// <summary>
/// 实体类LoginDetail
/// </summary>
public class LoginDetail
{
public LoginDetail()
{ }
#region Model
private string _memid;
private DateTime _logintime;
private DateTime _logouttime;
/// <summary>
/// 会员id
/// </summary>
public string MemID
{
set { _memid = value; }
get { return _memid; }
}
/// <summary>
/// 登录时间
/// </summary>
public DateTime LoginTime
{
set { _logintime = value; }
get { return _logintime; }
}
/// <summary>
/// 退出登录时间
/// </summary>
public DateTime LogoutTime
{
set { _logouttime = value; }
get { return _logouttime; }
}
#endregion Model
而BLL就是来调用DAL里面的类的,而且在Model和BLL都不能出现SQL语句的!!!!这个一定要注意,下面是个BLL的代码,给你看的这三个是同一个表的。
///这个就是声明DAL方法,这样才能引用DAL里面的类
private DAL.LoginDetail dal = new DAL.LoginDetail();
public LoginDetail()
{ }
#region 成员方法

/// <summary>
/// 得到最大ID
/// </summary>
public int GetMaxId()
{
return dal.GetMaxId();
}

/// <summary>
/// 是否存在该记录
/// </summary>
public bool Exists(string MemID)
{
return dal.Exists(MemID);
}

/// <summary>
/// 增加一条数据
/// </summary>
public string Add(KingsTech.Model.LoginDetail model)
{
return dal.Add(model);
}

/// <summary>
/// 更新一条数据
/// </summary>
public void Update(KingsTech.Model.LoginDetail model)
{
dal.Update(model);
}

/// <summary>
/// 删除一条数据
/// </summary>
public void Delete(string MemID)
{
dal.Delete(MemID);
}

/// <summary>
/// 得到一个对象实体
/// </summary>
public KingsTech.Model.LoginDetail GetModel(string MemID)
{
return dal.GetModel(MemID);
}

/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
return dal.GetList(strWhere);
}

/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetAllList()
{
return dal.GetList("");
}

/// <summary>
/// 获得数据列表
/// </summary>
//public DataSet GetList(int PageSize,int PageIndex,string strWhere)
//{
//return dal.GetList(PageSize,PageIndex,strWhere);
//}

#endregion 成员方法
你可以发现BLL中的东西就是一个方法加里面的一个retunrn,其实BLL很简单
而DAL里面就是写SQL语句的并且直接操作数据库了,代码如下
public LoginDetail()
{ }
#region 成员方法

/// <summary>
/// 得到最大ID
/// </summary>
public int GetMaxId()
{
return DbHelperSQL.GetMaxID("MemID", "LoginDetail");
}
/// <summary>
/// 是否存在该记录
/// </summary>
public bool Exists(string MemID)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(1) from LoginDetail");
strSql.Append(" where MemID= @MemID");
SqlParameter[] parameters = {
new SqlParameter("@MemID", SqlDbType.VarChar)
};
parameters[0].Value = MemID;
return DbHelperSQL.Exists(strSql.ToString(), parameters);
}

/// <summary>
/// 增加一条数据
/// </summary>
public string Add(KingsTech.Model.LoginDetail model)
{
//model.MemID=GetMaxId();
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into LoginDetail(");
strSql.Append("MemID,LoginTime,LogoutTime)");
strSql.Append(" values (");
strSql.Append("@MemID,@LoginTime,@LogoutTime)");
SqlParameter[] parameters = {
new SqlParameter("@MemID", SqlDbType.NVarChar),
new SqlParameter("@LoginTime", SqlDbType.SmallDateTime),
new SqlParameter("@LogoutTime", SqlDbType.SmallDateTime)};
parameters[0].Value = model.MemID;
parameters[1].Value = model.LoginTime;
parameters[2].Value = model.LogoutTime;

DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
return model.MemID;
}
/// <summary>
/// 更新一条数据
/// </summary>
public void Update(KingsTech.Model.LoginDetail model)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("update LoginDetail set ");
strSql.Append("LoginTime=@LoginTime,");
strSql.Append("LogoutTime=@LogoutTime");
strSql.Append(" where MemID=@MemID");
SqlParameter[] parameters = {
new SqlParameter("@MemID", SqlDbType.NVarChar),
new SqlParameter("@LoginTime", SqlDbType.SmallDateTime),
new SqlParameter("@LogoutTime", SqlDbType.SmallDateTime)};
parameters[0].Value = model.MemID;
parameters[1].Value = model.LoginTime;
parameters[2].Value = model.LogoutTime;

DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
}

/// <summary>
/// 删除一条数据
/// </summary>
public void Delete(string MemID)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("delete LoginDetail ");
strSql.Append(" where MemID=@MemID");
SqlParameter[] parameters = {
new SqlParameter("@MemID", SqlDbType.VarChar)
};
parameters[0].Value = MemID;
DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
}

/// <summary>
/// 得到一个对象实体
/// </summary>
public KingsTech.Model.LoginDetail GetModel(string MemID)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from LoginDetail ");
strSql.Append(" where MemID=@MemID");
SqlParameter[] parameters = {
new SqlParameter("@MemID", SqlDbType.VarChar)};
parameters[0].Value = MemID;
KingsTech.Model.LoginDetail model = new KingsTech.Model.LoginDetail();
DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);
model.MemID = MemID;
if (ds.Tables[0].Rows.Count > 0)
{
if (ds.Tables[0].Rows[0]["LoginTime"].ToString() != "")
{
model.LoginTime = DateTime.Parse(ds.Tables[0].Rows[0]["LoginTime"].ToString());
}
if (ds.Tables[0].Rows[0]["LogoutTime"].ToString() != "")
{
model.LogoutTime = DateTime.Parse(ds.Tables[0].Rows[0]["LogoutTime"].ToString());
}
return model;
}
else
{
return null;
}
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select [MemID],[LoginTime],[LogoutTime] ");
strSql.Append(" FROM LoginDetail ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
}

/*
/// <summary>
/// 分页获取数据列表
/// </summary>
public DataSet GetList(int PageSize,int PageIndex,string strWhere)
{
SqlParameter[] parameters = {
new SqlParameter("@tblName", SqlDbType.VarChar, 255),
new SqlParameter("@fldName", SqlDbType.VarChar, 255),
new SqlParameter("@PageSize", SqlDbType.Int),
new SqlParameter("@PageIndex", SqlDbType.Int),
new SqlParameter("@IsReCount", SqlDbType.Bit),
new SqlParameter("@OrderType", SqlDbType.Bit),
new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
};
parameters[0].Value = "LoginDetail";
parameters[1].Value = "MemID";
parameters[2].Value = PageSize;
parameters[3].Value = PageIndex;
parameters[4].Value = 0;
parameters[5].Value = 0;
parameters[6].Value = strWhere;
return DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");
}*/

#endregion 成员方法
这样你就会发现,其实DAL里面有多少个方法,BLL里面就会有多少个return,
这样在用户用的时候,只需要调用BLL里面的方法就可以间接调用DAL里面的方法来,好处很多,这就不写了。再者给你说说Model的用法,其实更简单,就是你在添加或是删除的时候,不用再写长长的SQL语句来,举个例子
Model.id=111
Model.Name="张三"
。。。。。
大体上就是这个样子,给Model赋值,然后添加的时候直接调用BLL里面的Add事件就可以了
例子:
BLL bll=new BLL();
bll.Add(Model);
这样就完成了添加。

大体上就是这个样子了,自己摸索一下就能找到规律了,希望对你有帮助
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-20
实际上,还是三层。何必搞得这么累?
整理了一下。发现。我还真找不出是哪7层。。。
1. [表现层,通常为WEB 或者是 WinForm ]
2. DAL[数据层]
3. BLL[业务层]
4. Model[数据模型]
5. IDAL[数据层抽象出来的接口]
6. DALFactory[数据层工厂]
至于第7层 是 DBHelper 么?
如果是的话。是不是还得扩展出 DBHelperFactory?

又或者说楼主想把BLL也抽象出接口 IBLL?

先不讨论第7层是什么 。。。
调用顺序是这样的。
MODEL, IDAL,IBLL 不调用任何层
如果有DbHelper,也是一样的。什么层都不调用。

WEB 调用 BLL [如果有IBLL,也要算进去], MODEL
BLL 调用 DALFactory, MODEL
DALFactory 调用 IDAL, DAL
DAL 调用DbHelper , MODEL本回答被提问者采纳
第2个回答  2009-05-19
呵呵,你还不如看看书呢,虽然我懂点,但表达的一定会有疏漏
**********
首先你的7层架构是怎么命名的我不知道,你要实现的是什么我也不知道,我就知道你有个数据工厂DALFactory,WEB,还有数据访问层DAL,你的逻辑层呢BLL?要实现什么逻辑?
简单的调用好说,就是生成一个MODEL实体类,各层通过实例化表对象进行传递。web层当然要调用逻辑层BLL,BLL一般需要MODEL和DAL,当然DAL最好再扩展一层,是数据接口层IDAL,在这一层写的是所有数据库访问的虚方法。在DAL层实现。至于数据工厂,应该包含SqlFactory.cs,AccessFactory.cs之类的类,还应该有一个虚方法AbstractFactory.cs,他将在DAL重写。
我只说了5层,多层架构无非就是三层架构的扩展。你的7层架构也是讲逻辑层进一步拆分了
第3个回答  2009-05-21
1. 我的7层是这样的:web, 外观, 服务代理, web服务, 业务逻辑, 数据存取, 实体。
2. 调用顺序
web <==> 外观 <==> 服务代理 <==> web服务 <==> 业务逻辑 <==> 数据存取体。
3. 实体是用来传输数据的。每层都会用到。
4. web 服务是把业务逻辑封装成web服务。其它均很容易理解。
第4个回答  2009-05-21
1.最底层数据访问抽象层,比如SqlHelper类
2.实体层(这是必须的)
3.是IDAL接口访问,调用实体层作为参数
4.然后是针对某个数据库的接口实现DAL,调用实体层作为参数
5.然后是类工厂层,动态创建IDAL(利用了OOP的多态) --- 调用接口访问层
6.业务逻辑层,调用类工厂层创建的数据库访问实例.
7.Web层调用实体层和业务逻辑层