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 8 情报收集 - Information Gathering (SSL Analysis)

>>:  Day 8 - 安装 Cloud-Init

Day10-"一维阵列"

阵列依据占用空间的大小及编号方式,可分为一维阵列、二维阵列,且必须经过宣告才可使用。 C语言的阵列索...

Day 30 建立一个好口碑

心若改变,你的态度跟着改变;态度改变,你的习惯跟着改变;习惯改变,你的性格跟着改变;性格改变,你的人...

在AI的时代追求人性:写在最後

不可思议,我竟然写到了最後一天了!! 想当初最开始知道铁人赛, 是看了邦友Leo大大的「深入浅出An...

[从0到1] C#小乳牛 练成基础程序逻辑 Day 9 - 运算子Demo 程序码演示

实码演示 | 算术-数值 | 逻辑-T/F | 递增递减 | 前置後置 🐄点此填写今日份随堂测验 ...

Day 10: 人工智慧在音乐领域的应用 (机器学习/深度学习与类神经网路一)

前面几天我们讲了许多机器学习/深度学习以外的AI演算法,那麽今天我们就来聊聊现今最热门的机器学习/深...