zoukankan      html  css  js  c++  java
  • 软件开发目录规范

    软件开发目录规范

    层次清晰得目录结构:
         1.可读性高
         2.可维护性高

    1.Stackoverflow上大家对python目录结构得讨论
         https://stackoverflow.com/questions/193161/what-is-the-best-project-structure-for-a-python-application

    假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了:

    foo/
    |-- bin/
    |   |-- foo
    |
    |-- foo/
    |   |-- tests/
    |   |   |-- __init__.py
    |   |   |-- test_main.py
    |   |
    |   |-- __init__.py
    |   |-- main.py
    |
    |-- docs/
    |   |-- conf.py
    |   |-- abc.rst
    |
    |-- setup.py
    |-- requirements.txt
    |-- README
    解释:
     1.bin:存放项目得一些可执行文件
     2.foo:存放项目得所有源代码
       2.1.源代码中得所有模块,包,放在此目录,不要至于顶层目录。
       2.2.子目录tests存放单元测试
       2.3.程序得入口命名为main.py
     3.docs:存放一些文档
     4.setup.py:安装,部署,打包得脚本
     5.requirements.txt:存放软件依赖得外部python包列表 (pip freeze 可列出所有得第三方包)
     6.README:项目说明书

    开源软件得目录组织
    https://jeffknupp.com/blog/2013/08/16/open-sourcing-a-python-project-the-right-way/

    2.目录理解

    README: 
     每个项目都应该有的一个文件,简要描述该项目的信息,让读者快速了解这个项目
     1.软件定位,软件的基本功能。
     2.运行代码的方法: 安装环境、启动命令等。
     3.简要的使用说明。
     4.代码目录结构说明,更详细点可以说明软件的基本原理。
     5.常见问题说明。
    
    setup.py:
     python流行的打包工具:setuptools
         https://pythonhosted.org/setuptools/setuptools.html#developer-s-guide
     一个项目一定要有一个安装部署工具,快速便捷的在一台新机器上环境装好,代码部署好,程序运行起来。
     “复杂的东西自动化,能自动化的东西一定要自动化”
     
      学习技术的方式就是看他人是怎么用的。可以参考python的一个web框架,flask是如何写的?
       https://github.com/pallets/flask/blob/master/setup.py
       
    requirement.txt:
     1.方便开发者维护软件的包依赖
     2.方便读者明确项目使用了哪些包
     具体格式说明:
        https://pip.readthedocs.io/en/1.1/requirements.html 
    
    配置文件的使用方法:
     1.配置文件写在一个或多个python文件中,比如此处的conf.py。
     2.项目中哪个模块用到这个配置文件就直接通过import conf这种形式来在代码中使用配置。
     
     这样做不好:
     1.这让单元测试变得困难(因为模块内部依赖了外部配置)
     2.另一方面配置文件作为用户控制程序的接口,应当可以由用户自由指定该文件的路径。
     3.程序组件可复用性太差,因为这种贯穿所有模块的代码硬编码方式,使得大部分模块都依赖conf.py这个文件。
    
     配置的使用,更好的方式是:
     1.模块的配置都是可以灵活配置的,不受外部配置文件的影响。
     2.程序的配置也是可以灵活控制的。
  • 相关阅读:
    回溯算法(DFS:深度优先)
    KNN原理和实现
    Anaconda虚拟环境控制
    c++容器
    最坏情况为线性时间的选择算法
    JVM原理解析
    substr、substring和slice的区别
    word-wrap与break-word属性的区别
    js修改伪类的值
    快速批量删除文件名中相同的文字
  • 原文地址:https://www.cnblogs.com/alice-bj/p/8480558.html
Copyright © 2011-2022 走看看