什么是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相关推荐

  1. Ceph Cache Tier

    CacheTier是ceph服务端缓存的一种方案,简单来说就是加一层Cache层,客户端直接跟Cache层打交道,提高访问速度,后端有一个存储层,实际存储大批量的数据. 分层存储的原理,就是存储的数据 ...

  2. Ceph性能测试(RBD、CephFS、NFS、Cache Tier)

    本文是以下两篇文章的后续: 探索fio参数如何选择以及全方位对比HDD和SSD性能:部署Ceph前测试磁盘性能,同时基于fio测试参数的变化深入了解fio原理和磁盘IO特点. CentOS8使用cep ...

  3. 前端系统和后端服务器怎么通信,Kubernetes前端和后端之间的通信

    对于本地开发,我有一个工作的minikube.我们有不同的服务部署.现在我想将前端连接到后端.Kubernetes前端和后端之间的通信 前端是一个角度的应用程序,并在其自己的服务生活. 后端是一个no ...

  4. Ceph Cache Tier中缓存读写流程源码分析

    存储系统:ceph-14.2.22 PrimaryLogPG::do_request [ 文件路径 ] ceph/src/osd/PrimaryLogPG.cc OSD在收到客户端发送的请求时,会调用 ...

  5. 后端怎么防止重复提交?(常用的做法)

    后端怎么防止重复提交?(常用的做法) 客户端的抖动,快速操作,网络通信或者服务器响应慢,造成服务器重复处理.防止重复提交,除了从前端控制,后台也需要控制.因为前端的限制不能解决彻底.接口实现,通常要求 ...

  6. 大三后端暑期实习面经总结——SSM微服务框架篇

    博主现在大三在读,从三月开始找暑期实习,暑假准备去tx实习啦!总结下了很多面试真题,希望能帮助正在找工作的大家!相关参考都会标注原文链接,尊重原创! 目录 1. mvc.mvp.mvvm MVC架构 ...

  7. 前后端分离必备工具:Swagger快速搞定(整合SpringBoot详细教程)

    本文根据狂神教学视屏同步所做笔记 目录 一.Swagger简介 1. 前后端分离 2. Swagger引入 二.SpringBoot集成Swagger 1. 新建springboot项目 2. 导入S ...

  8. CPU架构的llvm后端

    Creating an LLVM Backend for the Cpu0 Architecture Backend structure • TargetMachine structure • Add ...

  9. 动态表单工作量给后端

    动态表单工作量给后端 让前端远离互相伤害 一个IT公司的日常就是程序员.产品经理.UI等同事们的互相残杀: 应用,不少前端就备受煎熬,除了修改需求的魔咒外,还有后端的重构和调整接口诅咒,即便需求没改, ...

最新文章

  1. NEO智能合约反编译工具
  2. 代码审计之代码执行注入
  3. 最大独立集 HDU 1068
  4. WARNING: A newer version of conda exists.
  5. IDC:中小企业IT产品及服务支出预计到2020年突破6680亿美元
  6. AppCan的各个js和css的功能说明
  7. 区块链开发公司开拓新用途 区块链对网络安全的作用
  8. C++对象在内存中的布局
  9. 【KnockoutJS】KnockoutJS 绑定列表数据。实现表头合并,列生成,图片上传等功能
  10. mysql数据库约束和默认
  11. m180n 如何设置网络打印_不难!简单几步教你搞定网络打印机添加设置
  12. Windows 7 频繁提示:计算机的内存不足
  13. uniapp 动态背景图写法
  14. 欧几里得变换(Euclidean transformation)详解
  15. Excel 快速计算相邻行之间的时间差
  16. 2020年中国车规级IGBT(新能源汽车用IGBT)市场规模现状及发展潜力分析[图]
  17. redis分布式锁的安全性及与zookeeper的对比
  18. 腾讯 X5 不能加载内核
  19. 华为二面 招行信用卡中心终面面经
  20. jQery基础参考pink老师ppt

热门文章

  1. Angular Multiple HTTP Requests with RxJS
  2. python实现KMP算法
  3. 文件格式的简易通讯录
  4. 基于电力载波的隧道照明灯的分级控制系统
  5. ESP32-S3物联网技术应用,可视门铃物智能响应发展
  6. 破解百度、网易相册外链的代码
  7. 管理寓言:海马的焦虑!
  8. 杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
  9. vue 项目快速输出微信、支付宝、百度小程序
  10. 做一个正气的杭电人 HDU