当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 基于.NET平台的分层架构实战(五)接口的设计与实现

ASP.NET
Asp.net利用JQuery弹出层加载数据代码
asp.net dataview做无限极分类的又一用法
asp.net ckeditor编辑器的使用方法
告别ADO.NET实现应用系统无缝切换的烦恼(总结篇)
asp.net 实现动态显示当前时间(不用javascript不考虑开销)
.net动态显示当前时间(客户端javascript)
asp.net 结合YUI 3.0小示例
asp.net 取消缓存相关问题说明
asp.net 计划任务管理程序实现,多线程任务加载
ASP.NET 跨页面传值方法
asp.net中url地址传送中文参数时的两种解决方案
Asp.net 菜单控件简洁版
asp.net jQuery Ajax用户登录功能的实现
asp.net SharpZipLib的压缩与解压问题
asp.net url重写后页面回传问题
asp.net与Discuz!NT整合集成实例教程
Discuz!NT 3与asp.net 整合的实例教程
测试控制台使用方法
.net 动态标题实现方法
asp.net *.ashx类型的文件使用说明

ASP.NET 中的 基于.NET平台的分层架构实战(五)接口的设计与实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 113 ::
收藏到网摘: n/a

接下来,将进行接口的设计。这里包括数据访问层接口和业务逻辑层接口。在分层架构中,接口扮演着非常重要的角色,它不但直接决定了各层中的各个操作类需要实现何种操作,而且它明确了各个层次的职责。接口也是系统实现依赖注入机制不可缺少的部分。 
  
本项目的接口设计将按如下顺序进行: 
1.首先由前文的需求分析,列出主要的UI部分。
2.分析各个UI需要什么业务逻辑支持,从而确定业务逻辑层接口。
3.分析业务逻辑层接口需要何种数据访问操作,从而确定数据访问层接口。 
  
另外,为保证完全的面向对象特性,接口之间的数据传递主要靠实体类或实体类集合,禁止使用DataTable等对象传递数据。 
   
