项目文件结构:

很明了一个标准的三层架构的系统。

表示层:Web

业务层:Business

数据访问层:Data

另外存在缓存层:Cache缓存

增加公共使用类库:Utility

下面以一个实例(系统登陆为例)来讲解各层之间如何调用:

系统登陆界面跳到Login1.aspx页面。

查看后面登陆界面代码,当点击登陆按钮时页面会触发Page_Load事件,然后判断是IsPostBack时,表示是提交的登陆按钮操作时,调用check方法来验证登陆信息。

protected void Page_Load(object sender, EventArgse)

{

if (IsPostBack)

{

check();

}

}

然后看下check方法的代码。

/////////////////////////////表示层调用业务层代码/////////////////////////////////////////

// RoadFlow.Platform.Users这里先调用业务层的对象RoadFlow.Platform.Users

RoadFlow.Platform.Users busers = newRoadFlow.Platform.Users();

//业务层调用的是GetByAccount方法

var user =busers.GetByAccount(account.Trim());

if (user == null ||string.Compare(user.Password, busers.GetUserEncryptionPassword(user.ID.ToString(),password.Trim()), false) != 0)

{

Session[isVcodeSessionKey]= "1";

RoadFlow.Platform.Log.Add("用户登录失败",string.Concat("用户:", account, "登录失败,帐号或密码错误"),RoadFlow.Platform.Log.Types.用户登录);

Script = "alert('帐号或密码错误!');";

}

////////////////////////////业务层代码///////////////////////////////////////////////

/// <summary>

/// 根据帐号查询一条记录

/// </summary>

public RoadFlow.Data.Model.Users GetByAccount(string account)

{

return account.IsNullOrEmpty() ? null : dataUsers.GetByAccount(account);//业务层调用数据访问层代码

}

////////////////////////////访问层代码///////////////////////////////////////////////

IUser接口

/// <summary>

/// 根据帐号查询一条记录

/// </summary>

RoadFlow.Data.Model.Users GetByAccount(string account);

RoadFlow.Data.Factory

通过工厂模式来调用数据访问层具体类,如MSSQL类,以后要扩展其它数据库请重写此类扩展多数据库,如增加Data.Oracle数据访问层,然后工厂方法调return new Data.Oracle.Users()。现在代码是调用的MYSQL数据库访问层具体实现类。

public static Data.Interface.IUsersGetUsers()

{

return new Data.MSSQL.Users();

}

RoadFlow.Data.MSSQL实现代码

/// <summary>

/// 根据帐号查询一条记录

/// </summary>

public RoadFlow.Data.Model.Users GetByAccount(string account)

{

string sql = "SELECT * FROM Users WHERE Account=@Account";

SqlParameter[] parameters = new SqlParameter[]{

newSqlParameter("@Account", SqlDbType.VarChar, 255){ Value = account }

};

SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);

List<RoadFlow.Data.Model.Users> List =DataReaderToList(dataReader);

dataReader.Close();

return List.Count > 0 ? List[0] : null;

}

这样就完成了表示层访问数据库的整个流程,可能在查询数据时在业务层会增加从缓存中查询数据,这样就不从数据库查,如果缓存不存在即从数据库查询,减轻数据库的负担。但这样对调试不方便,每次要调试有缓存的代码需要半闭IE,重新启动调试。

最新文章

  1. [基础] Array.prototype.indexOf()查询方式
  2. MyCAT简易入门
  3. 如何解压.bz2文件包
  4. hdu3652 B-number
  5. [PAT]数列求和(20)
  6. ODAC(V9.5.15) 学习笔记(十七)主从模式
  7. 【POJ 3020】Antenna Placement(二分图匹配)
  8. [BS] 小知识点总结-03
  9. matlab(数组、矩阵)
  10. jqmobi 子菜单 高亮效果
  11. 【ajax跨域】原因原理解决
  12. Ural 1079 - Maximum
  13. hdu2369 Broken Keyboard(类似dfs)
  14. java利用poi导出数据到excel
  15. JS数组操作中的经典算法
  16. 【搞事情】VS2015下的openGL初始化
  17. 51nod 1387 移数字
  18. appium 1.6.x版本去除安装Unlock、Setting
  19. C#winform自定义控件大全
  20. Codeforces Round #439 (Div. 2)

热门文章

  1. 阿里云高磊:API网关加速能力聚合与生态集成
  2. Shiro学习(17)OAuth2集成
  3. this关键字的使用!
  4. angularjs 中实现 load more 功能
  5. nteract 使用教程
  6. Hadoop部署项目总结&amp;&amp;解析缓存文件
  7. Java-Class-C:java.util.BigDecimal
  8. JAVA学习之Java语音基础组成
  9. 19、Page Object 实例
  10. Yslow压力测试