簡體   English   中英

使用Telosys DSL模型為asp.net core razor頁面生成代碼(多項目解決方案)

[英]Using Telosys DSL model to generate code for asp.net core razor pages (solution with multiple projects)

我知道有一個asp.net mvc 代碼生成示例

Q1:我想知道如何在解決方案中將標准變量(似乎是 Java 特定的)映射到 .net 文件夾。

# -------------------------------------------
# STANDARD VARIABLES 
# -------------------------------------------
# --- Folders 
SRC      = src/main/java
RES      = src/main/resources
WEB      = src/main/webapp
TEST_SRC = src/test/java
TEST_RES = src/test/resources
DOC      = doc
TMP      = tmp
# --- Packages
ROOT_PKG = org.foo.bar

Q2:對於如下基於 abp.io 的解決方案中的多項目解決方案,我是否需要為每個項目創建多個帶有一組模板包的 telosys 項目? 我如何處理 Telosys 配置文件中不同項目的各種路徑我可能想構建一個 Visual Studio 擴展來提取項目文件夾和命名空間並以編程方式修改 telosys 配置文件以匹配。

下面是一個開源 asp.net 核心框架abp.io可以有前端的示例(在每個項目中):Angular、MVC Razor 頁面、Blazor、

它支持多個數據庫:Entity Framework、Dapper

它的解決方案結構是這樣的:

解決方案結構

解決方案文件的內容是這樣的(指向位於不同文件夾中的各個項目文件)

解決方案文件

** Q3:如何使用元數據注釋排除列表表單中的屬性或將其從編輯中排除**

Q1 答案:

關於“標准變量”,它們不是特定於 Java 的(僅示例適用於 Java)。 您可以根據需要將它們用於任何類型的目標語言。 這些變量通常用在“templates.cfg”文件中來定義生成文件所在的文件夾(它們的使用不是強制性的)。

按照慣例 :

  • SRC :生成“源”文件的文件夾
  • RES :生成“資源”文件(配置文件等)的文件夾
  • WEB : 任何網絡文件(HTML、CSS 等)的文件夾
  • TEST_SRC : 單元測試源文件夾
  • TEST_RES :單元測試資源(配置文件等)的文件夾
  • DOC :用於文檔文件
  • TMP :用於臨時文件(生成測試等)

您可以根據需要組織項目結構

C# 的“templates.cfg”示例(僅使用 $SRC):

#--- Models
Entity class                ; ${BEANNAME}.cs                    ; ${SRC}/Models/${BEANNAME}     ; Models/Xxx_cs.vm                  ; *
Entity CreateViewModel      ; Create${BEANNAME}ViewModel.cs     ; ${SRC}/Models/${BEANNAME}     ; Models/CreateXxxViewModel_cs.vm   ; *
Entity UpdateViewModel      ; Update${BEANNAME}ViewModel.cs     ; ${SRC}/Models/${BEANNAME}     ; Models/UpdateXxxViewModel_cs.vm   ; *

#-- Controllers
Entity controller           ; ${BEANNAME}sController.cs         ; ${SRC}/Controllers            ; Controllers/Xxxcontroller_cs.vm       ; *

#-- Views
Index View                  ; Index.cshtml                      ; ${SRC}/Views/Home             ; Views/Home/Index_cshtml.vm            ; 1
List View                   ; List${BEANNAME}View.cshtml        ; ${SRC}/Views/${BEANNAME}s     ; Views/ListXxxView_cshtml.vm       ; *
Create View                 ; Create${BEANNAME}View.cshtml      ; ${SRC}/Views/${BEANNAME}s     ; Views/CreateXxxView_cshtml.vm     ; *
Update View                 ; Update${BEANNAME}View.cshtml      ; ${SRC}/Views/${BEANNAME}s     ; Views/UpdateXxxView_cshtml.vm     ; *
Application Layout          ; _Layout.cshtml                    ; ${SRC}/Views/Shared           ; Views/Shared/_Layout_cshtml.vm        ; 1

Q2 答案:

最簡單的方法可能是每個目標項目都有一個 Telosys 項目(使每個項目盡可能小)。

但是您也可以創建自己的“全局變量”並在具有復雜結構的“大項目”中使用它們。

特定變量定義示例(在“telosys-tools.cfg”中):

ProjectVariable.MODULE_APPLICATION    = my-app
ProjectVariable.MODULE_DOMAIN         = my-domaine
ProjectVariable.MODULE_INFRASTRUCTURE = my-infrastructure

“templates.cfg”文件中的用法示例:

${MODULE_INFRASTRUCTURE}/${RES}/db
${MODULE_DOMAIN}/${SRC}/repository
${MODULE_APPLICATION}/${SRC}/handler 

Q3 答案

當您需要屬性的特定信息時,最簡單的解決方案是使用“標簽”。

您可以根據需要創建任何標簽(它只是一個以“#”開頭的字符串)。

例如,對模型中的屬性使用“#exclude”標簽:

 comment : string { #exclude } ;

並在模板文件中使用它:

#if ( ! $attribute.hasTag("exclude") )
use attribute here
#end

請參閱: https : //doc.telosys.org/dsl-model/tags

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM