qidao123.com技术社区-IT企服评测·应用市场

标题: 建立Python 编程的项目观和架构思维 [打印本页]

作者: 美食家大橙子    时间: 2025-3-30 13:50
标题: 建立Python 编程的项目观和架构思维
目次

一、软件项目的认识
二、软件的规模认识
三、如何应对规模较大的软件开发——软件架构
四、分层架构的python综合例子:
1、项目简介:
2、项目的分层布局与文件构造布局的对照图:
3、主要功能运行界面:
4.主要代码的部门实例:
附录:未分层代码可以参考,运行领会.


一、软件项目的认识

软件项目是指利用编程语言开发的一套程序或软件,通常包含多个代码文件、模块、包以及相关资源,他们协同工作以实现特定的功能或办理特定的问题,除功能外还体现了一定的布局构造性。

软件项目包含的 常见功能性 和 构造性成分如下:

        包、文件、模块形成了不同的条理地区性的、本身的命名空间,在此区间里不允许同名。意味着不同条理中的命名可以是相同的,而不会相互干扰,主要作用总结:

        命名空间(Namespace)‌是一种用于构造代码和防止命名冲突的重要机制。通过命名空间,开发者可以将标识符(如变量、函数、类等)封装在一个独立的作用域中,从而避免不同模块或库中的同名标识符发生冲突。‌
        Python中的命名空间主要有内置、全局和局部三种类型。内置命名空间在表明器启动时创建,自动映射到全局空间,全局命名空间在模块界说时创建,局部命名空间在函数调用时创建。
二、软件的规模认识

软件按规模划分
三、如何应对规模较大的软件开发——软件架构

        应对大规模软件开发的手段包罗:需求管理机制、技能架构设计、开发过程控制、团队协作优化。这里只谈架构方面。        
        软件架构 是指软件系统中各要素的基本布局和构造方式,它界说了软件系统的各个部门之间的关系和交互方式,以及系统的整体设计方案。软件架构设计包罗软件的构成部门和模块的划分、以及它们之间的关系和依靠等。


        软件架构作用:软件架构是开发项目的蓝图,是设计团队部署需要实验的任务的依据,使复杂问题被规划成规模合理的子问题,简化问题,有助于提高系统的可维护性、可扩展性和可重用性,同时体现了工程思维。软件架构详细规划了如下内容:


1、常见软件架构


2、分层架构的设计

        在软件工程中,分层架构是一种将应用或系统划分为多个独立条理(或模块)的方法,每个条理负责不同的功能。分层架构的主要目的是降低层与层之间的依靠,实现功能模块的合理粒度规划和高内聚低耦合,以提高系统的机动性和可维护性,同时实现开发任务的可控划分、分配与高效管理,这是分层架构软件设计的重点和精髓。
        分层架构通常包罗用户接口层、应用层、范畴层(可选)和基础层。分层架构的实现是如何体现的,起首体现在项目的布局上,如下:

四、分层架构的python综合例子:

1、项目简介:

        名称students_Score
        功能包含登录注册功能、成绩录入与成绩可视化;
         数据表成绩表(包含数学、英语、专业课字段)用户表(包含用户名和密码字段)。
         系统软件的分层架构:数据访问层model,服务控制层service,界面显示层view。
        特点:每层间的依靠是单向的,非跳跃的,通过分层设计,系统各层之间的依靠关系被明确界定,降低了层与层之间的耦合度,从而提高了系统的机动性和可维护性。
2、项目的分层布局与文件构造布局的对照图:


数据访问层model

服务控制层service

界面显示层view


3、主要功能运行界面:




4.主要代码的部门实例:

服务控制层 service包里 的loginuser模块代码如下:
  

