三层体系结构总结(三)

简介: 圣诞节那天和两个朋友(两个漂亮的mm)在上岛咖啡谈论N层架构的实现。他们单位用的是Java,架构是较为严格按照J2EE的模式。当然一共分了七层(我的天!好大的程序)。听完他们的描述,我还是把这七层合并为三层理解(DAL、BLL、UI)。
圣诞节那天和两个朋友(两个漂亮的mm)在上岛咖啡谈论N层架构的实现。他们单位用的是Java,架构是较为严格按照J2EE的模式。当然一共分了七层(我的天!好大的程序)。听完他们的描述,我还是把这七层合并为三层理解(DAL、BLL、UI)。只是实现方式不同。从中也学到了一些东西。
先说UI,Web层中的页面跳转使用的是config文件配置的。例如:当A页面要跳转到B页面时,会执行一些函数或操作得到一个forward的值,根据这个forward的值到相应的Web层的config文件中寻找它应该到哪个页面。用此种方法的好处是使页面跳转十分灵活。这时我想起了我们在作页面跳转时会把代码写到页面的cs或aspx中,如果有几个页面都要跳转到同一个指定页面时,就要在这些页面中写一些代码,如果这个指定的页面名称变了,就要将这几个页面的的跳转代码全部修改一遍。他们这样做的确不错。
再说业务层,说到业务层就要说到业务逻辑,此时不得不涉及到数据库表结构。他们在表结构上不提倡使用外键,一般使用Link关系表作联接。如:Employee表和Department表,在Employee表中不会有DepartID作为外键,而是使用EmployeeDepartLink表作联接,在关系表中只有EmployeeID和DepartID,Employee表中只有Employee的信息。我个人感觉这样做的好处是:在开发的深入时,不会因为Employee关联的信息的增多而造成Employee表的膨胀,且Employee表的架构是固定的。但是我觉得这样做,在查询时信息间联接会多一倍。如:要显示一条人员记录并显示他所在的部门,此时就要三张表集连查询,如果在Employee表中加入外键就可以减少一张表的集连。
再来说说持久层,他们所说的持久层,我理解就是数据访问层。当然这一层中还分了三个小层。有一个业务层和持久层的接口层(叫DAO)。比较吸引我的还是EO这一层。每一个数据表对应一个EO,在一个EO中只有一些公有属性,这些属性就是对应相应表中的字段,我的理解就是在数据库的外面包了一层。
此时就接触到了一个我比较关心的问题,对于业务上集连的查询是如何处理的。得到的结论是:他们大多查询都是对单表的查询。如果有较复杂的查询时直接写Sql语句。晕,我白激动了半天。我所见过的结构中对于这一点的处理要么就是牺牲性能保留架构的完整(正如我在《三层体系结构总结(一)》中写的那样),要么就是牺牲架构得到好的性能,我个人还是倾向保留性能的。当然在页面显示设计时尽力保证所显示的一个数据表中的内容是从一个表中读出的。
不知道我现在的理解是否正确?就我的理解是:由于软件架构的限制,有可能会在设计时就考虑对用户功能的限制以及页面显示的内容及显示的方式,尽量把功能操作分解成对单表的原子操作,尽量不要同时操作多张表。这样也可以减少并发性的问题。
最后,此次谈话中还学习到,大型的项目不建议在数据库中使用大量的存储过程,包括一些网上的资料也表明这一点。后来明白这样做是为了减少服务器的工作量。想想也是,其实一个系统中很大一部分操作是对单表进行的填查删改。
目录
相关文章
ES集群报错 failed to send join request to maste
ES集群报错 failed to send join request to maste
373 0
|
缓存 运维 NoSQL
Redis在生产环境中是怎么部署的?
Redis在生产环境中是怎么部署的?
273 0
|
12月前
|
监控 NoSQL Java
场景题:百万数据插入Redis有哪些实现方案?
场景题:百万数据插入Redis有哪些实现方案?
149 1
场景题:百万数据插入Redis有哪些实现方案?
|
存储 安全 Linux
|
11月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
163 7
|
11月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
198 5
|
11月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
11月前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
12月前
|
存储 运维 前端开发
如何自己搭建一个网站?
‌确定需求和目标‌:在开始搭建网站之前,明确网站的需求和核心,网站主要是什么途径:展示产品或服务、提供信息和资源、增加销售、提升品牌形象等。
559 3
|
12月前
|
Kubernetes API 调度
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
154 5