三层架构(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