黑马程序员-三层架构

Python的三层架构(基础篇) 在Python的代码编写中,有一个简单的架构,即三层架构,其就是为了使程序达到高内聚低耦合。现在为了学习机器学习,对Python进行简单的学习,此博客作为学习的记录,如有错误,敬请指出。 三层架构分为:表现层(Presentationlayer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer) 表现层:即UI层,程序运行的入口,如果程... 阅读详情
---------------------- Windows Phone 7手机开发、 .Net培训、期待与您交流! ----------------------

为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET新手们的快速提高!知识都是普通的,关键是学习的思路。技术源于生活,技术原来可以这样学。抛砖引玉而已。

  层次结构在现实社会里随处可见。记得有个笑话讲有个村长得意地向他老婆吹牛:“全中国只有四个人比我官大,乡长、县长、省长和国务院总理”。这个笑话也体现了真实社会中分层的现象。社会人群会分层,公司人员结构也会分层,楼房是分层的,甚至做包子的笼屉都是分层的。虽然分层的目的各有不同,但都是为解决某一问题而产生的。所以,分层架构其实是为了解决某一问题而产生的一种解决方案。

1、 常用的三层架构设计

  软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。

  常见的三层架构基本包括如下几个部分,如图1所示。

  图1 常见的三层架构

  * 数据访问层DAL:用于实现与数据库的交互和访问,从数据库获取数据或保存数据到数据库的部分。

  * 业务逻辑层BLL:业务逻辑层承上启下,用于对上下交互的数据进行逻辑处理,实现业务目标。

  * 表示层Web:主要实现和用户的交互,接收用户请求或返回用户请求的数据结果的展现,而具体的数据处理则交给业务逻辑层和数据访问层去处理。

  日常开发的很多情况下为了复用一些共同的东西,会把一些各层都用的东西抽象出来。如我们将数据对象实体和方法分离,以便在多个层中传递,例如称为Model。一些共性的通用辅助类和工具方法,如数据校验、缓存处理、加解密处理等,为了让各个层之间复用,也单独分离出来,作为独立的模块使用,例如称为Common。

  此时,三层架构会演变为如图2所示的情况。

  图2 三层架构演变结果

  *业务实体Model:用于封装实体类数据结构,一般用于映射数据库的数据表或视图,用以描述业务中客观存在的对象。Model分离出来是为了更好地解耦,为了更好地发挥分层的作用,更好地进行复用和扩展,增强灵活性。

  *通用类库Common:通用的辅助工具类。

  在第5.2节中我们讲过可以将对数据库的共性操作抽象封装成数据操作类(例如DbHelperSQL),以便更好地复用和使代码简洁。数据层底层使用通用数据库操作类来访问数据库,最后完整的三层架构如图3所示。

  图3 最后完整的三层架构

  数据库访问类是对ADO.NET的封装,封装了一些常用的重复的数据库操作。如微软的企业库SQLHelper.cs,动软的DBUtility/DbHelperSQL等,为DAL提供访问数据库的辅助工具类。

  通过以上分析,我们知道如今常用的三层架构是个什么样子,同时,我们也知道了三层架构在使用过程中的一些演化过程。那么,为什么要这样分层,每层结构到底又起什么作用呢?我们继续往下看。

