TreeFrog 之生成器
来源:互联网 发布:中国seo排行榜 编辑:程序博客网 时间:2024/06/05 20:56
生成器
在这一章节,我们将看看命名为tspawn的生成器命令.
生成应用程序框架
首选, 在我们做其他事情前需要创建一个应用程序的框架.我们将再次使用blogapp创建.从命令行输入下面的命令(在Windows上,从Treefrog命令行窗口执行)
$ tspawn new blogapp
当你执行完这条命令, 应用名将作为目录树的根目录.配置文件(ini)和项目文件(pro)也会生成.目录是你已经看过的一些名字.
下面的项目将作为一个文件夹生成.
- controllers
- models
- views
- heplers
- config -配置文件
- db - 数据库存储文件 (SQLite)
- lib
- log -记录文件
- plugin
- public -静态HTML文件, 图片,JavaScript 文件
- script
- test
- tmp -临时目录,例如上传的文件
生成骨架
骨架包括CURD操作的基本实现.骨架包含以下部件:控制器(controller),模型(model),视图(view)源代码的源代码, 还有项目文件(pro).因此, 这些骨架构成了一个好的基础帮助你完成一个完整的开发.为了用生成器命令tspawn生成一个骨架, 需要先在数据库定义一个表, 然后在配置文件(database.ini)中设置数据库信息.
现在, 开始定义一张表.见下面的例子:> CREATE TABLE blog (id INTEGER PRIMARY KEY, title VARCHAR(20), body VARCHAR(200));
如果想使用SQLite作为数据库, 你应该把数据库文件放在应用程序的根目录内.你可以在配置文件中设置数据库信息.生成器命令使用在dev节设置的信息.
[dev]driverType=QMYSQLdatabaseName=blogdbhostName=port=userName=rootpassword=rootconnectOptions=
设置清单
- QDB2: IBM DB2
- QIBASE: Borland InterBase Driver
- QMYSQL: MySQL Driver
- QOCI: Oracle Call Interface Driver
- QODBC: ODBC Driver
- QPSQL: PostgreSQL Driver
- QSQLITE: SQLite version 3 or abovedatabaseName数据库名称如果是SQLite必须定义文件路径.
如:db/blogdbhostName主机名称留空表示localhostport端口留空表示默认端口userName用户名 password密码 connectOptions连接选项更多信息参看Qt文档:
QSqlDatabase::setConnectOptions()
如果Qt SDK没有提供数据库驱动将不能访问数据库.如果没有还没有构建,你必须设置好驱动.作为替代, 你可以从下载页下载数据库驱动,然后安装它.当你执行完生成器命令(完成上面提到的步骤), 骨架就会生成.每条命令都应该在应用程序的根目录下执行.
$ cd blogapp$ tspawn scaffold blogdriverType: QMYSQLdatabaseName: blogdbhostName:Database open successfullycreated controllers/blogcontroller.hcreated controllers/blogcontroller.cpp:
简单地说:在数据库中定义好表结构, 然后使用生成器生成骨架.
模型名称(Model-Name)/控制器名称(Controller-Name)和表名(Table Name)的关系
生成器会基于表名生产类的名字.规则如下:
銆€Table name Model name Controller name Sql object name銆€blog_entry 鈫? BlogEntry BlogEntryController BlogEntryObject
请注意下划线会被删掉,后面的第一个字母会改成大写的.可以完全忽略单词单数和复数形式直接区别.
生成器子命令
这里是tspawn命令的用法规则:
$ tspawn -husage: 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>
如果你使用”controller”,”model”,”sqlobject”作为子命令, 将只会生成”controller”, “model” 和 “SqlObject”.
列
Treefrog没有升级数据库的功能或者更改管理数据库表结构的机制.基于以下原因,我认为它是不重要的:
- 如果我实现升级功能, 用户会有额外的学习成本.
- 这些是关于DB操作的完整功能的SQL 知识.
- 在Treefrog, 可以在表更改后重新生成ORM对象类.(不幸, 可能也会影响到Model类)
- 我认为对SQL命令进行框架差异管理是没有什么价值的。你是否同意这些观点?
名称转换
Treefrog 有类名和文件名转换功能.生成器按照下面的条款和规定生成类名和文件名.
控制器名称的转换
控制器类名是”表名+Controller”控制器的类名永远使用大写字母打头, 不要使用下划线分隔单词,而是将下划线后的单词首个字母换成大写的.
以下类名是很好的例子帮助理解如何转换.
- BlogController
- EntryCommentController这些文件保存在controller文件夹内.文件夹内的文件名是全部小写的, 类名加上对应的扩展名(.cpp 或 .h).
模型名称的转换
和控制器的方式一样, 模型名称永远使用大写字母打头, 不要使用下划线分隔单词,而是将下划线后的单词首个字母换成大写的.例如下面的类名:
- Blog
- EntryComment这些文件保存在models文件夹内.和控制器一样, 这些文件名全部是小写的.模型名后加上文件扩展(.cpp 或 .h).和Rails不同, 我们不使用单词单数和复数形式的转换.
视图名称的转换
模版文件按照”控制器名称+扩展名”的文件名形式生成,文件名全部是小写的, 在”views/控制器名”目录内.扩展名取决于选择的模版系统.同时, 但你构建视图然后输出源文件在”views/_src”文件内.你会注意到这些文件已经全部转换成了C++ 代码模版.当文件编译后, 会生成一个view的共享库.
CRUD
CRUD包括了网页应用的四个主要功能.这个名称来自于四个单词的首字符”新建(Create)”,”读取(Read)”,”更新(Update)”,和”删除(Delete)”.当你新建一个骨架, 生成器命令生成如下名称的代码:
CURD对应表
create()create()INSERTRindex
showget() [static]
getAll() [static]find()SELECTUsavesave()
update()update()UPDATEDremoveremove()remove()DELETE
关于 T_CONTROLLER_EXPORT宏
生成器生成的控制器类将会增加到宏T_CONTROLLER_EXPORT.在Windows上, 控制器是一个单独的DLL文件, 但是为了在DLL外可使用这些类和功能, 我们需要使用关键字__declspec (称为dllexport)定义它.T_CONTROLLER_EXPORT宏会用这个关键字完成替换.
然而, 在Linux和Mac OS X下安装,T_CONTROLLER_EXPORT没有定义任何内容, 因为关键字__declspec是不需要的.
#define T_CONTROLLER_EXPORT
通过这种方式, 同样的代码就能够支持多平台了.
- TreeFrog 之生成器
- treefrog 之控制器
- treefrog 之模型
- treefrog 之测试
- treefrog 之发布
- treefrog之视图 ERB
- TreeFrog Framework 开发入门之HelloWorld
- treefrog之视图 Otama模版系统
- C++网站开发MVC框架TreeFrog Framework教程——4.生成器
- TreeFrog (C++ Web Framework)开发之源码分析
- TreeFrog (C++ Web Framework)开发入门之使用Qt编译
- TreeFrog (C++ Web Framework)开发之http文件服务器
- TreeFrog (C++ Web Framework)开发之源码分析
- Treefrog应用程序
- python之生成器
- 设计模式之生成器
- FreeMaker之代码生成器
- Python学习之生成器
- poj1973
- “正在加载,请稍后...”的实现方法
- 推荐Java五大微服务器及其代码示例教程
- 【Visual Studio】解决方案未保存,请先保存你的解决方案,然后再管理Nuget包
- VLAN配置实验和TRUNK配置实验
- TreeFrog 之生成器
- mybatis中${}与#{}的区别
- HDU 3068 最长回文 Manacher算法O(n)回文子串算法
- 算法概论:第八章NP-完全问题——课后题8.16
- JavaEE
- python中使用selenium的一些注意点2
- archlinux_安装篇
- Python内置函数
- 【WPF】窗体页面间传值总结