ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

三层架构的数据传递

2021-11-16 23:02:43  阅读:153  来源: 互联网

标签:架构 表示层 List 传递 ToString new message 三层 数据


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();

}
}

 

标签:架构,表示层,List,传递,ToString,new,message,三层,数据
来源: https://www.cnblogs.com/weijun45683968/p/15564265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有