2、 趣味理解:三层架构与养猪

  看新闻报道今年猪肉价格一路高涨,据说有人养猪都发财致富奔小康了,程序员都说写代码没前途了,还不如去养猪,不过,可别认为养猪没有技术含量,比写代码容易,其实养猪也大有学问。为了更好地理解三层架构,就拿养猪来做个例子吧。俗话说:“没吃过猪肉,还没见过猪跑啊!”。

  图4是三层架构化的养猪产业流水线趣味对此图。

  图4 三层结构与养猪

  对比图3与图4,我们可以看出:

  * 数据库好比猪圈,所有的猪有序地按区域或编号,存放在不同的猪栏里。

  * DAL好比是屠宰场,把猪从猪圈取出来进行(处理)屠杀,按要求取出相应的部位(字段),或者进行归类整理(统计),形成整箱的猪肉(数据集),传送给食品加工厂(BLL)。本来这里都是同一伙人既管抓猪,又管杀猪的,后来觉得效率太低了,就让一部分人出来专管抓猪了(DBUtility),根据要求来抓取指定的猪。

  * BLL好比食品加工厂,将猪肉深加工成各种可以食用的食品(业务处理)。

  * Web好比商场,将食品包装成漂亮的可以销售的产品,展现给顾客(UI表现层)。

  * 猪肉好比Model,无论是哪个厂(层),各个环节传递的本质都是猪肉,猪肉贯穿整个过程。

  * 通用类库Common相当于工人使用的各种工具,为各个厂(层)提供诸如杀猪刀、绳子、剪刀、包装箱、工具车等共用的常用工具(类)。其实,每个部门本来是可以自己制作自己的工具的,但是那样会使效率比较低,而且也不专业,并且很多工作都会是重复的。因此,就专门有人开了这样的工厂来制作这些工具,提供给各个工厂,有了这样的分工,工厂就可以专心做自己的事情了。

当然,这里只是形象的比喻,目的是为了让大家更好地理解,实际的情况在细节上会有所不同。这个例子也只是说明了从猪圈到商场的单向过程,而实际三层开发中的数据交互是双向的,可取可存。不过,据说有一种机器,把猪从这头赶进去,另一头就噗噗噜噜地出火腿肠了。如果火腿肠卖不了了,从那头再放进去,这头猪又原原本本出来了,科幻的机器吧,没想到也可以和三层结构联系上。以上只是笑谈,不过也使三层架构的基本概念更容易理解了。

  上面谈了那么多,有人会问,我直接从数据库取出内容直接操作不可以吗?为什么要这么麻烦地用三层架构呢?三层架构到底有什么好处呢?

  不分层,当然可以,就好比整个过程不分屠宰场、加工场之类的,都在同一个场所(工厂)完成所有的活(屠杀、加工、销售)。但为什么要加工厂和商场呢?因为当规模比较大的时候,管理起来就会变得非常复杂,这样的养殖方式已经无法满足规模化的需要了。并且,从社会的发展来看,社会分工是人类进步的表现。社会分工的优势就是让适合的人做自己擅长的事情,使平均社会劳动时间大大缩短,生产效率显著提高。能够提供优质高效劳动产品的人才能在市场竞争中获得高利润和高价值。人尽其才,物尽其用最深刻的含义就是由社会分工得出的。软件开发也一样,做小项目的时候,分不分层确实看不出什么差别,并且显得更麻烦啰嗦了。但当项目变大和变复杂时,分层就显示出它的优势来了。所以分不分层要根据项目的实际情况而定,不能一概而论。

---------------------- Windows Phone 7手机开发、 .Net培训、期待与您交流! ----------------------
黑马程序员---Visual Studio建立三层架构 ---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------       在VS2005开发环境中,选择主菜单“文件à新建à项目”,在弹出的“新建项目”对话框的“项目类型”窗格中选中“Visual Studio 解决方案”,然后在“模版”窗格中选中“空白解决方案”,最后在“名称”文本框中输入作 阅读详情

相关推荐

黑马程序员 C#学习笔记⑥ 三层架构基础实现员工信息管理

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 三层架构定义 1、表现层(UIL):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 3、数据访问层(DAL):该层

u010632993的专栏 2147

python3 selenium3 基础到高级项目实战

本课程以实战形式讲述Python3 Selenium3围绕实际项目,基础知识都在实际项目中讲解,以便学员快速掌握。学习最难的是没有思路,很多零碎的东西网上都可以查到,为什么一做项目就束手无策,这是由于没有做过实际项目,没有经验,不知道如何整合。如果您有以上问题,请看本课程,课程有实际为主,从零开始手把手教您做项目。

什么是三层架构_表现层/业务逻辑层/数据访问层

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

Python 软件设计的三层架构

1. 软件设计三层架构 1.1 视图表现层 位于系统的最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,只提供软件系统与用户交互的界面。 1.2 业务逻辑层 位于视图层和数据层之间,专门负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是通过数据访问层从数据库读出这些数据。该层可以包括一些对”商业逻辑“描述的代码在里面。业务逻辑层是表示层和数据访问层之间的桥...

