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

本文介绍TreeFrog框架下的生成器tspawn,包括如何生成程序骨架、手脚架,以及控制器、模型和ORM对象等。tspawn简化了数据库操作及CRUD功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.生成程序骨架

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

$ tspawn new blogapp

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

  1. controllers:存放控制器类的代码
  2. models:存放模型对象类的代码
  3. views:存放视图类的代码
  4. helpers:存放帮助器类的代码
  5. config:存放.ini配置文件
  6. db:存放数据库文件(主要针对SQLite
  7. lib:存放将源代码编译后得到的库文件
  8. log:存放日志文件
  9. plugin:存放插件类的代码
  10. public:存放静态资源文件(比如图片,csshtml文件)
  11. script:存放Javascript脚本文件
  12. test:存放测试专用的文件
  13. tmp:存放临时文件(比如上传的临时文件,完成后即可转移删除)

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

2.生成手脚架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

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

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

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

4.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替换为controllermodel或者sqlobject

5.CRUD

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

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

6.关于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

这样,通过这个宏定义就可以使同一份代码可以在不同的平台编译运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值