建立 .Net Core 5 MVC 的開發環境
.Net Core 5 已經在 2020年11月 正式發布,在使用上有很好的穩定性和方便性,可以想像這個平台在未來會越來越普及。在這裡我們也選擇它做為軟體積木和系統的開發環境;在開發的過程中,我們主要以2個 Web 專案做說明,一個是資料庫文件系統(DbAdm),另一個是人事管理系統(HrAdm)。在VS 下的專案清單如下圖,以下我們就這幾個專案的內容和設定的方式做簡單說明:
Base project
這個專案的用途是基本的公用程式,加入參照之後,你可以直接叫用裡面的程式,它的主要功能是:基本的資料處理、檔案存取、CRUD處理。主要的程式放在 Services 這個目錄,如下:
BaseWeb project
內容是跟 Web 有關的公用程式,以及自定的 UI 元件,在開發 Web 系統時會需要用到。
DbAdm project
資料庫文件系統,其中包含一個 CRUD 產生器
HrAdm project
人事管理系統,用來介紹系統的開發,其中包含一個簽核流程功能
Startup.cs
.net core MVC 系統執行的時候,會先讀取這個檔案,以下為人事管理系統的內容:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//1.use newtonSoft & pascal case json
services.AddControllers().AddNewtonsoftJson(options =>
{
options.UseMemberCasing();
});
//2.use pascal case json
services.AddControllersWithViews().AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
//3.http context
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//4.appSettings "FunConfig" section -> _Fun.Config
var config = new ConfigDto();
Configuration.GetSection("FunConfig").Bind(config);
_Fun.Config = config;
//5.avoid CS1030
services.AddDbContext<MyContext>(options =>
{
options.UseSqlServer(config.Db);
});
//6.locale & user info for base component
services.AddSingleton<IBaseResService, BaseResService>();
services.AddScoped<IBaseUserService, MyBaseUserService>();
//7.session1(memory cache)
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
//options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
//8.ado.net for mssql
services.AddTransient<DbConnection, SqlConnection>();
services.AddTransient<DbCommand, SqlCommand>();
//9.initial _Fun by mssql
IServiceProvider di = services.BuildServiceProvider();
_Fun.Init(di, DbTypeEnum.MSSql, AuthTypeEnum.Ctrl);
}
對應上面的序號,說明如下:
1.使用 Newtonsoft.Json,設定它的欄位格式為 Pascal,否則回傳資料的欄位名稱的字首位會變成小寫
2.設定 System.Text.Json 的欄位格式為 Pascal
3.註冊 HttpContext,在呼叫 Http Request、Http Response 時需要用到
4.把 appsetting.json FunConfig 區段的內容存到 _Fun.Config 變數裡面,供程式使用
5.在 Entity Framework model 避免使用有資安疑慮的內容,以防止編譯時出現 CS1030 警示
6.註冊存取基本的多國語、用戶資料的服務
7.註冊 Session 服務,使用 Memory Cache
8.註冊 Ado.net 服務來存取資料庫
9.初始化系統的公用程式
第三方套件
為了方便系統的開發,我們使用以下的第三方套件,這些套件你可以透過 NuGet 來安裝,說明如下:
• BuildBundlerMinifier:合併壓縮 javascript 和 css 檔案,設定檔為 bundleconfig.json
• Handlebars:c# 樣版引擎
• Newtonsoft.Json:取代系統預設的 System.Text.Json
• OpenXml:處理 Word、Excel 檔案
JS 套件
在處理前端的 UI 時,除了最基本的 jQuery、Bootstrap,我們使用了以下的前端套件:
• Bootstrap-DatePicker:日期輸入欄位
• jQuery Validate:欄位驗証
• jQuery Datatables:多筆資料分頁顯示
• jsPlumb:流程圖工具
• moment:處理日期格式資料
• mustache:js 樣版引擎
• Pjax:局部更新資料 for SPA
• Sublime:Html 編輯欄位
組態設定
每個系統會有自己的組態,在這裡我們把 HrAdm 的組態記錄在 appsettings.json 的 FunConfig 區段,它的內容如下:
"FunConfig": {
"SystemName": "人事管理系統",
"Db": "data source=(localdb)\\mssqllocaldb;initial catalog=Hr;integrated security=True;multipleactiveresultsets=True;max pool size=1000;",
"Locale": "zh-TW",
"LogInfo": "true",
"LogSql": "true",
/* Smtp: 0(Host),1(Port),2(Ssl),3(Id),4(Pwd),5(FromEmail),6(FromName) */
"Smtp": ""
}
這個設定會對應到 ConfigDto.cs,完整的欄位清單說明如下:
• SystemName:系統名稱
• Locale:預設的多國語語系
• ServerId:主機代碼
• SlowSql:查詢超過這個毫秒數時,會寫入 error log
• LogInfo:是否記錄一般資訊
• LogSql:是否記錄 sql
• RootMail:管理者 email,系統發生錯誤時通知管理者
• TesterMail:測試人員的 email
• UploadFileMax:最上的上傳檔案大小 (MB)
• CacheSecond:Cache 資料保留的秒數
• SSL:是否使用 SSL
• Smtp:SMTP 設定 for 寄送 email
目錄說明
在這裡我們把 Web 系統的目錄用途做了簡單的規範, 如下:
• _log:log 檔案
• _sql:有用的 sql
• _upload:上傳檔案
• Controllers:controller
• Models:model
• Properties:系統目錄
• Services:service
• Tables:EF model
• Views:view
• wwwroot:javascript、css 前端檔案