zoukankan      html  css  js  c++  java
  • python 三层架构说明

    python 三层架构说明

    三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:
    表现层(Presentation layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。


    区分层次的目的即为了"高内聚低耦合"的思想。
    高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。
    内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。


    所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
    耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。
    模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 
    对于低耦合,粗浅的理解是:
    一个完整的系统,模块与模块之间,尽可能的使其独立存在。
    也就是说,让每个模块,尽可能的独立完成某个特定的子功能。
    模块与模块之间的接口,尽量的少而简单。
    如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。
    这样有利于修改和组合。

    三层架构,如下图:


    1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
    2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
    3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。

    示例:

     1 #coding:utf8
     2 
     3 from utility.sql_helper import MySqlHelper
     4 
     5 class Admin(object):
     6     def __init__(self):
     7         self.__helper = MySqlHelper()
     8         
     9     def Get_One(self,id):
    10         sql = "select * from userinfo where id = %s"
    11         params = (id,)
    12         return self.__helper.Get_One(sql, params)
    13     
    14     def CheckValidate(self,username,password):
    15         sql = "select * from userinfo where name=%s and password=%s"
    16         params = (username,password,)
    17         return self.__helper.Get_One(sql, params)
    18     
    19     
    admin.py
     1 #coding:utf8
     2 import MySQLdb
     3 import conf
     4 
     5 
     6 class MySqlHelper(object):
     7     def __init__(self):
     8         self.__conn_dict = conf.conn_dict
     9     def Get_Dict(self,sql,params):
    10         conn = MySQLdb.connect(**self.__conn_dict)
    11         cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor) 
    12         
    13         reCount = cur.execute(sql,params)
    14         data = cur.fetchall()   
    15 
    16         cur.close()
    17         conn.close()
    18         return data
    19        
    20     def Get_One(self,sql,params):
    21         conn = MySQLdb.connect(**self.__conn_dict)
    22         cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor) 
    23         
    24         reCount = cur.execute(sql,params)
    25         data = cur.fetchone()  
    26 
    27         cur.close()
    28         conn.close()
    29         return data
    sql_helper
    1 #coding:utf8
    2 
    3 conn_dict = dict(
    4     host='127.0.0.1',
    5     user='root',
    6     passwd='123456',
    7     db ='Admin'
    8     )
    conf.py
     1 #coding:utf8
     2 
     3 from module.admin import Admin
     4 
     5 def main():
     6     user=raw_input('username:')
     7     pwd=raw_input("password:")
     8     admin = Admin()
     9     result = admin.CheckValidate(user, pwd)
    10     if not result:
    11         print '用户名或密码错误'
    12     else:
    13         print '进入后台登录界面'
    14 
    15 if __name__== '__main__':
    16     main()
    index.py
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/shiluoliming/p/6661421.html
Copyright © 2011-2022 走看看