当前位置: 首页 > news >正文

软件开发的目录规范

软件开发的目录规范

为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。
软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名为ATM,推荐目录结构如下

ATM/
|-- core/
|   |-- core.py(核心业务逻辑代码)
|
|-- api/	(存放接口文件,接口主要用于业务逻辑提供数据操作)
|   |-- api.py 
|
|-- db/
|   |-- db_handle.py
|
|-- lib/
|   |-- common.py
|
|-- conf/
|   |-- settings.py
|
|-- run.py (程序的启动文件,一般放在项目的根目录下,因为在运行是会默认将运行文件所在的文件夹作为一个sys.path的第一个路径,这样就省去了处理环境变量的步骤)
|-- setup.py
|-- requirements.txt
|-- README

详解部分

# 强调: 以下所有模块之间的导入关系, 不要导可执行文件
bin 
	start.py --> 启动软件入口
	
conf 
	settings.py --> 配置文件. 比如存放一些固定的路径
	
	
db
	db_hanlder.py --> 用于存放数据文件与操作数据的代码文件

lib
	commom.py --> 存放公共的功能, 常用的一些功能。比如存放装饰器.
	
core  
	src.py(src 英文全称 source)  或者 main.py --> 核心业务逻辑代码
	
log
	access.log 存放日志的文件	

readme.txt
	项目说明文件。
	除此之外,有一些方案给出了更加多的内容,比如LICENSE.txt,ChangeLog.txt文件等,主要是在项目需要开源时才会用到,请读者自行查阅。
    关于README的内容,这个应该是每个项目都应该有的一个文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。它需要说明以下几个事项:
        1、软件定位,软件的基本功能;
        2、运行代码的方法: 安装环境、启动命令等;
        3、简要的使用说明;
        4、代码目录结构说明,更详细点可以说明软件的基本原理;
        5、常见问题说明。

setup.py  安装、部署、打包的脚本
	用setup.py来管理代码的打包、安装、部署问题。业界标准的写法是用Python流行的打包工具setuptools来管理这些事情,这种方式普遍应用于开源项目中。不过这里的核心思想不是用标准化的工具来解决这些问题,而是说,一个项目一定要有一个安装部署工具,能快速便捷的在一台新机器上将环境装好、代码部署好和将程序运行起来。

requirements.txt 
	这个文件的文件名不能改。一般存放第三方库的描述文档信息。文件的存在是为了方便开发者维护软件的依赖库。我们需要将开发过程中依赖库的信息添加进该文件中,避免在 setup.py安装依赖时漏掉软件包,同时也方便了使用者明确项目引用了哪些Python包。	
	这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10这种格式,要求是这个格式能被pip识别,这样就可以简单的通过 pip install -r requirements.txt来把所有Python依赖库都装好了,具体格式参照

end

img

相关文章:

  • Linux前身今世
  • linux操作系统虚拟机安装
  • python之数字类型内置方法
  • python之字符串类型内置方法
  • python之列表类型内置方法
  • python之元组类型内置方法
  • python之字典类型内置方法
  • python集合类型内置方法
  • python文件处理之编码字符
  • python文件处理
  • 函数的基本使用
  • python之迭代器
  • python之三元表达式、生成式、生成器表达式
  • 面向过程编程思想与匿名函数及其应用
  • python之函数递归与调用
  • #Java异常处理
  • @angular/forms 源码解析之双向绑定
  • 「译」Node.js Streams 基础
  • angular组件开发
  • ComponentOne 2017 V2版本正式发布
  • GraphQL学习过程应该是这样的
  • HashMap剖析之内部结构
  • js操作时间(持续更新)
  • js继承的实现方法
  • React Transition Group -- Transition 组件
  • Redis 中的布隆过滤器
  • Theano - 导数
  • 不上全站https的网站你们就等着被恶心死吧
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 通过npm或yarn自动生成vue组件
  • #162 (Div. 2)
  • (2015)JS ES6 必知的十个 特性
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (TOJ2804)Even? Odd?
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET/C# 使窗口永不获得焦点
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Angular] 笔记 18:Angular Router
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [IDF]被改错的密码
  • [LeetCode]剑指 Offer 42. 连续子数组的最大和
  • [NOIP2000] 乘积最大
  • [python] 过年燃放烟花
  • [shell] while read line 与for循环的区别
  • [Windows编程] Windows 7 对多核的支持
  • [附源码]计算机毕业设计文曦家教预约系统Springboot程序
  • [计算机通信网络]网桥与其作用机理举例详解