后端的 3-tier archtecture
什么是3-tier archtecture?
后端开发中,因为每个层次的职责定义不一样,每个层次涉及的知识不一样,为了更好的解耦程序,隔离关注点,使得每层能够关注每层的point,处理不同的事情.常见的就是三端分离结构,程序员们提出了数据层,业务层,表示层的概念.这里会有疑问,为什么不用layer,大概tier 有垂直的含义.当然,在计算机概念中,分层概念比比皆是,比如网络中的OSI层次.
这里又有个疑问,既然三层都各司其职,都关注自身的事情,什么东西能够让他们三个串在一起,答案是实体,这里引用参考的描述,
Entity在三层架构中的作用:
- 1、实现面向对象思想中的"封装";
- 2、贯穿于三层,在三层之间传递数据;(注:确切的说实体层贯穿于三层之间,来连接三层)
- 3、对于初学者来说,可以这样理解:每张数据表对应一个实体,即每个数据表中的字段对应实体中的属性(注:当然,事实上不是这样。为什么?
- 1),可能我们需要的实体在数据表对应的实体中并不存在;
- 2),我们完全可以将所有数据表中的所有字段都放在一个实体里)
- 4、每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。
但是对于大量的数据来说,用变量做参数有些复杂,因为参数量太多,容易搞混。比如:我要把员工信息传递到下层,信息包括:员工号、姓名、年龄、性别、工资....用变量做参数的话,那么我们的方法中的参数就会很多,极有可能在使用时,将参数匹配搞混。这时候,如果用实体做参数,就会很方便,不用考虑参数匹配的问题,用到实体中哪个属性拿来直接用就可以,很方便。这样做也提高了效率。
数据层
对数据库进行的基本操作.可以直接访问数据库,文本,字符串,xml,excel。一般来说都属取原始的数据,何为原始数据可以理解为不经过任何加工的数据,但是不绝对。
数据库数据,简单写个思想
# encoding: UTF-8
from elasticsearch import Elasticsearchclass Data(object):def __init__(self):self.es = Elasticsearch(....)def updates(self):self.es.update(...)
表示层:
负责数据的接收以及结果的返回。
举个简单例子,用户存钱,当他存完钱,后端业务层处理完后会输出表示结果。
class Ui:def __init__(self):self.business_logic = BusinessLogic()def get_product_list(self):account_1 = self.business_logic('小明', '248252543', 4932.13)account_1.deposit(400) # 存钱account_1.withdrawal(300) # 取钱
业务层:
对于数据层获取的数据进行业务相关的逻辑处理,满足业务需要.什么是业务逻辑,比如说对于银行,用户的存款,取款操作,数据的处理就是业务逻辑.
举一个简单的列子,一个客户需要在银行取款机上取钱,当他输入完金额后,后端业务层会首先到数据层查该用户的余额,数据层返回查询结果后,业务层会根据余额判断用户是否能取钱,并且对于余额进行操作。凡是根据业务处理数据的都是业务层的功能。
class BusinessLogic:data = Data()def __init__(self):passdef deposit(self, amount):'''存钱'''passdef withdrawal(self, amount):'''取钱'''pass
注意点:
分层的边界的划分.需要更进一步研究DDD领域模型
优缺点:
待说
参考:三层架构详解 | 菜鸟教程
后端的 3-tier archtecture相关推荐
- Ceph Cache Tier
CacheTier是ceph服务端缓存的一种方案,简单来说就是加一层Cache层,客户端直接跟Cache层打交道,提高访问速度,后端有一个存储层,实际存储大批量的数据. 分层存储的原理,就是存储的数据 ...
- Ceph性能测试(RBD、CephFS、NFS、Cache Tier)
本文是以下两篇文章的后续: 探索fio参数如何选择以及全方位对比HDD和SSD性能:部署Ceph前测试磁盘性能,同时基于fio测试参数的变化深入了解fio原理和磁盘IO特点. CentOS8使用cep ...
- 前端系统和后端服务器怎么通信,Kubernetes前端和后端之间的通信
对于本地开发,我有一个工作的minikube.我们有不同的服务部署.现在我想将前端连接到后端.Kubernetes前端和后端之间的通信 前端是一个角度的应用程序,并在其自己的服务生活. 后端是一个no ...
- Ceph Cache Tier中缓存读写流程源码分析
存储系统:ceph-14.2.22 PrimaryLogPG::do_request [ 文件路径 ] ceph/src/osd/PrimaryLogPG.cc OSD在收到客户端发送的请求时,会调用 ...
- 后端怎么防止重复提交?(常用的做法)
后端怎么防止重复提交?(常用的做法) 客户端的抖动,快速操作,网络通信或者服务器响应慢,造成服务器重复处理.防止重复提交,除了从前端控制,后台也需要控制.因为前端的限制不能解决彻底.接口实现,通常要求 ...
- 大三后端暑期实习面经总结——SSM微服务框架篇
博主现在大三在读,从三月开始找暑期实习,暑假准备去tx实习啦!总结下了很多面试真题,希望能帮助正在找工作的大家!相关参考都会标注原文链接,尊重原创! 目录 1. mvc.mvp.mvvm MVC架构 ...
- 前后端分离必备工具:Swagger快速搞定(整合SpringBoot详细教程)
本文根据狂神教学视屏同步所做笔记 目录 一.Swagger简介 1. 前后端分离 2. Swagger引入 二.SpringBoot集成Swagger 1. 新建springboot项目 2. 导入S ...
- CPU架构的llvm后端
Creating an LLVM Backend for the Cpu0 Architecture Backend structure • TargetMachine structure • Add ...
- 动态表单工作量给后端
动态表单工作量给后端 让前端远离互相伤害 一个IT公司的日常就是程序员.产品经理.UI等同事们的互相残杀: 应用,不少前端就备受煎熬,除了修改需求的魔咒外,还有后端的重构和调整接口诅咒,即便需求没改, ...
最新文章
- NEO智能合约反编译工具
- 代码审计之代码执行注入
- 最大独立集 HDU 1068
- WARNING: A newer version of conda exists.
- IDC:中小企业IT产品及服务支出预计到2020年突破6680亿美元
- AppCan的各个js和css的功能说明
- 区块链开发公司开拓新用途 区块链对网络安全的作用
- C++对象在内存中的布局
- 【KnockoutJS】KnockoutJS 绑定列表数据。实现表头合并,列生成,图片上传等功能
- mysql数据库约束和默认
- m180n 如何设置网络打印_不难!简单几步教你搞定网络打印机添加设置
- Windows 7 频繁提示:计算机的内存不足
- uniapp 动态背景图写法
- 欧几里得变换(Euclidean transformation)详解
- Excel 快速计算相邻行之间的时间差
- 2020年中国车规级IGBT(新能源汽车用IGBT)市场规模现状及发展潜力分析[图]
- redis分布式锁的安全性及与zookeeper的对比
- 腾讯 X5 不能加载内核
- 华为二面 招行信用卡中心终面面经
- jQery基础参考pink老师ppt