Python三层架构项目简介与实例

1. Python三层架构概述

Python三层架构是一种常用的软件架构模式。它将应用程序划分为三个独立的层次:表示层、业务逻辑层和数据访问层。这种架构模式的目的是将系统的不同功能模块分离开来,使得代码的复用性更高、可维护性更强。

  • 表示层:负责用户界面的展示,接收用户的输入并将其传递给业务逻辑层进行处理,同时将处理结果展示给用户。通常使用的是图形界面或者Web界面。
  • 业务逻辑层:负责处理业务逻辑,包括对用户输入的验证、处理数据、调用数据访问层进行数据的增删改查等操作。它负责实现整个系统的核心功能。
  • 数据访问层:负责与数据库进行交互,进行数据的读写操作。它将业务逻辑层的请求翻译为数据库操作,同时将数据库返回的结果传递给业务逻辑层。

下面我们将通过一个实例来演示如何使用Python三层架构来构建一个简单的学生信息管理系统。

2. 学生信息管理系统示例

2.1 需求分析

假设我们需要开发一个学生信息管理系统,实现以下功能:

  • 添加学生信息:包括学号、姓名、年龄等字段。
  • 查询学生信息:可以根据学号或姓名进行查询。
  • 修改学生信息:可以根据学号修改学生的姓名或年龄。
  • 删除学生信息:可以根据学号删除学生的信息。

2.2 代码示例

2.2.1 数据访问层

首先,我们需要定义一个数据访问层,负责与数据库进行交互。在本示例中,我们使用SQLite作为数据库,并使用Python的sqlite3模块来进行数据库操作。以下是一个简单的数据访问层的代码示例:

import sqlite3

class StudentRepository:
    def __init__(self):
        self.conn = sqlite3.connect('students.db')
        self.cursor = self.conn.cursor()
        self.cursor.execute('''
            CREATE TABLE IF NOT EXISTS students (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                student_id INTEGER,
                name TEXT,
                age INTEGER
            )
        ''')
    
    def add_student(self, student):
        self.cursor.execute('''
            INSERT INTO students (student_id, name, age) VALUES (?, ?, ?)
        ''', (student['student_id'], student['name'], student['age']))
        self.conn.commit()
    
    def get_students(self, criteria):
        self.cursor.execute('''
            SELECT * FROM students WHERE student_id = ? OR name = ?
        ''', (criteria, criteria))
        return self.cursor.fetchall()
    
    def update_student(self, student_id, name, age):
        self.cursor.execute('''
            UPDATE students SET name = ?, age = ? WHERE student_id = ?
        ''', (name, age, student_id))
        self.conn.commit()
    
    def delete_student(self, student_id):
        self.cursor.execute('''
            DELETE FROM students WHERE student_id = ?
        ''', (student_id,))
        self.conn.commit()
2.2.2 业务逻辑层

接下来,我们需要定义一个业务逻辑层,负责实现系统的核心功能。以下是一个简单的业务逻辑层的代码示例:

from student_repository import StudentRepository

class StudentService:
    def __init__(self):
        self.student_repository = StudentRepository()
    
    def add_student(self, student):
        self.student_repository.add_student(student)
    
    def get_students(self, criteria):
        return self.student_repository.get_students(criteria)
    
    def update_student(self, student_id, name, age):
        self.student_repository.update_student(student_id, name, age)
    
    def delete_student(self, student_id):
        self.student_repository.delete_student(student_id)
2.2.3 表示层

最后,我们需要定义一个表示层,负责用户界面的展示和用户输入的处理。在本示例中,我们使用命令行作为用户界面。以下是一个简单的表示层的代码示例:

from student_service import StudentService

class StudentUI: