
领域层(Domain):定义了学校的领域模型 School 以及学校仓库的抽象接口 SchoolRepository。 基础设施层(Infrastructure):实现了基于 SQLite 的学校仓库 SchoolRepository,负责与数据库进行交互。 应用层(Application):SchoolService 类封装了学校信息的业务逻辑,依赖于 SchoolRepository 完成数据的持久化操作。 视图层(View):SchoolView 类使用 ttk.Treeview 显示学校信息,并提供了分页、搜索、添加、修改和删除等操作的界面。SchoolDialog 类用于弹出新窗口进行添加和修改操作。 控制器层(Controller):SchoolController 类负责协调视图层和应用层,处理用户的操作请求并调用相应的服务方法。
项目图:

DDD:
# encoding: utf-8
# 版权所有 2025 涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 Oracle 21c
# Datetime : 2025/2/14 22:28
# User : geovindu
# Product : PyCharm
# Project : pydddmvcdemo
# File : school.py
# explain : 学习
class SchoolInfo(object):
"""
领域层(Domain)
定义领域模型
学校表
"""
def __init__(self):
"""
構造
"""
self._SchoolId = None
"""
ID,主键
"""
self._SchoolName = None
"""
校名
"""
self._SchoolTelNo = None
"""
学校电话
"""
@property
def SchoolId(self):
"""
ID,主键
"""
return self._SchoolId
@SchoolId.setter
def SchoolId(self, schoolId):
"""
ID,主键
:param SchoolId:
:return:
"""
self._SchoolId = schoolId
@property
def SchoolName(self):
"""
校名
"""
return self._SchoolName
@SchoolName.setter
def SchoolName(self, schoolName):
"""
校名
:param SchoolName:
:return:
"""
self._SchoolName = schoolName
@property
def SchoolTelNo(self):
"""
学校电话
"""
return self._SchoolTelNo
@SchoolTelNo.setter
def SchoolTelNo(self, schoolTelNo):
"""
学校电话
:param SchoolTelNo:
:return:
"""
self._SchoolTelNo = schoolTelNo
# encoding: utf-8
# 版权所有 2025 涂聚文有限公司
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2023.1 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, poostgreSQL 17.0 Oracle 21c
# Datetime : 2025/2/14 22:30
# User : geovindu
# Product : PyCharm
# Project : pydddmvcdemo
# File : school.py
# explain : 学习
import sqlite3
from Domain.school import SchoolInfo
#from __future__ import annotations
from abc import ABC, abstractmethod
from Factory.AbstractFactory import AbstractFactory
class SchoolRepository(object):
"""
基础设施层(Infrastructure)
实现仓储接口
"""
dal = AbstractFactory.createSchool
def __init__(self):
self.__name = "SchoolBll"
self.createtable() # 如果不存在,初始化表
def __del__(self):
"""
:return:
"""
print(f"{self.__name} ERASE MEMORY")
def Close(cls):
"""
关闭
:return:
"""
cls.dal().Close()
def createtable(self):
"""
建表
"""
self.dal().createtable()
def selectData(self) -> list:
"""
:return:
"""
data = self.dal().selectSql()
return data
def select(self) -> list[SchoolInfo]:
"""
:return:
"""
schools = []
data = self.dal().selectSql()
if len(data) > 0:
for SchoolId, SchoolName, SchoolTelNo in data[0]:
info = SchoolInfo()
info.SchoolId = SchoolId
info.SchoolName = SchoolName
info.SchoolTelNo = SchoolTelNo
schools.append(info)
return schools
def selectSql(cls) -> list[SchoolInfo]:
"""
元组数据
:return: list 列表
"""
schools = []
data = cls.dal().selectSql()
if len(data) > 0:
for SchoolId, SchoolName, SchoolTelNo in data[0]:
info = SchoolInfo()
info.SchoolId = SchoolId
info.SchoolName = SchoolName
info.SchoolTelNo = SchoolTelNo
schools.append(info)
return schools
def selectSqlCount(cls) -> int:
"""
查询数据 总数
:return:
"""
# print(cls.dal().selectSqlCount()[0][0])
total = cls.dal().selectSqlCount()[0][0]
return total
def Count(self) -> int:
"""
查询数据 总数
:return:
"""