软件开发目录规范

Posted ycmyay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件开发目录规范相关的知识,希望对你有一定的参考价值。

软件开发目录规范

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

Copy

Foo/
|-- core/
|   |-- core.py
|
|-- api/
|   |-- api.py
|
|-- db/
|   |-- db_handle.py
|
|-- lib/
|   |-- common.py
|
|-- conf/
|   |-- settings.py
|
|-- run.py
|-- setup.py
|-- requirements.txt
|-- README

简要解释一下:

• core/: 存放业务逻辑相关代码

• api/: 存放接口文件,接口主要用于为业务逻辑提供数据操作。

• db/: 存放操作数据库相关文件,主要用于与数据库交互

• lib/: 存放程序中常用的自定义模块

• conf/: 存放配置文件

• run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤

• setup.py: 安装、部署、打包的脚本。

• requirements.txt: 存放软件依赖的外部Python包列表。

• README: 项目说明文件。

除此之外,有一些方案给出了更加多的内容,比如LICENSE.txt,ChangeLog.txt文件等,主要是在项目需要开源时才会用到,请读者自行查阅。

关于README的内容,这个应该是每个项目都应该有的一个文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。它需要说明以下几个事项:

Copy

1、软件定位,软件的基本功能;
 
2、运行代码的方法: 安装环境、启动命令等;
 
3、简要的使用说明;
 
4、代码目录结构说明,更详细点可以说明软件的基本原理;
 
5、常见问题说明。

关于setup.py和requirements.txt:

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

requirements.txt文件的存在是为了方便开发者维护软件的依赖库。我们需要将开发过程中依赖库的信息添加进该文件中,避免在 setup.py安装依赖时漏掉软件包,同时也方便了使用者明确项目引用了哪些Python包。

这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10这种格式,要求是这个格式能被pip识别,这样就可以简单的通过 pip install -r requirements.txt来把所有Python依赖库都装好了,具体格式参照https://pip.readthedocs.io/en/1.1/requirements.html

软件开发的目录规范

软件开发的目录规范(掌握)

为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录。假设你要写一个ATM软件,你可以按照下面的目录结构管理你的软件代码:

ATM/
|-- core/
|   |-- src.py  # 业务核心逻辑代码
|
|-- api/
|   |-- api.py  # 接口文件
|
|-- db/
|   |-- db_handle.py  # 操作数据文件
|   |-- db.txt  # 存储数据文件
|
|-- lib/
|   |-- common.py  # 共享功能
|
|-- conf/
|   |-- settings.py  # 配置相关
|
|-- bin/
|   |-- run.py  # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤
|
|-- log/
|   |-- log.log  # 日志文件
|
|-- requirements.txt # 存放软件依赖的外部Python包列表,详见https://pip.readthedocs.io/en/1.1/requirements.html
|-- README  # 项目说明文件
# run.py

import sys
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from core import src

if __name__ == '__main__':
    src.run()
# settings.py

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DB_PATH = os.path.join(BASE_DIR, 'db', 'db.txt')
LOG_PATH = os.path.join(BASE_DIR, 'log', 'user.log')

# print(DB_PATH)
# print(LOG_PATH)
# src.py

from conf import settings
from lib import common


def login():
    print('登陆')


def register():
    print('注册')
    name = input('username>>: ')
    pwd = input('password>>: ')
    with open(settings.DB_PATH, mode='a', encoding='utf-8') as f:
        f.write('%s:%s\n' % (name, pwd))
        # 记录日志。。。。。。
        common.logger('%s注册成功' % name)
        print('注册成功')


def shopping():
    print('购物')


def pay():
    print('支付')


def transfer():
    print('转账')


func_dic = {
    '1': login,
    '2': register,
    '3': shopping,
    '4': pay,
    '5': transfer,
}


def run():
    while True:
        print("""
        1 登陆
        2 注册
        3 购物
        4 支付
        5 转账
        6 退出
        """)
        choice = input('>>>: ').strip()
        if choice == '6': break
        if choice not in func_dic:
            print('输入错误命令,傻叉')
            continue
        func_dic[choice]()
# common.py

import time
from conf import settings


def logger(msg):
    current_time = time.strftime('%Y-%m-%d %X')
    with open(settings.LOG_PATH, mode='a', encoding='utf-8') as f:
        f.write('%s %s' % (current_time, msg))

以上是关于软件开发目录规范的主要内容,如果未能解决你的问题,请参考以下文章

软件开发目录规范

软件开发的目录规范

软件开发目录规范

软件开发目录规范

Python的软件开发目录规范

Python学习————软件开发目录规范