你必须十分努力,才能看起来毫不费力! 2201

从零开始:使用Remix和MetaMask在测试网部署智能合约的完整指南

本文提供了一份完整的指南,教你如何使用Remix和MetaMask在测试网上部署智能合约。从环境搭建、获取测试网代币到编写和部署合约,再到与合约交互和连接Python后端,涵盖了智能合约开发的各个环节。特别适合初学者快速上手区块链开发,同时介绍了安全注意事项和调试技巧。

weixin_29019241的博客 474

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1392

Django框架设计模式(三)

MVC设计模式 MVC (Model-View-Controller) 是软件工程中常用的软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。它把软件系统分为三个基本部分: M:业务模型(Model),代表一个储存数据的对象 V:视图(View),代表模型包含的数据的可视化 C:控制器(Controller),作用于模型于视图中,将数据流向模型对象,并在数据化时更新视图。 MTV设计模式 Django中的MTV模式本质上和MVC是一样的,只是定义不同,分为如下三部分: M:模型(Model),负责与数

一条到晚游泳的鱼 433

整车CAN网络错误帧排查方法

本文围绕 CAN 总线错误帧展开,先剖析其产生原因,涵盖物理连接与硬件问题、电磁兼容性问题、总线负载与设计问题及配置问题;再阐述位错误、填充错误等 5 类错误帧类型;接着说明错误帧与总线 BUSOFF 的关系,解析主动 / 被动错误状态及 BUSOFF 的触发与恢复;还结合整车故障案例做实际分析,指出错误帧根源多为线束或控制器问题。最后总结,强调错误帧是 CAN 协议保障高鲁棒性的机制,掌握相关知识助工程师提升 CAN 网络处理能力。

车载网络小D的博客 1249

基于Python仓库管理系统的设计与实现django框架

本仓库管理系统以Django作为框架,Python语言,B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块:公告信息、仓管员、采购员、财务员、商品分类、供应商、仓管理库、仓库信息、商品信息、采购订单、商品入库 、出库账单等模块。

weixin_47958760的博客 7479

Excel中如何快速地将成绩按比例来划分为等级?

问题介绍: 记录说明:班级里共有40个人,按最终总平均成绩从高到低划分等级,A等级30%,B等级50%,C等级20%。 部分成绩如下表所示: Excel中相关函数介绍: IF函数 IF函数有三个参数,语法如下: =IF(条件判断, 结果为真返回值, 结果为假返回值) 第一参数是条件判断,比如说“A1=">37”这种,判断TRUE或FALSE。如果判断是TRUE(结果为真)那么IF函数返回值是第二参数,否则(结果为假)返回第三参数。 如果省略了第三参数,则当结果为假时,会返回FALSE。 如果公式

Wendy的博客 1万+

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4841

黑马程序员---理解三层架构

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------  在一个ASP.NET Web应用程序解决方案中,并不是只要含有ASPX网页文件、DLL程序集文件、还有数据库文件,就是三层架构的Web应用程序,这样的说法是不对的。也并不是不含有数据库文件,就不是三层架构。还有一个会让初学者误解

linqixiang1212的专栏 883

手把手教你学Simulink——基于自动驾驶辅助系统的场景实例:车道保持辅助系统(LKA)的仿真与实现

本文通过Simulink实例讲解车道保持辅助系统(LKA)的实现方法。首先介绍LKA从预警到主动控制的技术演进,阐述其系统架构、核心组件和工作原理。重点演示基于自行车模型的车辆横向动力学建模过程,以及使用线性二次调节器(LQR)设计横向控制器的详细步骤。教程包含四个仿真场景测试,分析关键指标如控制精度、舒适性和响应性。最后探讨LKA技术的发展方向,强调人机协同的安全理念。该实例为自动驾驶辅助系统开发提供了完整的Simulink实践方案。

MHD0815的博客 182

黑马程序员-三层架构介绍

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 三层架构介绍 1关于架构 架构这个词从它的出现后,就有许许多多的程序员、架构师们激烈地讨论着它的发展,但是架构一词的出现,却是随着三层架构的出现才出现的。当然,目前应用三层架构开发也正是业界最关注的主题。那么这里我们来看看单层、双层

