首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python: Domain-Driven Design (DDD) Simple example

python: Domain-Driven Design (DDD) Simple example

作者头像
geovindu
发布2026-06-18 20:41:43
发布2026-06-18 20:41:43
1010
举报

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

项目图:

DDD:

代码语言:javascript
复制
# 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:
        """
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档