一个项目的规范包括:
- 组织规范:目录命名、目录组织、文件命名、编译方法
- 代码规范:命名、缩进、可用语法、可选库…
1、Android项目组织结构
一级目录:
src //源码
gen //资源索引文件R.java,所有res文件夹下的资源在R.java中都一一生成对应的资源ID
Android 2.x //Android SDK,API函数库
assets //引用的外部资源
res //资源文件,往下又分drawable、layout、values三类文件夹
AndroidManifest.xml //配置文件:Activity注册、使用到的服务、编码格式、应用的icon、版本号
default.properties //工程的环境信息
二级分析:
1) gen:
gen
--BuildConfig.java
--R.java
//BuildConfig.java
public final class BuildConfig {
public final static boolean DEBUG = true;
}
//R.java文件
public final class R {
public static final class attr {
}
public static final class dimen {
public static final int activity_horizontal_margin=0x7f040000;
public static final int activity_vertical_margin=0x7f040001;
}
public static final class drawable {
public static final int ic_launcher=0x7f020002;
}
public static final class id {
public static final int action_settings=0x7f080004;
public static final int btn_start=0x7f080003;
}
public static final class layout {
public static final int activity_main=0x7f030002;
}
public static final class menu {
public static final int main=0x7f070000;
}
public static final class string {
public static final int action_settings=0x7f050001;
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050002;
}
public static final class style {
public static final int AppBaseTheme=0x7f060000;
public static final int AppTheme=0x7f060001;
}
}
2)res
--drawable-hdpi //高分辨率屏幕图片
--drawable-mdpi //中分辨率
--drawable-ldpi //低
--layout //各activity.xml文件
--values
----strings.xml //字符串变量
----dimens.xml //屏幕尺寸相关变量定义
----styles.xml //主题样式定义,可被替换values-vXX中的替换
3)manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<!-- 基本配置 -->
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<!-- 应用配置 -->
<application>
<!-- Activity 配置 -->
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<!-- Service 配置 -->
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<!-- Receiver 配置 -->
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<!-- Provider 配置 -->
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<!-- 所需类库配置 -->
<uses-library />
</application>
</manifest>
摘抄自:http://blog.chinaunix.net/uid-9185047-id-3460344.html (详细解释参考)
2、Python Tornado项目代码组织结构
2.1组织结构
通常Tornado Web项目的代码组织:
model //M : 模型py文件
templates //V :视图模板html文件
handlers //C : 控制器handler处理py文件
static //静态资源文件
--css
--img
--js
项目大了,涉及到前后台,以及多个应用平台了,可以扩展
第一层:根目录下,按前后台分两个独立的项目
-front //前台展示 项目
-manage //后台管理 项目
第二层:front项目下
-front
—-pc //web入口与渲染的处理handler
—-app //app入口与渲染的处理handler
—-controler //C层,实际逻辑处理
—-model //M层,数据库操作,(单纯的sql操作,不要做其他任何处理)
—-lib //常用库,如log.py,mail.py
—-template // V层,模板
—-static //静态资源
2.2python的 __init__.py 文件
__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。
>>> import Package1
>>> Package1.Module1
Traceback (most recent call last): File “<pyshell#1>”, line 1, in ? Package1.Module1
AttributeError: ‘module’ object has no attribute ‘Module1’
我们需要在 __init__.py 里把 Module1 预先导入:
#文件 __init__.py
import Module1
测试:
>>> import Package1
>>> Package1.Module1
<module ‘Package1.Module1’ from ‘Module.pyc’>
__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:
from PackageName import *
这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:
#文件 __init__.py
__all__ = [‘Module1’, ‘Module2’, ‘Package2’]
测试:
>>> from Package1 import *
>>> Module2
<module ‘Package1.Module2’ from ‘Module.pyc’>
__init__.py 文件会在导入时被执行。