后端的 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 Elasticsearch
class 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):
pass
def deposit(self, amount):
'''
存钱
'''
pass
def withdrawal(self, amount):
'''
取钱
'''
pass
注意点:
分层的边界的划分.需要更进一步研究DDD领域模型
优缺点:
待说
标签:__,实体,archtecture,self,端的,tier,三层,数据,def 来源: https://blog.csdn.net/cwcww1314/article/details/120244788