TreeFrog 之生成器

生成器

在這一章節,我們將看看命名爲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=QMYSQL
    databaseName=blogdb
    hostName=
    port=
    userName=root
    password=root
    connectOptions=
    

設置清單

項目 含義 說明
driverType 驅動名稱 有以下選項:
- 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 above
databaseName 數據庫名稱 如果是SQLite必須定義文件路徑.
如:db/blogdb
hostName 主機名稱 留空表示localhost
port 端口 留空表示默認端口
userName 用戶名  
password 密碼  
connectOptions 連接選項 更多信息參看Qt文檔:
QSqlDatabase::setConnectOptions()


如果Qt SDK沒有提供數據庫驅動將不能訪問數據庫.如果沒有還沒有構建,你必須設置好驅動.作爲替代, 你可以從下載頁下載數據庫驅動,然後安裝它.當你執行完生成器命令(完成上面提到的步驟), 骨架就會生成.每條命令都應該在應用程序的根目錄下執行.

$ cd blogapp
$ tspawn scaffold blog
driverType: QMYSQL
databaseName: blogdb
hostName:
Database open successfully
created  controllers/blogcontroller.h
created  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 -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>

如果你使用”controller”,”model”,”sqlobject”作爲子命令, 將只會生成”controller”, “model” 和 “SqlObject”.

Treefrog沒有升級數據庫的功能或者更改管理數據庫表結構的機制.基於以下原因,我認爲它是不重要的:

  1. 如果我實現升級功能, 用戶會有額外的學習成本.
  2. 這些是關於DB操作的完整功能的SQL 知識.
  3. 在Treefrog, 可以在表更改後重新生成ORM對象類.(不幸, 可能也會影響到Model類)
  4. 我認爲對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對應表

  Action Model ORM SQL
C create create() [static]
create()
create() INSERT
R index
show
get() [static]
getAll() [static]
find() SELECT
U save save()
update()
update() UPDATE
D remove remove() 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

通過這種方式, 同樣的代碼就能夠支持多平臺了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章