您的位置:首页 > 编程语言 > C语言/C++

C++网站开发MVC框架TreeFrog Framework教程——4.生成器

2017-06-12 18:27 621 查看

C++网站开发MVC框架TreeFrog Framework教程——4.生成器

下面将说明TreeFrog框架的重要组件——生成器tspawn。

生成程序骨架

在我们开始编程之前,必须要做的事就是生成程序的骨架。下面的命令就是在当前工作目录下生成一个名为blogapp的文件夹,并以此作为项目根目录生成程序的基本骨架。

$ tspawn new blogapp


所谓的基本框架,包括以下的这些目录:

controllers:存放控制器类的代码

models:存放模型对象类的代码

views:存放视图类的代码

helpers:存放帮助器类的代码

config:存放.ini配置文件

db:存放数据库文件(主要针对SQLite)

lib:存放将源代码编译后得到的库文件

log:存放日志文件

plugin:存放插件类的代码

public:存放静态资源文件(比如图片,css,html文件)

script:存放Javascript脚本文件

test:存放测试专用的文件

tmp:存放临时文件(比如上传的临时文件,完成后即可转移删除)

当然还有根目录下的.pro项目文件,它里面有着关于本程序最基本的配置信息。

生成手脚架scaffold

“手脚架”这个词十分形象生动,因为我们可以利用它很方便地完成对数据库的CRUD(增删查改)操作,主要包括对应的控制器、模型、ORM框架。首先我们要先在数据库创建好数据表,比如在Mysql执行下面的命令:

> CREATE TABLE blog (id INTEGER PRIMARY KEY, title VARCHAR(20), body VARCHAR(200));


我们可以在database.ini中配置我们的数据库,比如:

[dev]
driverType=QMYSQL
databaseName=blogdb
hostName=
port=
userName=root
password=root
connectOptions=


配置项含义备注
driverType数据库驱动名称有以下备选项: QDB2、QIBASE(Borland InterBase)、QMYSQL、QOCI(Oracle Call Interface)、QODBC、QPSQL(PostgreSQL)、QSQLITE
databaseName数据库名称如果是SQLite,则为存储文件的路径(如db/blogdb)
hostName主机名缺省为localhost
port端口号缺省为默认端口号
userName用户名
password密码
connectOptions数据库连接选项详情可查阅QSqlDatabase::setConnectOptions()
这样在项目根目录下执行下面的命令就可以生成脚手架了:

$ tspawn scaffold blog


数据表名和模型/控制器名称之间的关系

生成器生成的各种类名(脚手架)都是由对应的数据表名决定,规则如下:

数据表名模型对象名控制器名SqlObject(ORM对象)名
blog_entry →BlogEntryBlogEntryControllerBlogEntryObject

tspawn命令的子命令

我们可以通过
$ tspawn -h
命令来查看tspawn支持哪些子命令:

$ tspawn -h
usage: tspawn <subcommand> [args]
Available subcommands:
new (n)  <application-name>
scaffold (s)  <model-name>
controller (c)  <controller-name>
model (m)  <table-name>
sqlobject (o)  <table-name>


如果我们只想生成控制器、模型或者ORM中的一种,可以把子命令scaffold替换为controller、model或者sqlobject。

CRUD

CRUD是web程序的4个主要功能,分别对应着Create(增)、Read(查)、Update(改)、Delete(删),利用生成器生成的脚手架中各个函数有以下的对应关系:

控制器模型ORMSQL
Ccreatecreate()create()
Rindex,showget(),getAll()find()
Usavesave(),update()update()
Dremoveremove()remove()

关于T_CONTROLLER_EXPORT宏定义

由生成器生成的控制器代码中一般会在类定义的开头加上一个奇怪的宏定义——T_CONTROLLER_EXPORT,这到底是什么?

对于Windows系统,所有控制器在编译时会集合成一个DLL文件,如果其他程序要调用到它的函数或者类,则需要在源代码加上__declspec(dllexport)来声明导出函数,此时T_CONTROLLER_EXPORT宏展开的内容就是__declspec(dllexport)

而对于Mac OS或者Linux的用户,调用动态库文件并没有此限制,所以T_CONTROLLER_EXPORT宏展开并没有任何内容。即

#define T_CONTROLLER_EXPORT


这样,通过这个宏定义就可以使同一份代码可以在不同的平台编译运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ c 后台 TreeFrog c语言