【Git】- 比較前後差異(一) git diff
近期遇到很多版本、程式更新總類、修改內容需要調資料,當中可以知道 git 可以從 UI看到差異性,同時有包含diff 這個指令到目前為止我都沒用過,因此來實際玩玩看就知道了。
git diff這功能主要是比對 Git Commit 之間的版本差異之外,也同樣可以跟資料與資料比對。依據任何情境下會使用不能的方式。
單一檔案比對 : 若有 script 或是 一些檔案透過資料夾備份管理 (無使用git管理),需要使用資料差異性確認差異。
版本差異比對 : 針對特定版本或是穩定版本查看差異性。
資料夾比對 : 這邊會偏向TFS沒有上git 版本可以考慮使用這個功能。
使用方式一、檔案比對這邊用簡單txt 檔案進行比較,可以看出diff不會因為檔案名稱不同判斷錯誤。
1git diff .\text1.txt .\text2.txt
以下範例 :
二、資料夾比較這功能主要以資料夾互相比較結果,以上兩點為離線版使用的指令,相當實用。 (如果有資料夾比對部分,裡面資料必須要相同不然就會遇到判讀問題)
1git diff text_1 text_2
三、Commit 比較這會由git comm ...
[筆記]C# - DI / IOC 差異
DI 依賴注入 (Dependency Injection)是 DI 的一種實現方式,它將對象的創建和生命週期管理交給 IoC 容器來處理。
1定義 : A物件程式內部需要使用B物件 , 則 B 物件中有依賴的成份。
IOC 控制反轉 (Inversion of Control)是一種軟體設計模式,指的是將對象創建和生命週期管理的責任轉移到 IoC 容器中,容器負責解析依賴關係,並將需要的對象注入到其它對象中。這樣做的好處是降低代碼的耦合性,增加代碼的靈活性和可測試性。
1定義 : A 物件與 B 物件控制權由第三方容器控制。
結論IoC 是一種設計模式,而 DI 則是 IoC 的一種具體實現方式。使用 DI 的好處是可以使代碼更加靈活和可測試,因為對象的依賴關係被轉移到了容器中,可以方便地模擬和測試各個對象。同時,使用 DI 還可以提高代碼的可讀性和可維護性,因為代碼中不再包含創建和管理依賴關係的代碼。
[筆記]C# Scaffold Entity Framework
Scaffold又可稱”鷹架”、”支架”。Scaffold 是可以解釋為程式碼產生器,可以透由指令產生出想要的檔案、專案,使用部分通常是透由指令方式呼叫、產生指令。dotnet.exe內也有提供scaffold概念。
專案Net Core SDK安裝時候會提供預先定義的 scaffold 範本(example: dotnet.exe)。 以下指令參考 :
展開 dotnet.exe 清單 : dotnet new --lists
求救指令 : dotnet new -h
Entity Framework CoreEF Core 使用方式與 EF 不同,EF Core 基於 Scaffolding 實體類型類別和 DbCoNtext 類別的程式。可以透由套件管理員主控台 (PMC):Scaffold-DbContext或是 NET 命令列介面 (CLI): dotnet ef dbcontext scaffold 產生出檔案。
注意事項
必須使用Microsoft.EntityFrameworkCore.Design NuGet 套件
需要安裝相關工具 :
套件管理員主控台 ...
[筆記]C# ORM 物件關係映像
物件關係映像 Object Relational Mapping是一種軟體開發技術,它將關聯式資料庫中的資料表映射到物件導向程式語言中的物件,從而實現程式語言與資料庫之間的無縫集成。
ORM 框架通常提供以下功能:
對象映射:ORM 框架會自動將資料庫表格映射到物件,開發人員可以像使用任何物件一樣使用這些物件。
關聯性映射:ORM 框架可以處理表格之間的關係,使開發人員可以輕鬆地編寫與關聯性相關的程式碼。
資料庫操作:ORM 框架提供了一套 API,使開發人員可以方便地對資料庫進行 CRUD 操作。
查詢語言支持:ORM 框架通常提供了一套自己的查詢語言,開發人員可以使用這些查詢語言方便地查詢資料庫。
ORM 框架的好處是可以減少對於 SQL 的依賴,減少了對於資料庫的複雜性,讓開發人員可以更專注於物件導向程式設計,並且可以提高開發效率。但是使用 ORM 框架也存在一些缺點,比如在效能上可能會有些影響,需要仔細選擇適合的 ORM 框架並進行優化。
結論物件關係映像是 “物件”與”資料庫”之間對應的一種技術,例如 : “Entity Framework”。特色是資料透過【物件方式】 ...
[筆記]C# 命名原則 PascalCase、camelCase、Hungarian notation
命名原則一、小駝峰式命名法 (lower camel case)又稱「camel Case 」。把字首字母改為小寫其他改為大寫,例如 : dataTable、fileName、userDetail。
二、大駝峰式命名法 (upper camel case)又稱「Pascal Case 」。把每一個前面第一個字首字母改為大寫,例如 : DataTable、FileName、UserDetail。
三、匈牙利命名法(Hungarian notation)匈牙利命名法的基本思想是在變數名稱前面添加一個或多個簡稱,這個簡稱表示該變數的數據類型或其他屬性。例如,字串變數可以使用 “str” 的前綴,整數變數可以使用 “i” 的前綴等等。這些前綴使代碼更易於閱讀,因為它們提供了有關變數類型和用途的重要信息。
匈牙利命名法前綴:
str:字串類型
i:整數類型
b:布林類型
f:浮點數類型
o:物件類型
123string strName;int iAge;bool bIsEnabled;
軟體開發中已經不再廣泛使用匈牙利命名法,因為它可能會導致變數名稱變得冗長且容易混淆。取而代之的是,一些 ...
【筆記】ChatGPT API 串接API 心得
前言近期有使用 Line Bot 完成一個小小專案,但是又想告一些花樣就把ChatGPT 加入Line 中,唯一區點就是要注意Token 使用量。
Token 使用量GPT 有很多版本 (光GPT 也不知道他已經多少版本),串接過程其實有聽過 Token 次數,依據每個版本不同 Token 數就會不同。例如 : GPT-3 每一個 Token 為 4 個char 或是 0.75 個字。目前 GPT-3 只有提供最大 4,096 tokens,如果超過就會無法正常使用。
首次使用chatGPT 提供免費 18 美元的費用,這三天玩下去還沒花到 1美元,若直接把他當簡易的搜尋工具他是相當翻遍許多。
GPT API 申請Open API : https://platform.openai.com/
申請方式只需要按下 “Create new secret key” 即可。
Library這邊是已經有提供 Library 可以馬上實現,Line 部分我使用 Betalgo.OpenAI.GPT3製作,製作方式很簡單這邊就不介紹操作。
入口 : https://platform.openai. ...
【筆記】DI依賴注入生命週期
DI 依賴注入(Dependency Injection)DI(Dependency Injection)是一種設計模式,它的主要目的是降低軟體元件之間的耦合度,讓程式更容易測試和維護。DI 透過將類別所需的相依物件,由外部傳入,讓類別不需要知道相依物件的實作細節,只需要知道相依物件所提供的介面(interface),就可以正常運作。
生命週期在 DI 中,相依物件的生命週期通常由 DI 容器來管理。一般來說,每個類別在 DI 容器中都會有一個對應的生命週期。常見的生命週期有以下幾種:
Transient:每次注入都會創建一個新的實例。
Singleton:整個應用程序只會創建一個實例。
Scoped:在同一個作用域中只會創建一個實例。
使用規則使用 DI 時,有幾個重要的使用規則:
盡量避免在程式碼中直接 new 物件,應該使用 DI 容器來管理物件的生命週期。
相依物件的注入應該使用介面(interface)而不是具體類別(concrete class)。
相依物件的注入應該在建構子(constructor)中完成,而不是在類別的方法中完成。
相依物件的注入應該由 DI 容器 ...
【筆記】編程模式Programming Patterns
編程模式(Programming patterns)是一種在軟體工程中使用的解決方案,它可以解決特定的問題,並經過反覆證實可行。這些模式是由軟體工程師在長時間開發軟體中所經驗到的最佳實踐,並且被廣泛使用。使用這些模式可以使代碼更加可讀、可維護和可擴展。
編程模式可以分為三類
創建型模式(Creational patterns)
結構型模式(Structural patterns)
行為型模式(Behavioral patterns)
創建型模式這些模式主要用於將對象的創建與使用分離開來。其中比較常見的模式有工廠模式(Factory pattern)、抽象工廠模式(Abstract Factory pattern)、單例模式(Singleton pattern)、建造者模式(Builder pattern)和原型模式(Prototype pattern)。
結構型模式這些模式主要用於將對象和類結構化,以更好地進行組織和管理。其中比較常見的模式有適配器模式(Adapter pattern)、橋接模式(Bridge pattern)、裝飾模式(Decorator pattern)、外觀模 ...
[筆記]C# In 泛型修飾詞
泛型修飾詞泛型修飾詞用於指定泛型類型參數,以便在編譯時使用具體的類型。泛型修飾詞使用尖括號”< >”表示,放置在類型名稱的後面。可以定義一個泛型類型List,其中T是一個類型參數:
1234567891011121314151617public class List<T>{ private T[] items; public List() { items = new T[0]; } public void Add(T item) { // Add item to the list } // Other methods here}
在上面的示例中,T是一個泛型類型參數,可以代表任何類型。當創建List物件時,必須指定T的具體類型,例如:
1234List<int> intList = new List<int>();List<string> stringList = ne ...
[筆記]C# Where 泛型類別條件約束
泛型類別條件約束(generic class constraint)用來指定泛型型別參數的約束條件,限制它必須是特定的型別或符合某些條件。
指定泛型型別參數必須繼承自特定的基底類別或介面
1234public class MyClass<T> where T : MyBaseClass{ // MyClass<T> 的程式碼}
MyClass 泛型類別指定了泛型型別參數 T 必須繼承自 MyBaseClass 基底類別。這樣一來,在定義 MyClass 物件時,T 的型別必須符合這個條件,否則就會編譯錯誤。
指定泛型型別參數必須是值型別或可為空的值型別
12345public class MyClass<T> where T : struct{ // MyClass<T> 的程式碼}
MyClass 泛型類別指定了泛型型別參數 T 必須是值型別或可為空的值型別。這樣一來,在定義 MyClass 物件時,T 的型別必須符合這個條件,否則就會編譯錯誤。
指定泛型型別參數必須有預設的 ...