wtm框架學習 1


Model定義

  • 自己寫的類至少要從TopBasePoco繼承, 且需要using WalkingTec.Mvvm.Core;
  • BasePoco(推薦)比TopBasePoco多了創建人, 創建時間, 更新人, 更新時間
  • PersistPoco比BasePoco甚至還多了isValid, 用來假刪除數據
  • 定義外鍵建議使用guid類型, 如public Guid? CityId{get;set;}
  • 數據類型可以使用FileAttachment, 貌似很好用
  • enum的每一項都可以加[Display(Name="{name}")]
  • 若希望enum生成的下拉菜單出現空白選項, model設定時要加上問號, 比如public HospitalLevel? level{get;set;}(非下拉菜單不需要這么干)

要實現樹形結構(比如表要支持上海市>上海市>楊浦區):

  • 繼承BasePoco/TopBasePoco之外還需要繼承ITreeData , T寫這個model自己, 如
public class City: TopBasePoco, ITreeData<City>{ //在ITreeData上點擊右鍵可實現本接口

}
  • 鼠標懸停在ITreeData這里選擇“實現接口”

多對多的話, 則是需要一個中間表, 要定義好外鍵, 類似這樣:

[MiddleTable]
public class PatientVirus : TopBasePoco
{
    public Patient Patient{get;set;}
    public Guid PatientId{get;set;}

    public Virus Virus {get;set;}
    public Guid VirusId{get;set;}
}

數據庫創建和遷移

  • 注意一定要在DataContext.cs中再次填寫連接字符串,否則無法實現遷移
  • 首次運行前先要運行ef的標准流程,add-migration {name} update-database

搭建頁面

  • 定義完模型以后需要在DataContext.cs中注冊DbSet, public DbSet<{classname}> {DbSetName} {get;set;};

部署生產

  • 先要把appsettings.json里的debug參數關掉
  • publish時選擇依賴框架,win-x64架構
  • 重新進入系統, admin默認密碼000000, 配置用戶的主菜單

VM是啥

第一次看完之后的理解:
Mvvm的vm是view model, 是在m的基礎上添加許多屬性和方法(這話不一定對, 有點模糊, 其實現在我理解是vm利用了m, 而vm是獨立對象, 配合c進行工作)
wtm框架的vm是在controller中通過createVM方法創建的.
wtm的vm最基本的basevm也已經很強大了, 在此基礎上還有CRUD的vm, 批量操作的vm, 導入導出的vm.
傳統mvc的模型實現CRUD需要在controller內自己寫. 而wtm搞定了這一步.

第二次看的時候的理解:
vm不是用來代替model也不是完全代替controller的. 因為如果完全代替了他們的話, 不但破壞的原本的mvc結構(導致不易理解), 也會把vm做的太雜(啥都放一起).
因此現在的架構就是m+v+vm+c, 其中c的存在感降低了, 更多的作用是用c實現路由.

系統界面定制

定制界面要分兩塊走. 第一個是首頁, 完全獨立的css. 第二個是layui. 類似我自己開發的舊的仁意系統, 首頁也是獨立的.
比方說要改logo和系統名稱頁面title, 那么首頁和layui的配置都要改.

登錄首頁搜索login.cshtml, 直接改這個view即可.
layui的配置文件搜索 layui config.js首頁在frontpage.cshtml
以上都用vscode搜索即可.

增刪改查界面定制及TagHelper

實質就是生成html用的輔助標簽, 要用taghelper的前提是必須在view文件內先引用相應的對象.

Wtm框架基於layui的樣式提供了許多表單tag. 可在每個業務模塊不同的增刪改查界面內修改.
比方說搜索patient create.cshtml, 可把checkbox改成combobox或者radio, 部分控件也可增加屬性multi-select=“true”. 除此之外還有和一個強大的多選控件叫transfer.

改新增界面時別忘記同時實現更改界面(是分開的)

更多內容可到官網文檔"界面層"看.

實現聯動菜單

詳見視頻教程, 第4個視頻28分鍾開始.

WebApi相關

  • api需單獨生成, 且推薦認證方式只選擇jwt
  • api若認證方式支持cookies, 表示可以在登錄后(調用登錄api)直接調用該系列api
  • 即使只選擇了jwt認證, 也可通過在swagger文檔內登錄(調試登錄接口, 使用admin/000000, use cookies選false)來獲得jwt token, 並通過輸入Bearer {token}來調試
  • postman調試的話必須在authorization內選擇Bearer並只填寫token, 然后參數使用raw+json傳遞
  • api controller不走配置文件的路由. 而是在每個controller內定義
  • api權限通過先配置菜單再配置用戶組權限來進行
  • 若要徹底開放某api的權限,給它增加[Public]這個屬性即可

關於JWT

看了許多介紹,基本都是以“session和jwt的區別”、“jwt的優點”之類為主題。
我自己的理解是這玩意還是只能用來做做api的鑒權,做用戶登錄有點麻煩,使用不當還有安全問題
我目前的理解是它主要用來在替代session做用戶登錄和登錄后的操作驗證(負載平衡的情況下session方式很麻煩)。

現階段對我來說最主要用到的是從wtm里獲取某某欄目的數據,而不是在自研系統里讓某個管理員登錄然后獲取自己的數據,
因此在前端調用jwt登錄和保存token的必要性是沒有的。
所以我完全可以對這類獲取數據的api直接設[Public]屬性,這樣一來專題頁面的數據加載方面能獲得最大的性能
至於某些場景下需要更新數據的時候,則需要單獨去調用封裝后的api(封裝wtm的api)或者自己寫api(和wtm完全無關了)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM