日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

t3code:命令行代碼生成器,用模板引擎終結(jié)重復(fù)勞動

t3code:命令行代碼生成器,用模板引擎終結(jié)重復(fù)勞動 你有沒有算過自己一天要復(fù)制粘貼多少次代碼反正我算過最多的一天光是“新開一個模塊”就干了六遍。后來我決定不再忍這種重復(fù)勞動寫了一個名字叫 t3code 的命令行小工具——它的全部目的就是讓“復(fù)制粘貼改字段”變成“寫配置一鍵生成”。t3code 是一個運(yùn)行在本地的輕量代碼生成器適合被高頻樣板代碼折磨的后端、前端和全棧開發(fā)者也適合需要統(tǒng)一團(tuán)隊規(guī)范、又不愿意引入重型低代碼平臺的技術(shù)負(fù)責(zé)人。這篇文章把我的整個思路和踩坑過程完整拆給你看。1. 從“復(fù)制粘貼”到“一鍵生成”t3code 出現(xiàn)的理由1.1 一個每天都在發(fā)生的重復(fù)勞動場景我在做電商后端項目的時候有一個非常典型的日常操作新接一個需求比如“優(yōu)惠券模塊”需要新開一套 RESTful 接口。哪怕項目里已經(jīng)積累了各種工具類和基礎(chǔ)封裝要交出一套能跑通的代碼仍然免不了手寫這些文件數(shù)據(jù)模型定義字段、類型、默認(rèn)值、主鍵、索引一個都不能少DTO 與校驗規(guī)則請求參數(shù)的必填項、取值范圍、格式校驗Service 接口和實(shí)現(xiàn)方法簽名要齊業(yè)務(wù)邏輯可以先留空但結(jié)構(gòu)不能漏數(shù)據(jù)訪問層標(biāo)準(zhǔn) CRUD 方法按主鍵查詢、分頁查詢、軟刪除路由注冊把新模塊掛到統(tǒng)一路由上Mock 數(shù)據(jù)給前端聯(lián)調(diào)時用字段格式要和 DTO 完全對齊單元測試骨架至少要覆蓋正常路徑和參數(shù)校驗失敗路徑這套東西加起來通常在 200 到 300 行之間。手寫的話二十分鐘起步復(fù)制粘貼再全局替換字段名最快也要十分鐘。真正的風(fēng)險在“全局替換”這一步——經(jīng)常把不該替換的地方也替換了。比如模塊名和字段名撞車替換完一編譯報錯信息里全是莫名其妙的名字。我把這種勞動稱為“沒有技術(shù)含量但極其消耗注意力”的機(jī)械操作。它不產(chǎn)生任何新的設(shè)計思路只是一遍又一遍地把同樣的骨架謄到新的文件里。做的次數(shù)多了人會本能地開始偷懶少寫一個校驗規(guī)則、漏掉一個字段的 Mock 值這些錯誤一旦進(jìn)了測試環(huán)境排查成本就是按小時算的。1.2 為什么現(xiàn)成的腳手架和低代碼工具都覆蓋不了在動手寫 t3code 之前我先做了一輪工具調(diào)研。結(jié)論是市面上已有的東西每一類都只解決了一部分問題。腳手架工具比如 create-xxx-app 這類只管項目初始化那一錘子買賣。項目跑起來之后新增一個模塊它并不負(fù)責(zé)。你不可能為了每次新增模塊都重新初始化一次項目。IDE 代碼片段VS Code Snippets處理單文件的小片段很順手但它本質(zhì)上只是一個“帶變量的文本插入器”。生成一個跨七個文件的模塊片段就無能為力了。而且團(tuán)隊里每個人的片段庫各自維護(hù)規(guī)范根本統(tǒng)一不起來。低代碼平臺是另一個極端。它確實(shí)能生成代碼但生成物往往是一個封閉系統(tǒng)里的產(chǎn)物沒有嵌入普通命令行工作流的能力。開發(fā)者想在 Git 提交前用 diff 審查生成結(jié)果在這種平臺里基本做不到。還有一類接近的輪子比如 Plop、Hygen 這樣的代碼生成框架。它們本身很靈活但靈活的另一面是你得先學(xué)一套它的規(guī)則再寫一堆膠水代碼才能把它改造成符合自己團(tuán)隊規(guī)范的生成器。我不想為了“省事”先引入一層的復(fù)雜度。我需要的是一個開箱就能干活、規(guī)則完全由自己掌控的東西。1.3 t3code 的核心定位在項目初始化之后持續(xù)工作經(jīng)過調(diào)研我把 t3code 的定位收斂成一句話在項目初始化之后持續(xù)工作的模塊級代碼生成器。它不管項目怎么初始化只管你后續(xù)每個新增模塊怎么高效落地。三個原則從第一天就定死了配置驅(qū)動生成什么、不生成什么、生成到哪里都由配置文件決定不寫死在代碼里模板與代碼分離所有生成規(guī)則用模板文件表達(dá)業(yè)務(wù)團(tuán)隊可以只改模板不改工具邏輯生成結(jié)果可審查生成動作默認(rèn)不直接覆蓋已有文件先落地為新文件由開發(fā)者過一遍 Git diff 再確認(rèn)合入這三條原則在后期救了我很多次。尤其是第三條直接決定了 t3code 在團(tuán)隊里能不能被信任。一個一執(zhí)行就悄悄改一堆文件的工具沒人敢用。提示如果你也想做類似的工具第一條原則務(wù)必堅持。模板和邏輯一旦耦合后面每加一類新代碼都要動主程序維護(hù)成本會迅速失控。2. t3code 的四大核心能力拆解2.1 模塊級代碼生成一次生成七類文件模塊級生成是 t3code 最核心的能力。它的工作方式很簡單你給我一個配置文件我按照模板規(guī)則一次性把一個模塊需要的所有文件全部生成出來。我用訂單模塊舉個例子。配置文件里聲明了模塊名、字段列表和要啟用的模板類型執(zhí)行一次生成命令后得到的文件樹是這樣的src/modules/order/ ├── order.model.ts ├── order.dto.ts ├── order.service.ts ├── order.repository.ts ├── order.route.ts ├── order.mock.ts └── order.test.ts這七個文件不是各寫各的它們之間是有依賴關(guān)系的。DTO 里的字段必須從配置里的 fields 列表來Mock 數(shù)據(jù)的字段又必須和 DTO 對齊路由注冊要引用 Service 里定義的方法名。手寫的時候最煩的就是維護(hù)這種跨文件的一致性生成器天然不存在這個問題——因為所有文件都渲染自同一條配置數(shù)據(jù)。2.2 代碼片段管理不生成模塊時也有用不是每次都需要生成一個完整模塊。有時候我只是想在某個文件里插入一個“帶分頁的查詢方法”或者一個“統(tǒng)一格式的校驗函數(shù)”。這種單點(diǎn)插入需求IDE 片段能做但團(tuán)隊規(guī)范沒法統(tǒng)一。t3code 里我做了一個輕量片段管理功能t3code snippet:gen paginated-query --model Order --pageSize 20它會基于內(nèi)置的查詢模板把Order和20填入對應(yīng)位置輸出一段排好版的分頁查詢函數(shù)直接復(fù)制到當(dāng)前光標(biāo)處。片段支持變量插值、多光標(biāo)占位和默認(rèn)值模板文件同樣放在倉庫里跟著走。這樣一來團(tuán)隊所有人敲命令拿到的都是同一份規(guī)范代碼不會再出現(xiàn)“你的縮進(jìn)兩個空格他的縮進(jìn)四個空格”這種問題。2.3 批量替換式生成存量項目的改造利器模塊級生成解決的是“從頭寫一個新模塊”批量替換解決的是“給一堆老文件做統(tǒng)一改造”。舉個例子新規(guī)范要求所有 API 返回格式統(tǒng)一變成{ code, message, data }老項目里有幾十個接口文件需要改。手工改一遍枯燥不說還容易漏。t3code 的批量模式是這樣工作的你指定一個匹配規(guī)則比如src/apis/**/*.ts再指定一個統(tǒng)一的響應(yīng)模板它會遍歷所有匹配文件按照模板重寫響應(yīng)部分然后生成一份完整的修改前后 diff 報告。開發(fā)者只需要 review diff確認(rèn)無誤后一鍵應(yīng)用。這個能力我強(qiáng)烈建議做它比你想象中更頻繁地被用到。任何一次“全局規(guī)范調(diào)整”都可以用這種方式安全落地。2.4 配置驅(qū)動的規(guī)則校驗生成之后還要過一遍質(zhì)量生成器最容易犯的毛病是生成了但生成的東西不符合既有規(guī)范。比如類名沒用大駝峰DTO 里漏了必填字段注解接口路徑和模塊名不一致。這些問題如果靠人肉眼 review等于沒省時間。所以 t3code 在生成流程末端內(nèi)置了一個規(guī)則校驗環(huán)節(jié)。生成完成后自動檢查類名、方法名是否符合配置里聲明的命名規(guī)范必填字段在 DTO 和 Mock 數(shù)據(jù)里是否一致出現(xiàn)路由路徑是否與模塊名對應(yīng)依賴版本是否與項目當(dāng)前使用的版本匹配校驗不通過時命令會中止并列出具體問題不會把半成品悄悄寫進(jìn)磁盤。這個設(shè)計源自一次真實(shí)教訓(xùn)我最早版本的模板里漏了一個字段生成的接口比設(shè)計方案少了一個參數(shù)線上排查了兩個小時才定位到是模板問題。有了規(guī)則校驗之后這類問題在生成那一刻就會被攔住。下表匯總了四個能力的使用場景和典型命令方便你按需查閱能力典型場景命令示例核心價值模塊級生成新模塊全套代碼落地t3code generate order.yaml跨文件一致性有保障片段管理高頻代碼塊插入t3code snippet:gen paginated-query統(tǒng)一單點(diǎn)插入規(guī)范批量替換存量文件統(tǒng)一改造t3code batch:apply unified-response.yaml大規(guī)模重構(gòu)安全可控規(guī)則校驗生成物自動質(zhì)量檢查生成流程內(nèi)置自動執(zhí)行把質(zhì)量問題攔截在提交前3. 把 t3code 從想法變成可用 CLI技術(shù)路線與關(guān)鍵實(shí)現(xiàn)3.1 技術(shù)選型的心路歷程t3code 的技術(shù)選型我?guī)缀鯖]有猶豫Node.js TypeScript Commander.js Handlebars。原因有三個。第一團(tuán)隊的技術(shù)棧本來就是 TypeScript 全棧。工具和業(yè)務(wù)代碼共用一套類型系統(tǒng)配置文件里的類型提示可以直接從編譯期拿到不需要額外維護(hù)一份 schema 文檔。第二Handlebars 的模板語法足夠溫和。它是“邏輯少”的模板引擎里面只有{{#each}}、{{#if}}這類基礎(chǔ)指令沒有復(fù)雜的表達(dá)式語法。這意味著業(yè)務(wù)團(tuán)隊的同學(xué)看半小時文檔就能自己改模板不需要成為模板引擎專家。第三npm 包的分發(fā)鏈路對內(nèi)部工具太友好了。一個npm i -g t3code就能裝好團(tuán)隊用私有 registry 的話版本更新也是標(biāo)準(zhǔn)的 npm 流程。也有人問過我為什么不選 Go。Go 編譯成單個二進(jìn)制文件確實(shí)分發(fā)方便但在模板渲染這個場景里Node 生態(tài)的字符串處理能力和 helper 擴(kuò)展性要靈活得多。我當(dāng)時判斷工具會被高頻迭代開發(fā)效率比分發(fā)便利性更重要。3.2 項目結(jié)構(gòu)與核心數(shù)據(jù)流工具的核心數(shù)據(jù)流是不復(fù)雜但每一步都要穩(wěn)讀取配置文件 → 解析生成任務(wù) → 加載模板目錄 → 渲染模板數(shù)據(jù) → 寫入目標(biāo)目錄 → 執(zhí)行規(guī)則校驗 → 輸出差異報告這個流程里的每一步都由獨(dú)立的模塊負(fù)責(zé)目錄結(jié)構(gòu)如下t3code/ ├── bin/ │ └── t3code.js # 可執(zhí)行入口 ├── src/ │ ├── cli/ # 命令解析層 │ ├── config/ # 配置讀取與校驗 │ ├── generator/ # 生成引擎核心 │ ├── templates/ # 內(nèi)置模板文件 │ ├── validators/ # 生成后規(guī)則校驗 │ └── utils/ # 路徑、命名轉(zhuǎn)換等工具 ├── package.json └── tsconfig.json我在設(shè)計的時候刻意保持了模塊間單向依賴cli 調(diào) configconfig 校驗后交給 generatorgenerator 用 utils 的命名工具轉(zhuǎn)換字段最后把結(jié)果送到 validators 檢查。誰都不允許跨層調(diào)用。這個約束在后來加插件功能的時候省了很多事。3.3 模板引擎與幾個關(guān)鍵處理細(xì)節(jié)Handlebars 本身很簡單真正需要花心思的是三個細(xì)節(jié)。第一個是自定義 helper。模板里需要把配置里的product_name同時渲染成productName、ProductName、product-name這三種形態(tài)分別對應(yīng)變量名、類名和文件名。我自定義了三個 helperHandlebars.registerHelper(camelCase, (str) str.replace(/-(\w)/g, (_, c) c.toUpperCase()) ); Handlebars.registerHelper(pascalCase, (str) { const camel str.replace(/-(\w)/g, (_, c) c.toUpperCase()); return camel.charAt(0).toUpperCase() camel.slice(1); });第二個是縮進(jìn)與空白的控制。生成的代碼如果格式一團(tuán)糟后面還得花功夫格式化。Handlebars 默認(rèn)會保留模板里的空白字符但{{#each}}區(qū)塊的縮進(jìn)經(jīng)常出現(xiàn)錯位。我用{{~和~}}控制空白讓渲染結(jié)果直接符合 Prettier 的格式標(biāo)準(zhǔn)生成完不需要二次格式化。第三個是敏感字符處理。目標(biāo)語言里如果本身帶有{{ }}這種符號比如 Vue 組件的插值表達(dá)式會和 Handlebars 的定界符撞車。這個坑比較深我在第 5 章單獨(dú)展開講。3.4 配置文件 Schema 的設(shè)計思路配置文件是 t3code 的靈魂。一個完整的生成任務(wù)配置長這樣moduleName: order description: 訂單模塊 outputDir: src/modules/order templates: - model - dto - service - repository - route - mock - test fields: - name: id type: number primary: true - name: userId type: number required: true - name: totalAmount type: decimal required: true - name: status type: enum values: [pending, paid, cancelled] rules: naming: camelCase validateRequired: true生成引擎消費(fèi)配置的方式很直接moduleName決定模塊目錄和文件前綴fields列表被每一個模板復(fù)用templates數(shù)組決定這次任務(wù)要渲染哪些文件rules決定校驗開關(guān)。字段類型定義為number、decimal、enum這些通用類型不同的目標(biāo)語言再由模板層各自映射成具體的 TypeScript 類型或 Java 類型。這樣設(shè)計的好處是配置和數(shù)據(jù)是語言無關(guān)的模板才是語言相關(guān)的。未來要給 Java 項目生成代碼只需要加一套 Java 模板目錄配置文件完全不用改。4. 在真實(shí)項目中跑通一個完整的生成任務(wù)訂單模塊全流程4.1 安裝與初始化t3code 的安裝和絕大多數(shù) npm 命令行工具沒有區(qū)別npm i -g t3code t3code initt3code init會在當(dāng)前項目根目錄生成一個t3code.config.json里面是默認(rèn)的全局配置包括模板目錄位置、默認(rèn)輸出目錄、命名規(guī)范等。我建議把生成的配置文件直接提交進(jìn) Git 倉庫這樣團(tuán)隊所有人都默認(rèn)使用同一套配置基線。初始化之后可以先用t3code doctor檢查一下環(huán)境它會告訴你有哪幾個模板文件缺失、配置項是否合法。4.2 編寫訂單模塊的生成任務(wù)配置接下來我們用訂單模塊走一遍完整流程。新建一個order.yaml寫入第 3.4 節(jié)那份配置。幾個字段的實(shí)際作用我再說細(xì)一點(diǎn)outputDir決定文件落到哪里。這里寫src/modules/order執(zhí)行時如果目錄不存在t3code 會自動創(chuàng)建templates列表里的每一項都對應(yīng)templates目錄下的一個.hbs文件多一個就多生成一個文件少一個就少生成一個fields是整個任務(wù)的數(shù)據(jù)源。status字段聲明為枚舉類型模板層會自動生成對應(yīng)的枚舉定義不會出現(xiàn)“字符串隨便填”這種安全隱患有一點(diǎn)要提醒配置文件里的注釋很重要。團(tuán)隊里其他人看到這份配置時需要理解每個字段的語義YAML 格式天然支持注釋這也是我讓生成任務(wù)用 YAML 而不是 JSON 的原因。JSON 給人看不夠友好注釋都沒法寫。4.3 執(zhí)行生成與結(jié)果審查執(zhí)行生成命令t3code generate order.yaml正常輸出的日志大致是這樣? 配置校驗通過 ? 模板加載 7/7 ? 生成 order.model.ts ? 生成 order.dto.ts ? 生成 order.service.ts ? 生成 order.repository.ts ? 生成 order.route.ts ? 生成 order.mock.ts ? 生成 order.test.ts ? 規(guī)則校驗通過 ? 檢測到 7 個新文件請審查后再合入整個執(zhí)行過程在一秒以內(nèi)。生成的一等一關(guān)鍵文件order.dto.ts的內(nèi)容長這樣export class CreateOrderDto { userId: number; totalAmount: number; status: OrderStatus; constructor(data: PartialCreateOrderDto) { Object.assign(this, data); } }注意模板默認(rèn)生成了構(gòu)造函數(shù)里對Partial的處理。這是我在實(shí)際項目中總結(jié)出來的接口接收前端參數(shù)時總會有部分字段缺省的情況DTO 不應(yīng)該在構(gòu)造階段就強(qiáng)制所有字段必填真正的必填校驗交給規(guī)則層處理。生成完成后我的習(xí)慣動作是立刻執(zhí)行g(shù)it diff --stat看一下整體變更規(guī)模再隨機(jī)打開兩三個文件抽查內(nèi)容是否符合預(yù)期。這一步建議不要省生成器不是萬能的但它把“通讀兩百行代碼”變成了“重點(diǎn)抽查三五個文件”審查成本已經(jīng)不是一個量級了。4.4 把 t3code 生成流程接入日常開發(fā)工具做出來不用等于白做。我在項目里做了兩個動作讓生成流程和日常工作無縫銜接。第一個是在package.json里加腳本{ scripts: { gen:order: t3code generate order.yaml } }有人覺得加腳本多此一舉但實(shí)際體驗區(qū)別很大。團(tuán)隊同學(xué)不關(guān)心 t3code 的具體命令語法他們只需要記得“生成訂單模塊跑npm run gen:order”就夠了。第二個是在 shell 里配了一個別名方便日??焖俨僮鱝lias t3gent3code generate配合 Git 工作流我的標(biāo)準(zhǔn)操作序列是寫配置、執(zhí)行生成、git diff --stat、抽查文件、提交。整個過程五分鐘內(nèi)完成比原來二十分鐘起的手工勞動快了一個量級而且出錯概率顯著下降。5. 接入 t3code 后遇到的三個坑完整排查鏈與修復(fù)方案5.1 坑一Windows 路徑分隔符引發(fā)的生成路徑錯亂現(xiàn)象團(tuán)隊里一位用 Windows 的同學(xué)反饋在 Windows 上執(zhí)行t3code generate order.yaml后生成的目錄結(jié)構(gòu)完全亂了。本應(yīng)該生成src/modules/order/order.model.ts結(jié)果變成srcmodulesorderorder.model.ts所有分隔符都沒了文件直接散落在根目錄附近。排查鏈路我先是讓同事把報錯日志發(fā)給我發(fā)現(xiàn)日志里顯示的文件路徑是src\modules\order\order.model.ts——注意這里其實(shí)用了反斜杠分隔是正常的。但真正落盤時目錄卻沒有創(chuàng)建。于是我懷疑是路徑拼接的代碼寫死了/作為分隔符在 Windows 上部分 API 能自動轉(zhuǎn)換部分不會。檢查核心的路徑處理工具函數(shù)果然發(fā)現(xiàn)了這行const filePath ${outputDir}/${moduleName}/${fileName};在 Node.js 里fs.writeFileSync遇到含反斜杠的路徑時處理行為和平臺直接相關(guān)。Windows 上如果目錄分隔符不一致或者路徑里混用了兩種分隔符極容易出現(xiàn)“目錄識別失敗、最終寫到別處”的詭異表現(xiàn)。修復(fù)把所有手寫路徑拼接全部替換為node:path模塊的join方法const path require(node:path); const filePath path.join(outputDir, moduleName, fileName);path.join會自動識別當(dāng)前平臺的分隔符Windows 上用\Linux 和 macOS 上用/。修復(fù)之后我還要補(bǔ)了一條跨平臺測試用例在 CI 的 Windows runner 上跑一遍生成流程從源頭卡住這類問題。5.2 坑二模板定界符與目標(biāo)代碼語法撞車現(xiàn)象給項目生成 Vue 組件模板時生成的.vue文件里所有{{ }}插值全部消失。比如模板里寫的是{{ user.name }}生成出來的文件里這一段直接變成空字符串。排查鏈路這個問題的現(xiàn)象非常典型。我先懷疑是不是模板文件編碼問題檢查 UTF-8 無誤后打開生成引擎的渲染日志發(fā)現(xiàn) Handlebars 把{{ user.name }}當(dāng)成自己的表達(dá)式去解析了——它找不到名為user的上下文變量于是靜默輸出空字符串。這其實(shí)是模板引擎定界符沖突的標(biāo)準(zhǔn)表現(xiàn)Handlebars 默認(rèn)使用雙大括號{{ }}作為定界符而 Vue 模板的插值表達(dá)式恰好也是雙大括號。兩邊撞車引擎優(yōu)先滿足了它自己的語法規(guī)則。修復(fù)我給 t3code 加了一個配置項支持自定義 Handlebars 定界符const handlebars require(handlebars); handlebars.compile(templateSource, { delimiters: [[[, ]]] });這樣模板文件里的邏輯控制用[[#each fields]]這種寫法而目標(biāo)語言里的{{ }}插值原樣保留。Vue 模板生成場景下這個改動是必須的否則生成出來的組件連最基本的渲染都做不到。這段經(jīng)歷給我的教訓(xùn)是代碼生成工具的模板不僅僅是“文本模板”它和模板的目標(biāo)語言之間存在一個“語法邊界”。設(shè)計階段就要提前識別目標(biāo)語言里是否有與模板引擎沖突的符號不要等生成出來一堆壞文件再去排查。5.3 坑三重復(fù)執(zhí)行的冪等性不足現(xiàn)象同一個配置文件執(zhí)行兩次第二次報“文件已存在”直接中斷換成另一個配置文件執(zhí)行兩次第二次生成的 DTO 文件和第一次不一致多了一個莫名其妙的字段。排查鏈路第一個現(xiàn)象很好理解某些文件采用了“檢測到已存在就報錯”的策略防止覆蓋人工修改過的代碼。第二個現(xiàn)象說明不同的文件模板對“已存在”的處理不一致DTO 模板用的是“直接覆蓋”Mock 數(shù)據(jù)模板用的是“跳過”兩套邏輯混在一起行為就不可預(yù)測。更隱蔽的問題是同一次生成任務(wù)里部分文件覆蓋了部分文件跳過了結(jié)果造成文件之間的字段不一致這種不一致在上線前很難被發(fā)現(xiàn)。修復(fù)我把寫入策略明確抽象成四種并且強(qiáng)制每個模板都要聲明自己的策略策略行為適用場景skip文件已存在則跳過Mock 數(shù)據(jù)、測試用例overwrite直接覆蓋DTO、純生成文件backup-overwrite覆蓋前生成.bak備份配置文件、路由文件error存在則報錯中斷數(shù)據(jù)模型、需要人工設(shè)計的關(guān)鍵文件同時給生成任務(wù)加了一個文件指紋機(jī)制每次生成完成后記錄一份 manifest記錄文件名和內(nèi)容 hash。第二次執(zhí)行時先比對 hash如果內(nèi)容沒有變化就跳過如果發(fā)生了變化再按照模板聲明的策略處理。這套機(jī)制上線之后“重復(fù)執(zhí)行行為不一致”的問題徹底消失。排查這個坑給我最大的感受是生成器一定要具備“可重復(fù)執(zhí)行”這個基本素養(yǎng)。如果執(zhí)行兩次結(jié)果不同那這個工具在自動化流程里就沒法用因為你永遠(yuǎn)不知道上一次執(zhí)行留下了什么狀態(tài)。6. 從個人工具到團(tuán)隊基建t3code 的插件化與 CI 配套6.1 插件化設(shè)計讓每個團(tuán)隊維護(hù)自己的生成器工具在自己手里跑得再順也只是一個個人工具。真正讓它變成團(tuán)隊基建的是插件化。t3code 的插件接口設(shè)計得很克制export interface T3Generator { name: string; describe(): string; generate(config: T3Config): PromiseGenResult; }核心做兩件事注冊插件、按名字調(diào)度。插件自己負(fù)責(zé)模板加載、字段轉(zhuǎn)換和結(jié)果輸出。這樣一來前端團(tuán)隊可以維護(hù)一套 Vue 模板插件后端團(tuán)隊維護(hù)一套 Java 模板插件互不干擾。插件發(fā)布走 npm 私有 registry安裝方式和普通依賴完全一致。核心包里不內(nèi)置任何業(yè)務(wù)模板只保留最基礎(chǔ)的調(diào)度能力和規(guī)則校驗框架。這個設(shè)計讓 t3code 從一個“我做給自己用的工具”長成了一個“團(tuán)隊可以共同演進(jìn)的基礎(chǔ)設(shè)施”。6.2 接入 CI模板改動必須經(jīng)過生成回歸模板文件也是代碼只要改動就會引入風(fēng)險。我見過最痛的案例是一位同事“優(yōu)化”了模板里的縮進(jìn)結(jié)果所有生成文件都多了一行空行測試環(huán)境直接編譯告警。為了避免這類問題我在 CI 里加了一個生成回歸任務(wù)。流程很簡單每次模板倉庫有變更CI 自動跑一遍全量生成任務(wù)把生成結(jié)果和上一次的基線快照做對比。有差異就列出 diff交給維護(hù)者確認(rèn)“這是預(yù)期的改動”還是“模板改壞了”。這個配套對團(tuán)隊協(xié)作的意義很大。模板允許任何人改但改動的影響被限制在“先生成、再對比、后合入”這個可控范圍內(nèi)。誰也不會因為一次模板改動悄無聲息地破壞兩百個生成文件。6.3 規(guī)則驅(qū)動與 AI 生成互補(bǔ)的保守探索最后聊一個我目前還在嘗試的方向把 t3code 的規(guī)則引擎和 AI 代碼生成結(jié)合起來?,F(xiàn)在各類 AI 編程助手已經(jīng)很成熟了但直接讓 AI 一口氣生成一個完整模塊風(fēng)險仍然偏高。它會寫一些看起來合理但實(shí)際有邊界問題的代碼比如枚舉取值漏了、DTO 和 Mock 字段對不上、路由方法簽名偏了。t3code 可以做一個“骨架搬運(yùn)工”規(guī)則引擎負(fù)責(zé)把模塊骨架、字段定義、跨文件一致性這些確定性的事全部做好AI 負(fù)責(zé)在骨架里填充業(yè)務(wù)注釋、補(bǔ)充邊界條件和異常處理邏輯。生成完成后t3code 的質(zhì)量校驗仍然生效AI 生成的內(nèi)容再天馬行空也必須在規(guī)則框架里落地。這個方向我還在驗證階段目前的結(jié)論是規(guī)則給下限AI 給上限兩者不是替代關(guān)系。我在實(shí)際折騰 t3code 的過程里最深的一點(diǎn)體會是生成工具的價值不在“生成”本身而在它逼你把重復(fù)勞動抽象成配置和模板的那一刻。一旦你開始梳理“這個模塊有哪些固定結(jié)構(gòu)、哪些字段會變、哪些規(guī)則絕對不能漏”你對項目本身的理解反而會更清晰。t3code 現(xiàn)在仍然在我的個人項目里持續(xù)打磨如果你也被類似的重復(fù)代碼困擾我的建議是不要一上來就想著做一個大而全的平臺先把你最常用的一套模塊生成固化下來跑通一次再慢慢加規(guī)則。工具會在這個過程中自己長出來。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲精品819| 曰韩成人免费视频| 97国产超湿| 欧美淫乱视频| 浪人综合网| 91老熟女逼| 欧美日韩欧美| 亚洲欧洲国产综合av| 二三四区精品| 思思热免费视频观看| 少妇三P| 人妻AV在线| 国产精品福利资源在线尤物| 最新国内自拍av免费| 亚洲 欧美 精品专区 极品| 99热最新网址| 91观看 国产白丝| 日本久久网| 四虎精品一区| 伊人天堂在线| 蜜臀视频网站| 人人超碰在线观看黄| 97在线免费| 国产这里只有精品| 国产精品人妻无码久久久老鸭窝| 日韩欧美女优电影| 秋霞Av理论一级在线| 国产黄a三级三级三级av在线看| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 天天透伊人| 91精品人妻一品二品三品| www久久99| 殴美性天天| 五月丁香婷婷综合网| 超碰在线免费一区二区三区| 九九九综合精品| 日本1区2区不卡视频| 黄日韩| 午夜福利无毒不卡| 亚洲。天堂。日本在线观看| 91女人的网站| 欧美劲爆视频一区二区| 边做饭边操逼逼| 久久999久| 九九黄色视频在线观看| 亚洲网站一区二区在线| 东北女人| 亚洲激情网| 热99这里有精品综合久久 | 国产一区二区免费福利片| 亚洲美女色图| 高清国产av无码| 亚洲Av诱惑| 人妻美腿丝袜制服诱惑综合天堂-| 操操操五月天婷婷丁香影院| 久久一本大香蕉| 国产精品成人无码av| 国产路线专区| 五月开心久久AV官网| 国产成人久久久精品免费AV| 最新国产精品| 欧美黑人168页欧美黑人167| 日本人体九九九九九九| 黄片免费久久久久久久| 91福利网在线观看| 色老大| 日韩情色AV| 五月丁香六月婷| 超碰97人人cao| 日韩中文字幕精品一二三事国产精品| 少妇二级| 日韩不卡a级视频专区| 999久久久国产精品| 91五月天| 操人妻丝袜高跟| 中日韩熟女| 亚洲国产精品无石码久久| 中文无线日韩一区| 日日夜夜青青草母狗| 天天日少妇逼AV| 乱伦Av网| 亚洲字幕一区二区| av在线播放国产一区| 国产自偷| 夜夜春夜夜操| 亚洲欧美伦综合| 日韩精品三级片长长久久| 精爱久久| 久久色人体| 亚洲一欧洲中文字幕在线| 96精品久久| 五月天AV资源| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 操逼操逼操| 免费99精品国产自在在线| 日韩内射视频| 麻豆区99999| 久久婷婷亚洲| 国产树林里野战在线看| 日韩一级片在线看| 伊人AAA| 国产AV无码AV| 精品一区二区成人动漫| 日韩人妻免费精品| 26uuu国产日韩综合在线观看| 国产婷婷综合在线观看| 亚川综合视频| 超碰国产精品无码| 国产精品免费日韩| 亚洲 一区二区 自拍| 在线国产福利网址导航| 久久精品国产亚洲AV无码做| 日韩人妻一二三区视频| 日本网色| 天天弄天天操| 日本一二三高清| 亚洲情色一区综合| 中日韩久久人妻一区二区| 啊啊啊不要啊啊受不了了视频在线| 一二三啪啪专区| 日韩有码一区三区| 欧亚乱色熟一区二区三四区| 天天超级碰碰碰| 超碰欧美在线欧美| 欧美狠狠狠| 国产传媒日韩| 日韩字幕一区| 大香蕉久| 精品一区二区啪啪啪| 色女女女导航| 97欧美久久久久久久| 青青操视频在线| 久9综合在线| 91女日逼| 国产av强奸美女| 激情综合网五月婷婷五月天| 精品成人av一区二区三区在线| AAA久久| 精品久久視頻在线| 刺激精品视频| 精品无吗m| 久久国产成人精品国产成人亚洲| 无码区蜜乳| 欧美视频一区二区在线| 少妇国产不卡| 亚洲久草AV色图| 神马麻豆福利院| 99亚洲精品| 欧美视频一区二区在线| 在线97在线| 日产123区精品免费观看| 亚洲欧美清纯| 404操逼福利视频| 一区二区偷拍拍视频| 91网亚洲| 久久一区二区蜜桃| 婷婷五月天丁香| 无码人妻丰满熟妇奶水区毛片| 天天激色| 国产亚洲精品美女久久久| 强奸乱亚洲| 亚洲黄日韩无码专区| 伊人欧美大香蕉视频| 亚洲加勒比| 国产操操日韩三级黄| 天天拍天天操| 999九九精品| 国产女同在线观看视频| 亚洲av淫乱| 啪啪视频mP4| 18禁久久| 亚洲欧美日韩精品久| 成人影 天天操 亚洲| 欧成人在线| 国产强奸乱伦xd| 欧美一区91大爱| 色69大色97香蕉| 天天射天天| 五月丁香综合激情| 国产九九九九九九| 日韩美女久久一区二区三区| 另类图片综合| 可乐操在线| www.av在线视频| 欧美久久九九| 啊啊啊慢点| 人人操人人搞人人草| 亭亭丁香激情| 上特色A在线| 国产人妻天天干精品| 97超碰天天爱天天爱| 欧美国产成人在线| 激情露脸爱| 国产精品无码在线| 亚洲高清少妇| 最新av网站在线观看| 欧美另类色图片| 青娱乐 青青青操 日逼| www.99热| 亚洲av青草久久一区二区| www国产天美久久久| 婷婷15月天青娱乐| 最好看的中文字幕在线2018| 日本东京热大香蕉a片| 1240青青草一区二区三区视频天爱| 美国aaaaa一级黄片| 亚洲十八禁止| 国产剧情AV不卡在线观看| 欧洲与亚洲欧美精品中文字幕| 欧美亚洲自拍另类人妻| 久操 高清| 亚洲国产成人精品999| 成 人 影视 一区 二区 三区 四区| 欧美写真视频一区| 亚洲欧美性生活| 久久精品国产精品一区| 在线天堂999| 日韩成人精品| 亚洲青青草| 日韩成人大片一区二区| 日韩久射综合| 91熟女熟妇视频网站| 先锋女优在线观看视频| 丝袜天堂| 亚洲一卡2卡3卡4卡乱码网站| 成人精品视频| 女人爽到高潮潮喷18禁网站 | 少妇3P性爱自拍| 亚洲性猛| 丝袜大香蕉| 人妻少妇精品久久久久久久| 免费1级a做爰片观看| 欧美另类精品xxxx| 国产 丝袜 欧美中文 另类| 国产精彩女在线观看视频| 精品区国产区一区二区三区| 精品免费一区| 欧美日本不卡| 欧美色图天堂在线| 综合久久久久久久久91| 操老熟女AV| 五月激情小说| 18啪啪手机免费性爱| 久久骚| 色优久久| 中文字幕亚洲永久精品| 俞拍久久国应视频| 久久久久久久久久久久黄色| 国产女人91精品嗷嗷嗷嗷| 免费视频97| 午夜精品久久久久| 丁香婷婷大香蕉| 影音先锋新男人| 成人情色综合网| 久久免费中文字幕在线观看| 日本人人操人人操| 日本黄大片在线观看视频| 色悠久久久av| 久久久久国产| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | av在线播放国产一区| 久久大香蕉97| 欧美男人亚洲天堂| 欧美精品人妻视频| 红杏大香蕉| 五月丁香拍拍激情综合三级| 强奸乱伦AV一天堂网| 抽插亚洲无码| 日韩精品国模| 亚洲人精品久久久| 欧美日本天堂| 97超碰国产亚洲精品资源| 免费精品人妻一区二区三| 人妻三级在线中文字幕| 精品免费囯产一区二区三区| 亚洲好色人妻| 欧美激情 一区| 校园春色中文字幕AV| 78p欧美| 丁香九月婷婷| 亚洲色图超碰在线| a久久| 婷色五月| 在线 制服丝袜中出 人妻| 亚欧国产无码精品在线| 国产视频不卡在线观看| www.av在线视频| 亚洲欧洲成人在线电影| 97亚洲综合影院| 亚洲精品熟妇1区2区3区。| 97精品中文字幕| 久久99手机免费视频| 大香蕉AV丝袜| 亚洲天堂性爱| 国产传媒一区日韩| 东北老女人的激情视频| 色爱欲亚洲| 久久手机好看网站| 欧州色图区| 精品久久久无码| www.狠狠干.coom | 亚洲电影中字一区二区| 精品四五区| 日韩精品 视频一区二区| 天天舔天天 | 精品区国产区一区二区三区| 十八岁啪啪视频免费看| 国产激情在线观看| 麻豆国产尤物AV| 精品国产一区二区三区av在线资源| 丁香五月影院| 亚洲欧洲小说图片视频| 亚洲中文人妻色| 99re不伦| 国产精品一区二区麻豆| 男人午夜天堂| 欧美日韩免费性爱| 日韩激情啪啪| 色99在线| 国产天天骚| 91精品丝袜久久久久久无码人妻| 久久伦理视频久久大香蕉视频| 久污| 美女91AV| 懂色中文一区二区三区| 日韩不卡av一二三| 亚洲不卡不卡中文字幕不卡| 欧美在线 亚洲| 久久线上视频免费看| 天天综合网日韩| 99国产在线 精品 视频| 91九色在线| 久久人妻四季| 丰满人妻一区二区中文| 玖玖久久久| 精品日韩人妻视频| 国模少妇一区二区三区| 国产91美女高潮| 青青欧洲黑| 花花AV导航| 少妇啪啪自拍| 色五月婷婷麻豆在| 日韩美女高潮喷水视频| 天天干人人乐| 最好看的中文字幕在线2018| 成人综合色网| 啊啊啊啊啊好舒服视频| 欧美日韩97| 亚洲天堂人妻熟妇视频| 夜夜操天天肏| 天天综合网在线观看| 久草免费福利在线播放| 97亚洲国产影视| 人人操人人射人人干| 久9精品| 日本熟妇人妻中出视频| 久草色悠悠在线视频| 日韩欧美~中文字| yaouchengrenav| 91狠狠色丁香婷婷综合久久精品| 最新精品久久蜜桃| 欧美97爱| 婷婷五月天伊人| 日韩精品9区| 国产精品久久久久久亚洲色欲| 国产自偷自拍一区| 超碰视97中文| 欧美午夜视频免费观看| 91xingse| 天天日天天干少妇日| 亚洲欧美一区二区三区一猛片| 久久精品亚洲东京热色播| 97欧美综合网| 婷婷伊人网| 久久久久久久久久久久久久久久9| 精品少妇999| 色一情一乱一乱一区91Av| 久久亚码| 无码一区二区精品视频久久久春药| 性站| 成人久久久| 激情五月婷婷| 久夜操| 精品超碰国产| 久久成人东京热人妻| 日本免费专区| 激情文学亚洲| 先锋精品av色鲁| www久久久| 日韩欧美蜜桃精品久久中文字幕久久| A一区片| 日韩啪啪啪啪啪| 国产2.3.4区| 国产精品岛国片在线观看| 夜夜爽爽夜夜精品视频| 国产一在线观看| 国产盗摄美女如厕大神作品在线观看| 成人五月天丁香激情综合| 欧美性天天影视| …亚洲黄色厕厕女女在线播…| 99久久网站| 97综合久第一页| 国语对白在线播放视频| 欧美一区二区| 久久国产精品一级二级三级| 热99这里有精品综合久久| 久久五月份| 精…码一二三区| 亚洲色图激情小说| 国产精品亚洲一级av第二区| 射丝袜大香蕉| 97人人模人人爽人人| 床戏久久久av一区二区麻豆| 黑丝少妇在线观看| 国产无码精品成人| AV久日| 色综合五月天| 亚洲成人在线高清| 91热色| 99热这里只有精品8| 久久亚洲AV无码白度| 日日干夜夜操视频h| 岛国黄| 99这里只有精品| 亚洲av夫妻操穴网| 欧 美 自 拍 偷 拍| 精品乱码在线观看| 插入综合网| 大香蕉视频一二三区| 97精品网站| 青青草九九九九九| 啪啪AV导航| 97国产|免费| 成人久久无码www| 夜色AV无码手机在线影院 | 成人av动漫在线观看| 久热最新在线杭州| 超碰在线97国产| 91久热| 日韩熟女操逼| 欧日韩一二三f区| 少妇毛片久久| 色五月婷婷色| 搡老熟女免费视频 | 国产精品不卡一区二区三区av| 国产精品人妻无码久久久老鸭窝| 熟女网站最新| 盗摄 精品 另类 一区| 欧美精品成人在线播放| 天天综合中文字幕 91| 伊人网在线视频| 无码人妻一区二区一牛影视| 91人妻Pr| 国产成人欧美一区二区三区的国产| 免费操逼91| 九九探花视频在线观看| 三级AV入口| 丝袜人妻av一区二区| 中国女人内射6XXXXX| 五月天社区| 一起草在线视频| 久久久久久十| 蜜臀久久99精品久久久久久-DVD原版全| 欧洲无码一区二区| 熟女熟妇一区二区三区视频| 天天看人人操屄犊摸阴| 九九综合| 久9视频| 亚洲AV无码AV吞精久久久久| av黄图片在线观看| 91色夜| 日韩八十路老熟女| 精品九九淫乱男| 欧美三级免费伊人| 国产欧美美女免费观看视频| 色色色网站| 国产精品熟女乱伦| 入口操逼网站| aaaa黄片| 国产激情在线| 人妻乱仑一区二区三区| 久久精品国产亚洲AV片多多| 欧美成人四级在线播放| 性久久| 99在线免费公开视频| 免费国产电影一区二区| 免费少妇一区二区| 久久久久久久伊人精品| 日本1区2区不卡视频| 黄片免费视频2019| 日韩综合成人免费视频| 无码精品久久久天天影视| 人妻干天天| 在线看的av| 欧美不卡二区| 入口操逼网站| 大香蕉综合在线| 丁香五月激情婷婷| 人妻啊啊人妻啊啊| 99999精品视频| 和协无码影院| 婷婷15月天青娱乐| 女人天堂网| 日韩天天综合| 天天噜| 丰满人妻被猛烈进入中| 免费福利视频中文字幕| 97摸视频| 日韩欧美女优电影| 日韩午夜国产| 久久中出在线| 欧美91网站| 蜜臀久久99'精品久久久| 老熟乱一区二区三区四区| 日韩综合97p| 亚州综合色| 涩综合导航| 国产一区二区精品久久99| 亚洲精品aa久久伊人| 色色五月丁香| 涩爱AV在线| 成人一级二级| 试看60秒 爽| 免费福利视频中文字幕| 国产高清成人传媒影视| 精品久久久九九九孕妇| 久久日本熟女精品一区| 欧美色综合网| 亚洲h片在线免费观看| 国产成人精品日本视频| 免费看污网站| 后入式999| 一起草高清无码| 99999国产精品| 厕所偷拍在线| 天堂无码| 国语av最新自产拍在线观看| 日韩精品99999| 殴洲老熟女| 亚洲精品国产拍免费91在线| 中国操逼无码| 中文字幕一区日韩精| 无码欧美有限公司| 亚洲日本激情| 成人性交免费视屏| 亚洲人妻久久| 黄色免费网页无码| 97色爱| 大香蕉草草| 黄色AAAAA欧美| 久久久久成人蜜桃精品| 丰满熟女人妻一区二区三五十一路| 天天日夜夜| 青青草天天亲夜夜操网| 欧美综合自拍成人自拍第二十页| 91艹| 小日子操bb在线看| 日韩欧美麻豆大片| 欧美日韩亚洲天堂| 999岛国大片| 天天看高清麻豆| 欧美成年人性爱视频免费观看| 无套内射性感少妇视频| 亚洲清纯唯美| 婷婷激情五月天小说网| 午夜毛片高清免费不卡| 在线有码中文字幕| 欧美日韩理论一区| 成人免费性爱视视| 校园春色之综合网| 粉嫩av一区二区三区天美传媒| 亚洲乱伦图片视频| 久久一二三四不卡| 桃花色综合影院| 97干日韩| 日本操逼视频免费| 天堂av2019| 国产9区| 丰满少妇一区二区三区专区| 日本久久女同性恋视频| 日韩人妻资源网| 好吊色综合| 亚洲成人碰碰| 亚洲中文字幕在现观看| 久操高青| 中文字幕日韩专区精品系列| 午夜精品久久久99| av在线播放国产一区| 2019AV天堂| 亚洲色图尤物视频| 天天综合网AV91| 久久91精品国产9丨久久分亭| 成人一区二区三区四区| 久久夜黄色无码A级大片| 日产123区精品免费观看| 成人免费在线网站| 午夜啊啊| 日韩97超碰中文字幕| 日本操逼无码| 久久久久久久久久久久黄色| 成人乱人伦一区二区| 国产乱码久久久久久| 国产精点久久久成人| 成人青青草原伊人| 啪啪91| 樱花蜜乳av| 欧美女同在线| 又大又白奶子| 日本一区视频在线观看| 日韩av电影网站| 婷婷丁香六月| 一个色导综合| 中文字幕一品色图| 6080yy午夜理论三级一区二区三区无码| 亚洲啪啪综合?v一区综合精品区| 加勒比AV网| 强奸乱伦资源| 免费操逼91| 骚女高跟AV在线| 翔田千里av一区二区三区| 欧美高清第一页| 色综和网| 99欧美| 国产精品视频自拍在线| 久久久九| 亚州色站 日韩电影| 最近2019中文字幕国语免费版| 91美女片在线| 成人精品一区二区三区| 六月婷婷综合| 成人麻豆av电影网站| 欧美92| baiduhicn.com。| 深爱五月天| 日本不卡高清视频| 超碰91在线| 性九九九九九九| 暖暖精品二区三区观看| 久久婷色| 美国一区二区三区视频| 亚洲欧美电影| 久久精品无码熟妇一区二区三区视频导航| 欧美日韩国第一区| 丁香五月激情婷婷| 一,爱啪啪,在线免费视频| 91夜色| 97色欧洲| 超碰免费欧美7| 五月天春色激情网| 可以看的av| 欧美黄片欧美黄片xxx| 欧美福利视频啊啊啊啊| 天天射日日干| 亚洲色图日韩丝袜制服一区二区五月在线| 久久水蜜臀亚洲AV无码精品| 精品久久久无码| 中文字幕 国产 精品| 午夜一区二区三区国产| 91免费看一区二区三区 | 久久av一级av少妇av高潮| 中文字幕三四区| 91精品操美女| www. 男人天堂成人在线| 不卡码视频| 殴美牲| 人妻嗯啊啊在线播放| 日本午夜久久电影| 久久九九国产精品| 久久综合资源一区二区| 蜜乳Av成人片网站| 伊人久久在线视频观看| 噜噜噜无码AV一级一级久久影院| 992大香蕉| 婷婷丁香成人| 91久久九九精品国产综合| 97啪啪| 国产亚洲日本| 天堂射| 亚洲综合色在线| 国产欧美一区激情交| 永久免费发布性爱网| 好看的91视频| 成人三一级一片aaa| 欧美人人曰人人操人人射射| а√天堂资源官网在线资源| 亚洲一级黄色毛片| 26uuu最新| 国产高清视频无码在线| 久热精品在线国产| 麻豆精品三区视频| 97日韩欧美亚洲| 国产女主播视频在线观看| 日韩欧美偷拍美女视频| 亚洲精品一区二区免费在线观看| 97AV在线免费观看| 精吧天堂| 啊啊啊啊啊舒服| 欧美综合网站999| 伊色久人大在线| 东京热天堂网| 久久婷婷电影网| 精品美女久久久久| 日韩性爱毛片操骚逼| 人人摸人人摸人人干| 立川理惠无码一区二区| 91美女丝袜诱惑视频| 97精品国产97久久久久久免费| 人人摸人人干| 97爱碰| 人人妻人人爽人人精品| 欧美色图片| 变态乱伦伪娘灌肠一区二区| Blackedraw视频一区二区| 免费观看啪视频| 天天综合亚在线| 97精品97| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 亚洲天天操| 成人av在线播放| 久久‘黄片视频| 国产九月婷婷| 加勒比日本在线| 丝袜美腿91| 亚洲无992tv| 国产麻豆福利av在线播放| 久99| 午夜精品久久久久久久99热影院| 人妻色情天天操| 天天草天天日| 欧美自拍偷拍免费观看| 亚洲精品819| 欧美在线视频观看一二三四区高清| 精品国产乱码久久久久久久久久毛片| 天天草天天日| 91狼人| 97久久精品亚洲中六字幕| 99最新日韩偷拍视频| 草草草视频在线免费看| 国产成人精品日本亚洲语言| 九一亚洲国产免费| 国产精品夜夜夜| 日韩熟女操逼| 99视频只有精品| 97超碰久久色| J?P?NESEHD熟女熟妇伦| 色5月婷婷| 亚州日韩97| av网站在线看| A久久| 丝袜高跟澳门91视频| 亚洲在线网站| 亚洲色图大香| 精品制服美女中文一区二区三区| 国产精品永久免费10000| 丝袜美腿诱惑亚洲欧美视频在线观看| 收看日本人日bb| 97视频在线视频| 一区二区三区一亚洲中文字幕、综合区灬| 在线中文字幕| 色999人与兽| 99热精品在线观看| 少妇干B| 天天综合网AV91| 欧美性爱日韩高清| 青草青青久久久久久国产| 亚欧操逼片在线观看 | 无码人妻精品一区二区三区九九| 色99999| 日本欧美成人片AAAA| 97欧美久久久久久久| 26uuu性| 亚洲限制级| 日本一区二区三区午夜观看| 欧美老熟另类| 亚洲国产综合图区中文字幕| 久久免费精彩视频| 综合五月天| 色综合色欲色综合色综合色综合| 国产精品3| 国产精品成人蜜臀AV在线| 嗯嗯啊啊好大好爽| 成人性爱视频在线看| 一区,二区,三区视频| 欧美日韩大黄片| 青青操少妇| ji熟女.com| 国产白丝在线| 秋霞久久亚洲精品成人| 操淫穴亚洲五月丁香| 久久直播国产| 999九九九九国产动| 亚洲一欧洲中文字幕在线 | 91亚洲黑人| 色欲av国内精品久久久久久| 国产高清1234区| 国产高清亚洲日韩一区| 激情文学欧美| 在线A日本| 女上位精品在线| 天天色综合天天操| 欧美激情高清性猛交| 亚洲熟妇自偷自拍另欧美| 超碰97中文| 91精品人妻一区二区三区蜜桃臀| 四虎午夜影院| 成人一区二区三区四区| 国产av美女被艹的乱叫| 97视频播放| 富二代亚洲精品99 | 91女色| 久久啊哟| 亚欧成人综合影院| 96一区二区三区| 欧美性天天影视| 一区不卡在线观看av| 久草线上视频免费看| 99热综合| 女人被添高潮免费视频| 女同亚洲欧美一二三区久久电影| 欧美国产婷婷久久| 91欧美偷拍| 无码黑人精品一区二区三区三| yazhouzaixian| 盗摄 精品 另类 一区| 国产精品4p在线观看| 国产AV人人夜夜澡人人爽麻豆| 日本综合久久| 欧美精品精品一区二区| 欧美中字不卡| 九九九九九九九精品视频| 7777奇米影视久久| 亚洲成人AB| 欧洲乱码一区二区| 日韩性爱小视频在线观看 | 一区麻豆 高清中文字幕| 懂色天天爱天天日天天射天天澡| 欧美综合色图网| 熟女中出视频| 丁香六月综合激情| 少妇人妻好深太紧了vr91| 夜夜夜爽www精品视频| 麻豆精品A片免费观看| 中国亚洲呦女专区| 亚洲欧洲日本精品中文a∨| 国产日韩中文字幕欧美| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 男人的天堂欧美| 精品久热| 日韩色女精品| 美女9118禁| 久久日韩精品一区二区| 长长久久免费视频| 欧美国产操逼| 一本一道波多野毛片中文在线| 在线观看一级α片刺激高潮视频| 午夜福利成人免费视频| 午夜人人操| 国产精品白丝www| 超碰在线97国产| 久久久久久久久久久久久久9999| 日韩性爱视频免费在线 | 日韩人妻无码专区| 性爱视频无打码在线观看| 天天躁日日躁狠狠躁| 舔人妻中文免费视频| 亚洲吊色| 欧美18禁91| 日本久操视频| 天天天天操| 免费精品福利在线观看| 欧美日韩精品一区二区三区高清| 91看黄片| 思思热在线视频在线| 九九九九九九九九九国产精品 | 日韩乱码av| 日韩人妻资源在线看| av资源在线播放天堂| 亚洲图片欧洲图片aⅴ| 国产最新小视频在线播放下载| 一级乱伦网站| 亚洲精品久久久久毛片A片拉屎 | 九九九综合精品| 日本三级久| 丁香六月婷| 五月婷婷综合网| 91操操| 中文字幕成人| 欧美日韩国产在线| 日本色婷婷| 日韩熟妇二区| 久久久久久国产精品| 亚洲精品色| 久久久久免费少妇| 国产91美女高潮| 青青草自拍视频在线播放| 欧美久久草熟女| 高树玛利亚无码流出| 国产午夜福利视频在线| 久操操| 成人热久久精品| 亚洲男人的天堂网| 天天综合网亚洲综合网| 热G综合热G中文| 亚洲资源一区| 日本一道在线播放高清| PMv在线观看| 免费自拍三级综合| 亚洲少妇综合在线播放| 国产AV高清AV无码| 亚洲少妇喷视频看| 日本三级人妻a人妻一在线| 麻豆福利视频导航| 久久超碰av在线| 日韩天天综合| 久久久久久9| 懂色中文一区二区三区| 日韩人妻中文视频| 狠狠综合| 激情文学 国产一二三aV| 婷婷五月天无码| 四虎精品亚洲| 中文操逼字幕| 思思热在线cao| 好看的91视频| 99999这里都精品| 九九九九九精品视频| 成人午夜高潮av猛片| 亚洲91在线播放影院| 亚洲一区中文字幕一区| 亚洲熟女国产综合另类| 色在线69堂| 国产路线专区| 超碰97欧美| 超碰97COm中文| 国产精品日本无码A片| 日韩精品1区2区中文字幕| wwwss在线观看| 欧美日韩人人早| 综合网亚洲1| 国产精品96| 秋霞无码av鲁丝片一区| 小少妇| 亚洲大色堂| 91精品导航| 操逼天美3区| 91大学精品激情戏| 秋霞一区二区三区四区五区六区七区| 蜜区区视频79 | 精品午夜福利国产一区二区在线观看| 99热这里只有精品地址| 中美日韩毛片| 4tube欧美女厕所| 久久久99免费| www.婷婷五月天| 九九热免费国产视频婷婷伊人| 中文字幕丝袜人妻| 亚洲人精品久久久| 色在线综合| 一区二区日韩欧美久久| 夜夜操中文字幕| 操逼操2| 在线99热| 色综合99999| 69天堂| 婷婷亚洲色| 国产精品在线一区二区| 操b在线观看| 五月天婷婷色色| 91久久久久久久| 少妇熟女1区2区3区| 天天综合精品| 97操综合| 国产多人在线观看视频| 天天舔天天| 久久9 9 9精品| 亚洲最新av无码成人精品区| 精品视频日日夜夜| 欧美性第1页| www.91理论| 中文字幕乱码人妻一区二区三区,99精品| 久久风骚城市| 人人看欧美性爱| AV丝袜少妇| 国产精品不卡高清在线观看| 超碰在线看| 性欧美天天| 97精品一区| 国产精品女久久久久av爽| 97se综合网| 最新亚洲黄色免费电影 | 久久99草| 操国产逼| 熟妇人妻一区二区三区| 九月伊人中文字幕| www久久久| 亚洲资源网| 亚洲国产精品有声| 中文字幕久久精视频久久大全| 午夜舔阴达高潮视频免费看| 天美国产精品| 国产精品香蕉| 久久久精品国产亚洲伊人| 中文字幕三四五区| 成人婷婷丁香| 午夜毛片亚洲精品片国产久久久| 色婷婷久久| 91精品导航| 成人欧美一区二区三区黑人一| 天天综合青苹果| 九九九九久久久| 囯产精品久久久久久久久久二区三区| 在线观看一卡二卡| 人人操人人色网| 青青草原综合久久大伊人精品| 91国产操逼视频| 色五月天AV| 国产AV激情无码久久无码| 97久久国产亚洲精品超碰热| av片在线观看免费播放| 亚洲第一页色网| 亚洲丝袜色| 欧美欧美啪啪视频| 久久久久ab| 久久久久久久久成人av解说| 亚洲精品蜜桃久久久| 亚洲麻豆精品二区三区| 26uuu最新| 色色色色色色色色综合| 天天干天天操天天干天天操| 久久久青青草| 日韩一级二级在线| 综合在线导航一区| 久操电影网| 国产黄色剧情影片麻豆免费播放| 人妻久久久久久久久久久久久久久| 91老熟女视频| 欧美亚洲美少妇一区二区| 凸凹视频在线观看| 91性片| 久久中文色图| 国产精品直播在线观看直播| 操屄日韩| 9 9无尺码天堂网| 亚洲av强奸乱伦| 日韩在线国产字幕| 鸥美极品| 国产11页| 欧美色视频在线| 熟女熟妇一区二区三四区| 超碰97玖玖爱| 久久精品美女一区| 91一区二区三区蜜桃| 久久久久九九九九九| 夜夜高潮夜夜爽| 亚洲欧美日韩夜夜| 欧美性爱第1 页| 九九av| 天天操av懂色| 亚洲砖码砖专无区2023| 亚洲精品97| 亚洲。天堂。日本在线观看| 亚洲情色五月天 | 欧美A√综合网| 啪啪一区| 多毛小伙内射老太婆| 亚洲色图一区二区三区| 中文字幕诱惑制服人妻丝袜美丝袜美| 99这里有精品视频| 国产日韩欧美亚洲精品95| 97操| 欧美在线亚洲| 欧美亚洲国产日本在线,久久精品国产| 丁香五月综合| 91久久精品中文字幕| 亚洲精品国产精品成人| 欧美丝袜91| 成人精品欧洲亚洲| 夜夜操av亚洲一区二区| 色色色欧美| 亚洲无码AV九九九| 亚洲国产av中文字幕久久| 国产传媒日韩| 欧美高清16| 人妻少妇无码| 国产成人精品午夜福利| 性生活久久久久久久久久| 夜夜爽爽爽| 大香蕉综合网| 国产一区二区啪啪视频| 18禁免费视频| 91视频伊人| 人人操人人色网| 高清无码人妻久久久一区二区三区aⅴ| 大香蕉色欲AV| 久噜噜| 97自拍一区| 国产精品午夜成人福利| 日韩人妻操B| 亚洲日本加勒比在线| 欧美色婷婷| 99热伊人| 亚洲一区日韩| 天天躁日日躁AAA片李宗瑞| 操逼操逼视频操逼| 强奸乱伦AV网站| 国产黄片精品在线| 午夜视频好爽啊| 免费av高清无码| 国内毛片热久久思思热| 欧美组图日韩亚洲中文字幕| 97超碰色| 啊啊啊在线观看| av激情亚洲五月天| 96精品久久久久久久久久| 外站AV在线| 好色综合| 老熟女乱伦片| 69XX一中文字幕人妻91| 日韩有码 一区二区三区| 中文AV制服乱伦| 女欧美一区二三区| 女欧美一区二三区| 日韩黄片视频试看| 人人看人人爰人人操| 99色热国产视频精品| 青椒国产97在线熟女| 留下AⅤ黄色片| 9久久精品| 亚洲激情久久| 精品99999久久久久久| 99天天超碰| 欧美国产成人在线| 午夜福利一区二区三区四区五区色婷婷| 久久亚洲天堂| 日韩精品亚洲一二三| 伊人网高清| 亚洲av成人精品一区| 福利社区午夜一区二区| 中国一区二区亚洲人妻| 99久久99九九99九九九| 亚洲欧洲偷拍一区| 欧美色图亚洲特色| 99re在线精品78| 色亚洲欧美| 免费观看成人www精品视频| 亚洲国产精品9999在线观看 | 久久精品—区二区三区内射| 国产精品不卡av免费在线观看| 国产亚洲深夜激情| 人人爱人人操人人性| 九九成人| 91精品成人| 久草毛片| 国产女大学生AV| 亚洲第一精品在线视频| 综合五月婷婷| 99re在线观看| 中日韩久久久免费看| 男女一进一出视频久久| 人人看欧美性爱|