iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

菜鳥工程師的奇幻旅程系列 第 19

Day 19 - 研習計畫之各種挖坑和進度追殺

進入九月後的開發過程中越來越常看到研習生回報開發上遇到的問題,而今天的文章主要聚焦在網站上線遇到的一些開發上的問題。

各式各樣的問題湧現

在昨天的文章有提到在專案上開發的時候決定使用MVC的軟體架構模式開發,所以前端與後端的研習生基本上會專心各自負責的地方,但要將功能整合在一起的時候將會開始發生一些問題。

不小心挖了一個坑怎麼辦,沒關係繼續挖深一點看清楚問題點在哪裡

Code first開發細節

資料表的設計

在.NET Core的Model設計資料欄位的時候需要留意定義的型別,例如哪些欄位是必填以及各自的存取類型,這個部分若有明確的規劃後,在後續資料庫端的維護花費時間就會相對減少(例如型態的定義)。以下為在Model定義一個資料表的程式碼,模擬商品管理可能會使用到的欄位設計,可以看到的是商品的ID編號、商品名稱、商品長寬高、顏色等等。

using System.ComponentModel.DataAnnotations;

namespace DigiPlanDev_ASP.NET_Core_3._1_.Models
{
    public class Products
    {
        public int ProductsID { get; set; }

        [Required(ErrorMessage = "請輸入內容")] public string ProductsName { get; set; }

        [Required] public float Width { get; set; }

        [Required] public float Height { get; set; }

        [Required] public float Length { get; set; }

        public string gender { get; set; }
        public string Color { get; set; }
        public string Style { get; set; }
        public string Uri { get; set; }
        public string Url2 { get; set; }
        public string Url3 { get; set; }
        public string Url4 { get; set; }

        [Required] public int CategoryID { get; set; }

        public string WatchStrapMaterial { get; set; }
        public int Price { get; set; }
        public string About { get; set; }

        // TODO : STAUTS的狀態後續可獨立一張資料表設定不同的狀態
        public string Status { get; set; }
        public string Tag1 { get; set; }

    }
}

參考資料

EF Core 移轉設定

當完成第一個 EF Core 應用程式並且包含簡單的模型後,接著可以參考此文章確認Entity Framework Core延伸套件是否有安裝後,接著就是依照官方文件的說明建立 EF Core 名為 InitialCreate 的移轉。

Add-Migration InitialCreate

但要特別注意的是如果今天DbContext不只一個的時候需要加 -context "DbContext的名稱",才能完成移轉的指令建立。

Startup.cs定義MySql應用程式啟動定義

當專業建立時預設的連線為Sqlserver(範例如下),所以如果今天需要連線到其他資料庫的時候需要留意這個部分,另外使用UseMySql的行為時,要確認一下在Nuget是否已經安裝套件。(無法引用這個行為的時候很大一部分是還沒有安裝套件)

// 預設連線
services.AddDbContext<ApplicationDbContext>(
    options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));

// 設定為Mysql連線的方法
services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));

services.AddDbContext<AllToDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("AllToDbContext")));

怎麼在商業邏輯處理後回傳到前台呢?

簡單帶過code first需要留意的狀況後,接著在controller端的設計行為也帶給研習生蠻多的困難,而這裡在分工的方式主要以後端的研習生占比較多,因為前端光是要處理3D模型模擬的函示庫就需要花費蠻多的時間。controller端需要留意的首先是回傳到前端的型態,大致上分為return view、return content、return PartialView。

在開發過程中很常使用的是return view,簡單來說就是將處理過後的資料渲染在指定的畫面上,至於怎麼對應依照個人習慣會將Controller的開頭命名對應View的資料夾命名,並且controller內新增的class name需要對應資料夾內的cshtml檔案名稱就可以顯示。

但當遇到有多個資料庫撈取的資料要如何一次回傳到view端的方法,可以使用強型別資料 (viewmodel)的方式綁定需要顯示的資料後一次做回傳的行為,這樣有助於更快速地撰寫程式碼,並且減少錯誤的發生(如果沒有正確綁定或者是沒有值的當下就會跳出錯誤)。

參考資料

函示庫導入後怎麼確認在前台有正常?

當要引用開源專案或者是其他的檔案時,須留意html端引用的路徑是否有回傳200的訊息,在當時有一些狀況是一次引用很多的路徑,但是檔案間有順序性的呼叫導致一個沒抓到的檔案連帶產生後面的問題。

另外一個部分是使用Three.js的函示庫時,由於是透過import的方式載入因此同樣在路徑需要跟著調整(除非相對位置跟原始的位置一樣),並且由於函示庫的檔案關聯非常多所以需要一個一個確認路徑的位置,需留意路徑修改盡量使用相對路徑讀取(除非很確定這個檔案就是會固定在某個專案底下)。

上線的時間壓力

除了上面提到的問題之外還有一些比較小的情況就不加贅述,由於12月初是研習生們的發表時間,因此也壓了一個時間點為平台上線的目標(11月初),這樣的開發方式也可以刺激他們在時間的壓力下完成一個版本,另外也可以提前體驗一下趕專案時的生活。現在回想起來在這個期間也投入蠻多的心力,去協助研習生完成功能上的開發以及除錯上的一些建議,並且也在接近上線的階段也開始發生了一些原本沒有意料的事情...


上一篇
Day 18 - 研習計畫之工具評估與協作開發
下一篇
Day 20 - 研習計畫之網站上線以及功能延伸開發篇
系列文
菜鳥工程師的奇幻旅程30

尚未有邦友留言

立即登入留言