由需求分析,列出主要UI
需求分析部分,请参看基于.NET平台的分层架构实战(二)——需求分析与数据库设计 。有需求分析,可以列出系统中主要应包括以下UI:
   UI01——主页面,列出全部的留言及相应评论,支持分页显示。留言按发表时间逆序显示,评论紧跟在相应留言下。管理员可以通过相应链接对留言执行通过验证、删除、回复以及对评论进行删除操作。游客可通过相应连接进入发表留言评论页面。
   UI02——发表留言页面,供游客发表新留言。
   UI03——发表评论页面,供游客发表评论。
   UI04——回复留言页面,供管理员回复留言。
   UI05——管理员登录页面。
   UI06——管理员修改个人密码的页面。
   UI07——超级管理员登录后的页面,主要提供管理员列表。可以通过相应链接将指定管理员删除。
   UI08——添加新管理员的页面。
   UI09——操作成功完成后的跳转提示页面。
   UI10——系统出现异常时显示友好出错信息的页面。
  
   由UI识别业务逻辑操作
   UI01:按分页取得留言,按指定留言取得全部评论,将指定留言通过验证,将指定留言删除,将指定评论删除
   UI02:添加新留言
   UI03:添加新评论
   UI04:回复留言
   UI05:管理员登录
   UI06:修改管理员密码
   UI07:取得全部管理员信息,删除管理员
   UI08:添加新管理员
  
   经过整理,可得以下接口操作:
   IAdminBLL:Add(添加管理员),Remove(删除管理员),ChangePassword(修改管理员密码),Login(管理员登录),GetAll(取得全部管理员)
   IMessageBLL:Add(添加留言),Remove(删除留言),Revert(回复留言),Pass(将留言通过验证),GetByPage(按分页取得留言)
   ICommentBLL:Add(添加评论),Remove(删除评论),GetByMessage(按留言取得全部评论)
  
   这三个接口文件都放在IBLL工程下,具体代码如下:
  
  IAdminBLL.cs:
  IAdminBLL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IBLL
   7{
   8 /**//// <summary>
   9 /// 业务逻辑层接口-管理员
  10 /// </summary>
  11 public interface IAdminBLL
  12 {
  13 /**//// <summary>
  14 /// 添加管理员
  15 /// </summary>
  16 /// <param name="admin">新管理员实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Add(AdminInfo admin);
  19
  20 /**//// <summary>
  21 /// 删除管理员
  22 /// </summary>
  23 /// <param name="id">欲删除的管理员的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Remove(int id);
  26
  27 /**//// <summary>
  28 /// 修改管理员密码
  29 /// </summary>
  30 /// <param name="id">欲修改密码的管理员的ID</param>
  31 /// <param name="password">新密码</param>
  32 /// <returns>是否成功</returns>
  33 bool ChangePassword(int id,string password);
  34
  35 /**//// <summary>
  36 /// 管理员登录
  37 /// </summary>
  38 /// <param name="name">管理员登录名</param>
  39 /// <param name="password">管理员密码</param>
  40 /// <returns>如果登录成功,则返回相应管理员的实体类,否则返回null</returns>
  41 AdminInfo Login(string name,string password);
  42
  43 /**//// <summary>
  44 /// 取得全部管理员信息
  45 /// </summary>
  46 /// <returns>管理员实体类集合</returns>
  47 IList<AdminInfo> GetAll();
  48 }
  49}
  IMessageBLL.cs:
  IMessageBLL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IBLL
   7{
   8 /**//// <summary>
   9 /// 业务逻辑层接口-留言
  10 /// </summary>
  11 public interface IMessageBLL
  12 {
  13 /**//// <summary>
  14 /// 添加留言
  15 /// </summary>
  16 /// <param name="message">新留言实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Add(MessageInfo message);
  19
  20 /**//// <summary>
  21 /// 删除留言
  22 /// </summary>
  23 /// <param name="id">欲删除的留言的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Remove(int id);
  26
  27 /**//// <summary>
  28 /// 回复留言
  29 /// </summary>
  30 /// <param name="id">要回复的留言的ID</param>
  31 /// <param name="reply">回复信息</param>
  32 /// <returns>是否成功</returns>
  33 bool Revert(int id, string reply);
  34
  35 /**//// <summary>
  36 /// 将留言通过验证
  37 /// </summary>
  38 /// <param name="id">通过验证的留言的ID</param>
  39 /// <returns>是否成功</returns>
  40 bool Pass(int id);
  41
  42 /**//// <summary>
  43 /// 按分页取得留言信息
  44 /// </summary>
  45 /// <param name="pageSize">每页显示几条留言</param>
  46 /// <param name="pageNumber">当前页码</param>
  47 /// <returns>留言实体类集合</returns>
  48 IList<MessageInfo> GetByPage(int pageSize,int pageNumber);
  49 }
  50}
  ICommentBLL.cs
  ICommentBLL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IBLL
   7{
   8 /**//// <summary>
   9 /// 业务逻辑层接口-评论
  10 /// </summary>
  11 public interface ICommentBLL
  12 {
  13 /**//// <summary>
  14 /// 添加评论
  15 /// </summary>
  16 /// <param name="comment">新评论实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Add(CommentInfo comment);
  19
  20 /**//// <summary>
  21 /// 删除评论
  22 /// </summary>
  23 /// <param name="id">欲删除的评论的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Remove(int id);
  26
  27 /**//// <summary>
  28 /// 取得指定留言的全部评论
  29 /// </summary>
  30 /// <param name="messageId">指定留言的ID</param>
  31 /// <returns>评论实体类集合</returns>
  32 IList<CommentInfo> GetByMessage(int messageId);
  33 }
  34}
  
   由业务逻辑确定数据访问操作
   IAdminBLL需要的数据访问操作:插入管理员,删除管理员,更新管理员信息,按ID取得管理员信息,按登录名与密码取得管理员,取得全部管理员
   IMessageBLL需要的数据访问操作:插入留言,删除留言,更新留言信息,按ID取得留言信息,按分页取得留言
   ICommentBLL需要的数据访问操作:插入评论,删除评论,按留言取得全部评论
   另外,添加管理员时需要验证是否存在同名管理员,所以需要添加一个“按登录名取得管理员”。


   
   对以上操作进行整理,的如下接口操作:
   IAdminDAL:Insert,Delete,Update,GetByID,GetByNameAndPassword,GetAll
   IMessageDAL:Insert,Delete,Update,GetByID,GetByPage
   ICommentDAL:Insert,Delete,GetByMessage
  
   这三个接口文件放在IDAL工程下,具体代码如下:
  
  IAdminDAL.cs:
  IAdminDAL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IDAL
   7{
   8 /**//// <summary>
   9 /// 数据访问层接口-管理员
  10 /// </summary>
  11 public interface IAdminDAL
  12 {
  13 /**//// <summary>
  14 /// 插入管理员
  15 /// </summary>
  16 /// <param name="admin">管理员实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Insert(AdminInfo admin);
  19
  20 /**//// <summary>
  21 /// 删除管理员
  22 /// </summary>
  23 /// <param name="id">欲删除的管理员的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Delete(int id);
  26
  27 /**//// <summary>
  28 /// 更新管理员信息
  29 /// </summary>
  30 /// <param name="admin">管理员实体类</param>
  31 /// <returns>是否成功</returns>
  32 bool Update(AdminInfo admin);
  33
  34 /**//// <summary>
  35 /// 按ID取得管理员信息
  36 /// </summary>
  37 /// <param name="id">管理员ID</param>
  38 /// <returns>管理员实体类</returns>
  39 AdminInfo GetByID(int id);
  40
  41 /**//// <summary>
  42 /// 按用户名及密码取得管理员信息
  43 /// </summary>
  44 /// <param name="name">用户名</param>
  45 /// <param name="password">密码</param>
  46 /// <returns>管理员实体类,不存在时返回null</returns>
  47 AdminInfo GetByNameAndPassword(string name,string password);
  48
  49 /**//// <summary>
  50 /// 取得全部管理员信息
  51 /// </summary>
  52 /// <returns>管理员实体类集合</returns>
  53 IList<AdminInfo> GetAll();
  54 }
  55}
  IMessageDAL.cs:
  IMessageDAL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IDAL
   7{
   8 /**//// <summary>
   9 /// 数据访问层接口-留言
  10 /// </summary>
  11 public interface IMessageDAL
  12 {
  13 /**//// <summary>
  14 /// 插入留言
  15 /// </summary>
  16 /// <param name="message">留言实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Insert(MessageInfo message);
  19
  20 /**//// <summary>
  21 /// 删除留言
  22 /// </summary>
  23 /// <param name="id">欲删除的留言的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Delete(int id);
  26
  27 /**//// <summary>
  28 /// 更新留言信息
  29 /// </summary>
  30 /// <param name="message">留言实体类</param>
  31 /// <returns>是否成功</returns>
  32 bool Update(MessageInfo message);
  33
  34 /**//// <summary>
  35 /// 按ID取得留言信息
  36 /// </summary>
  37 /// <param name="id">留言ID</param>
  38 /// <returns>留言实体类</returns>
  39 MessageInfo GetByID(int id);
  40
  41 /**//// <summary>
  42 /// 按分页取得留言信息
  43 /// </summary>
  44 /// <param name="pageSize">每页显示几条留言</param>
  45 /// <param name="pageNumber">当前页码</param>
  46 /// <returns>留言实体类集合</returns>
  47 IList<MessageInfo> GetByPage(int pageSize,int pageNumber);
  48 }
  49}
  ICommentDAL.cs:
  ICommentDAL
   1using System;
   2using System.Collections.Generic;
   3using System.Text;
   4using NGuestBook.Entity;
   5
   6namespace NGuestBook.IDAL
   7{
   8 /**//// <summary>
   9 /// 数据访问层接口-评论
  10 /// </summary>
  11 public interface ICommentDAL
  12 {
  13 /**//// <summary>
  14 /// 插入评论
  15 /// </summary>
  16 /// <param name="comment">评论实体类</param>
  17 /// <returns>是否成功</returns>
  18 bool Insert(CommentInfo comment);
  19
  20 /**//// <summary>
  21 /// 删除评论
  22 /// </summary>
  23 /// <param name="id">欲删除的评论的ID</param>
  24 /// <returns>是否成功</returns>
  25 bool Delete(int id);
  26
  27 /**//// <summary>
  28 /// 取得指定留言的全部评论
  29 /// </summary>
  30 /// <param name="messageId">指定留言的ID</param>
  31 /// <returns>评论实体类集合</returns>
  32 IList<CommentInfo> GetByMessage(int messageId);
  33 }
  34}