三层架构的数据传递

1、

对与三层架构,数据的传递有明显的限制

表示层又称表现层 UI,位于三层构架的最上层,与用户直接接触,主要是 B/S 信息系统中的 Web浏览页面。作为 Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到 BBL 系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用 BLL 或者是 Models 进行调试,保证用户体验

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowSorting="True">
<Columns>
<asp:BoundField DataField="Id" HeaderText="编号" />
<asp:BoundField DataField="Name" HeaderText="班级" />
<asp:BoundField DataField="Remarks" HeaderText="备注" />
<asp:HyperLinkField Text="详情" DataNavigateUrlFields="Id" DataNavigateUrlFormatString="ClassinfoDetial.aspx?id={0}" />
</Columns>
</asp:GridView>

 

protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = ClassinfoBLL.Select();
GridView1.DataBind();
}

再然后到BLL的业务逻辑层,对具体问题进行逻辑判断与执行操作业务逻辑层 BLL 的功能是对具体问题进行逻辑判断与执行操作,接收到表现层 UI 的用户指令后,会连接数据访问层 DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层 UI 中,实现软件功能。

public static List<Classinfo> Select(string name = "")
{
return ClassinfoDAL.Select(name);
}

数据访问层 DAL 是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层 BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写 Data AccessCommon,保证数据访问层 DAL 数据处理功能。

public static List<Classinfo> Select(string name="")
{
var sql = $"select * from Classinfo where name like @name";
SqlParameter[] sqlParameters = new SqlParameter[]
{
new SqlParameter("@name",$"%{name}%")
};
DataTable table = DBHelper.Query(sql,sqlParameters);
List<Classinfo> list = new List<Classinfo>();
foreach(DataRow row in table.Rows)
{
var cla = new Classinfo()
{
Id = Convert.ToInt32(row["Id"]),
Name = Convert.ToString(row["Name"]),
Remarks = Convert.ToString(row["Remarks"]),
};
list.Add(cla);
}
return list;
}

实体类库是数据库表的映射对象,在信息系统软件实际开发的过程中,要建立对象实例,将关系数据库表采用对象实体化的方式表现出来,辅助软件开发中对各个系统功能的控制与操作执行,并利用 GET 与 SET 把数据库表中的所有字段映射为系统对象,建立实体类库,进而实现各个结构层的参数传输,提高代码的阅读性。从本质上看,实体类库主要服务于表示层、业务逻辑层以及数据访问层,在三层之间进行数据参数传输,强化数据表示的简约性

/// <summary>
/// 查询
/// </summary>
/// <param name="sql">查询语句</param>
/// <param name="sqlParameters">参数列表</param>
/// <returns></returns>
public static DataTable Query(string sql, params SqlParameter[] sqlParameters)
{
DataTable table = new DataTable();//实例化
SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, strConn);
//查询参数是否大于0
if (sqlParameters.Length > 0)
{
//将大于0的参数进行添加
dataAdapter.SelectCommand.Parameters.AddRange(sqlParameters);
}
dataAdapter.Fill(table);
return table;
}

2、

三层架构中,DAL层是数据库访问层,DataTable,DataSet这些类只出现在DAL层中,如果BLL层和用户界面需要调用DataTable,DataSet的对象怎么办呢?方法是将DataTable,DataSet的表中的一行打包成一个实体,然后将实体添加到一个实体列表中,即可得到一个表。

例如:把数据行打包成Message数据实体

在DAL层中

/// <summary>
/// 把数据行打包成Message数据实体
/// </summary>
/// <param name="dataRow">一条记录</param>
/// <returns>Message实体</returns>
public static Message GetMessageFromDataRow(DataRow dataRow)
{
Message message = new Message();
message.UserName = dataRow["userName"].ToString();
message.MessageContent = dataRow["messageContent"].ToString();
message.Emotion = dataRow["emotion"].ToString();
message.Color = dataRow["color"].ToString();
message.MessageTime = dataRow["messageTime"].ToString();
message.Face = dataRow["face"].ToString();
return message;
}

 

获取所有数据行,使用泛型集合List

 

/// <summary>
/// 获得信息表中的数据
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static List<Message> Selectmessage()
{
List<Message> messagelist = new List<Models.Message>();
string str = "select * from T_message order by messageTime desc";
SqlHelper helper = new SqlHelper();
DataTable dt = helper.ExecuteReturnDataTable(str, null, CommandType.Text);
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
messagelist.Add(GetMessageFromDataRow(row));
}

return messagelist;
}
return null;

}
}

messagelist就对应与dt

 

在BLL层中

/// <summary>
/// 获得信息表中的数据
/// </summary>
/// <returns></returns>
public static List<Message> Selectmessage()
{
return MessageDAL.Selectmessage();
}

 

在用户界面的cs文件中

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
//messagelist就相当于一个数据表
List<Message> messagelist = MessageBLL.Selectmessage();
dl_iframe.DataSource = messagelist;
dl_iframe.DataBind();

}
}

 

上一篇:day04笔记


下一篇:后端xss漏洞处理