关于对三层架构的学习
关于对三层架构的学习
1.什么是三层架构
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(user interface layer)、业务逻辑层(business logic layer)、数据访问层(data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
2.三层的作用分为
1>数据访问层:主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据库的操作,而不是数据,具体为业务逻辑层或表示层提供数据服务。
2>业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3>界面层:主要表示web方式,也可以表示成winform方式,web方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
3.三层架构的优点:
1>开发人员可以只关注整个结构中的其中某一层。
2>可以很容易的用新的实现来替换原有层次的实现。
3>可以降低层与层之间的依赖。
4>有利于标准化。
5>利于各层逻辑的复用。
6>结构更加的明确。
7>在后期维护的时候,极大地降低了维护成本和维护时间。
通过一个案例分析三层的作用和三层架构的工作流程
案例要求:在数据库表product中查询所有的商品数据在jsp中展示(要求:使用三层架构架构设计)
分析:
1.首先需要客户端发出查询的命令并将这个命令发送到servlet
2.servlet要接受客户端的request并接受可能存在的parameter
3.在servlet中将执行这个命令的方法分为三层(即:三层架构web层、service层、dao层);
web层:
1.接受客户端发送的数据和参数
2.对数据进行java bean的封装。
3.传递数据:一般用接口和方法调用将数据传递到service层。
4.将service层返回的数据放在request域中转发到jsp进行展示
service层:
1.对业务的逻辑处理
2.接受web层的数据并将数据传递到dao层
3.数据的回写返回dao层传回的数据
dao层:
1.操作数据库对所需要的数据进行筛选或更改
2. 数据的回写返回查询到的数据返回web层
图解分析:
代码分析:
1.当用户单机商品管理的菜单时发送数据到adminproductlistservlet
adminproductlistservlet:
2.web层:
1>不需要接受数据只需要创建集合接受dao查询到的数据的集合
2>创建list集合泛型为product
list<product> productlist = null;
3>将数据传递到service层
adminproductdao service = new adminproductdao();
productlist = service.findallproduct();
3.service层:
1>product案例没有业务逻辑直接传递给到dao层处理
adminproductdao dao=new adminproductdao();
2>将dao层查询到的数据回写
3.dao层:
1>使用c3p0创建快速链接
queryrunner runner = new queryrunner(datasourceutils.getdatasource());
2>查询所有的商品数据
string sql = "select * from product";
3>使用创建的list<product>收集查询到的数据:
list<product> productlist = runner.query(sql, new beanlisthandler<product>(product.class));
4>将查询到的数据回写
4.web层
1>接受到dao层查询到的商品数据并传递到request域中
request.setattribute("productlist", productlist);
2>转发到写好的 jsp中进行展示
request.getrequestdispatcher("/admin/product/list.jsp").forward(request, response);
5.在jsp中展示是需要对集合进行遍历输出就涉及到关于数据的封装和遍历
1>list<string>,list<user> map<string, string> map<string, user>的赋值和遍历
//1>遍历strlist<string>
list<string> strlist = new arraylist<string>();
strlist.add("一");
strlist.add("二");
strlist.add("三");
strlist.add("四");
request.setattribute("strlist", strlist);
//2>遍历list<user>的值
list<user> userlist = new arraylist<user>();
user user1 = new user();
user1.setid(1);
user1.setname("lisi");
user1.setpassword("1234");
userlist.add(user1);
user user2 = new user();
user2.setid(2);
user2.setname("wangwu");
user2.setpassword("123456");
userlist.add(user2);
request.setattribute("userlist", userlist);
//3>遍历map<string,string>的值
map<string, string> strmap = new hashmap<string, string>();
strmap.put("key1", "一");
strmap.put("key2", "二");
strmap.put("key3", "三");
strmap.put("key4", "四");
request.setattribute("strmap", strmap);
//4>遍历map<string,user>的值
map<string, user> usermap = new hashmap<string, user>();
usermap.put("key1", user1);
usermap.put("key2",user2);
request.setattribute("usermap", usermap);
6.在jsp中通过jstl对各种集合进行遍历
<h1>取出strlist数据</h1> <c:foreach items="${strlist}" var="str"> ${str}<br>
</c:foreach> <h1>取出userlist数据</h1> <c:foreach items="${userlist}" var="user"> ${user.id}<br> ${user.name}<br> ${user.password}<br> </c:foreach>
<h1>取出strmap数据</h1> <c:foreach items="${strmap}" var="strmap"> ${strmap.key}=${strmap.value}<br> </c:foreach>
<h1>取出usermap数据</h1> <c:foreach items="${usermap}" var="usermap"> ${usermap.key }=${usermap.value.name}=${usermap.value.password}<br>
</c:foreach> |
7.在web层常用的接收数据的方法:
1.list集合
2>创建list集合泛型为product
list<product> productlist = null;
3>将数据传递到service层
adminproductdao service = new adminproductdao();
productlist = service.findallproduct();
2. map<string,string>封装数据
//获取request域中的所有数据
map<string, string[]> properties = request.getparametermap();
product product = new product();
try {
//将properties中的数据封装到product对象中
beanutils.populate(product, properties);
} catch (illegalaccessexception | invocationtargetexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
1>手动的封装product中自己想要的数据
product.setpimage("products/1/c_0033.jpg");
8.总结:
三层的根本目的就是解耦,降低耦合性,增加内聚性。三层的视频看起来虽然很简单,代码照着视频写,很快就可以弄出来了。可是当让自己用敲的时候,感觉到无从下手。还是通过网上查资料,查案例理解着去完成的,虽然这个过程花费时间不少,可是收获很大!接下来就要靠实践去熟练掌握了。
上一篇: 恋爱短曲
下一篇: 有关shiro注解功能不实现