附录:未分层代码可以参考,运行领会.

  1. import streamlit as st
  2. import pandas as pd
  3. import hashlib
  4. import sqlite3
  5. if 'user' not in st.session_state:
  6.     st.session_state.user = None
  7. # Hashing password
  8. def hash_password(password):
  9.     return hashlib.sha256(password.encode()).hexdigest()
  10. # Database connection
  11. conn = sqlite3.connect('grades.db', check_same_thread=False)
  12. c = conn.cursor()
  13. # Create tables if they don't exist
  14. def init_db():
  15.     c.execute('''
  16.         CREATE TABLE IF NOT EXISTS users (
  17.             username TEXT PRIMARY KEY,
  18.             password_hash TEXT
  19.         )
  20.     ''')
  21.     c.execute('''
  22.         CREATE TABLE IF NOT EXISTS grades (
  23.             id INTEGER PRIMARY KEY AUTOINCREMENT,
  24.             math REAL,
  25.             english REAL,
  26.             major REAL
  27.         )
  28.     ''')
  29.     conn.commit()
  30. init_db()
  31. # Login function
  32. def login():
  33.     st.subheader("登录")
  34.     username = st.text_input("用户名")
  35.     password = st.text_input("密码", type="password")
  36.     if st.button("登录"):
  37.         hashed_password = hash_password(password)
  38.         c.execute("SELECT * FROM users WHERE username=? AND password_hash=?", (username, hashed_password))
  39.         user = c.fetchone()
  40.         if user:
  41.             st.success(f"成功登录为 {username}")
  42.             st.session_state.user = username
  43.         else:
  44.             st.error("无效的用户名或密码")
  45. # Register function
  46. def register():
  47.     st.subheader("注册")
  48.     new_username = st.text_input("新用户名")
  49.     new_password = st.text_input("新密码", type="password")
  50.     confirm_password = st.text_input("确认密码", type="password")
  51.     if st.button("注册"):
  52.         if new_password == confirm_password:
  53.             hashed_password = hash_password(new_password)
  54.             try:
  55.                 c.execute("INSERT INTO users (username, password_hash) VALUES (?, ?)", (new_username, hashed_password))
  56.                 conn.commit()
  57.                 st.success("用户注册成功!")
  58.             except sqlite3.IntegrityError:
  59.                 st.error("用户名已存在")
  60.         else:
  61.             st.error("密码不匹配")
  62. # Grades input function
  63. def input_grades():
  64.     st.subheader("输入成绩")
  65.     math = st.number_input("数学成绩", min_value=0, max_value=100, step=1)
  66.     english = st.number_input("英语成绩", min_value=0, max_value=100, step=1)
  67.     major = st.number_input("专业课成绩", min_value=0, max_value=100, step=1)
  68.     if st.button("提交"):
  69.         c.execute("INSERT INTO grades (math, english, major) VALUES (?, ?, ?)", (math, english, major))
  70.         conn.commit()
  71.         st.success("成绩提交成功!")
  72. # Grades visualization function
  73. def visualize_grades():
  74.     st.subheader("成绩可视化")
  75.     c.execute("SELECT * FROM grades")
  76.     grades_data = c.fetchall()
  77.     if grades_data:
  78.         df = pd.DataFrame(grades_data, columns=["ID", "Math", "English", "Major"])
  79.         st.dataframe(df)
  80.         st.bar_chart(df.set_index("ID"))
  81.     else:
  82.         st.warning("没有可用的成绩数据")
  83. # Main application logic
  84. def main():
  85.     st.title("学生成绩管理系统")
  86.    
  87.     menu = ["登录", "注册", "输入成绩", "成绩可视化"]
  88.     choice = st.sidebar.selectbox("菜单", menu)
  89.     if choice == "登录":
  90.         login()
  91.     elif choice == "注册":
  92.         register()
  93.     elif choice == "输入成绩":
  94.         if st.session_state.user:
  95.             input_grades()
  96.         else:
  97.             st.warning("请先登录以访问此功能")
  98.     elif choice == "成绩可视化":
  99.         if st.session_state.user:
  100.             visualize_grades()
  101.         else:
  102.             st.warning("请先登录以访问此功能")
  103. if __name__ == "__main__":
  104.     main()
复制代码
总结:分层架构系统 代码 相较未分层 模块化设计,复杂度增长、代码量、存储消耗稍有增长,需要仔细规划依靠和依靠通报。付出这些一次性、不大的代价,换来了功能模块的合理粒度的规划和高内聚低耦合,提高了系统的机动性和日后的可维护性,同时实现了开发任务的可控性 边界清晰的划分、分配与高效管理等,是应对规模较大软件开发时, 可选的常用架构设计方案之一。
非常感谢你每一次的停留和阅读!这承载了满满厚爱与支持!愿你在编程的道路上日新月异,劳绩满满的成就和高兴

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4