開發環境設定

建立 .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 前端檔案