devil4690的专栏 715

Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1174

Geogebra中级篇016—矩阵(Matrices)

在GeoGebra中,矩阵是一种强大的工具,广泛应用于线性代数、几何变换和数据处理等领域。通过矩阵,我们可以轻松实现复杂的计算和图形变换,如旋转、平移和缩放等操作。不仅如此,GeoGebra的矩阵功能还支持多种运算,如加法、乘法、求逆等,使得用户能够高效地处理线性方程组和向量空间问题。在本文中,我们将深入探讨GeoGebra中的矩阵功能,详细介绍如何创建矩阵、执行常见的矩阵运算,并通过实例展示这些操作在数学和工程应用中的实际价值。这篇文章将为你提供关于GeoGebra矩阵操作的全面指南。

八荒启-交互动画的博客 2585

黑马程序员_浅谈三层架构

------- Windows Phone 7手机开发、.Net培训、期待与您交流! ------- 最近一段时间在学习三层架构,其实在这之前也听说过三层架构,当时以为这应该是一门高深的技术吧! 但是通过这段时间的学习,我发现以前自己对三层架构根本一点不了解,其实三层架构只是一种思想,一 种封装的思想,一种帮助我们更好解决问题的思想,简单来说三层架构就是将整个业务应用划分为:表现 层(UI

怪我太年轻的专栏 799

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【黑马程序员】三层架构(学习笔记)

------- WindowsPhone 7手机开发、.Net培训、期待与您交流! ------- 1.UI,BLL,DAL(Data Access Layer) 界面,业务逻辑,数据库访问 2.DAL中方法一般为static 3.DAL尽量不要返回DataTable,DataSet等和数据库相关的,要返回对象。尽量屏蔽和数据库有关的任何操作。 4. T_Customer I

dan810103的专栏 674

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

黑马程序员_三层架构之用户登陆(BS架构)

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

youzilong202的专栏 1305

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

学习springboot的笔记之三层架构及IOC(反转控制)、DI(依赖注入)(学黑马程序员的)

这里强烈建议自己去看黑马程序员的Java web教程。

2201_75371220的博客 212

黑马程序员-09.WEB三层架构的复习总结

1

130

SpringMVC 黑马程序员三天笔记(第一天:三层架构和 MVC、Spring入门)

第一天 第1章 SpringMVC 的基本概念 1.1 关于三层架构和 MVC 1.1.1 三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久 层。三层架构在我们 的实...

young_1004的博客 1910

黑马程序员_精简三层架构DAL(初步认识DAL,Model,DBNull.Value的作用)

一.精简三层架构DAL认识 之前都是直接在界面(UI)中写SQL,对于大的项目这样做很难维护,而且复用性不强,三层架构是企业开发中常用的设计模式,把数据库访问,业务逻辑,界面分离。 初学者直接学习三层架构会比较难,因此这次用精简的三层架构,只用DAL(Data Access Layer)层,把数据库访问封装到DAL中,UI调用DAL,原则“UI中不出现SQL”  二.精简版DAL的学习 创

雨后春笋_aspx专栏 1112

黑马程序员JavaWeb---三层架构学习,IOC,DI

增强程序复用性,便于维护,利于扩展

学习java的小白 444

【黑马程序员】SqlHelper+三层架构 +例子1)复习创建客户和三层的知识+、(例子2)项目初始框架(HRMSys)

------- WindowsPhone 7手机开发、.Net培训、期待与您交流! ------- 一、自己编写SqlHelper的知识: class SqlHelper { private static sting ConnStr=...... public static int ExecuteNonQuery(string sql,params SqlParameters[]

dan810103的专栏 1006

黑马程序员----三层架构(没有另建一个BLL业务层--类库)

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 分为UI(表现)层、DAL(数据访问)层(BLL层包含在其中)、Model,在添加项目时;如分别添加Winfrom(WPF、控制台、ASP.NET等应用程序,生成的是.exe文件),而DAL和Model添加的是类库,他们生成后都是程

d317356845的专栏 1653
上一篇: 黑马程序员-XMLHTTPRequest属性与方法
下一篇: 黑马程序员-三层架构介绍
步飞烟
博客等级 码龄15年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值