在群里看到一則招聘信息,《基本功扎實(shí),對(duì)DDD、OO、IOC、AOP等有深刻認(rèn)識(shí),熟悉常用設(shè)計(jì)模式?!?OO是什么??查了一下原來(lái) OO 原來(lái)指的是 面向?qū)ο缶幊蹋∣OP),于是就總結(jié)了一些常用的術(shù)語(yǔ)和概念。
一、編程范式
編程范式(Programming Paradigms)是指編程的不同方法、風(fēng)格或思維方式
1. OOP (面向?qū)ο缶幊?
- ? 面向?qū)ο缶幊?/span>:一種編程范式,強(qiáng)調(diào)對(duì)象和類(lèi)的使用,支持封裝、繼承和多態(tài)性。C# 是一種強(qiáng)類(lèi)型、面向?qū)ο蟮恼Z(yǔ)言。
2. AOP (面向切面編程)
- ? 面向切面編程:一種編程范式,用于處理橫切關(guān)注點(diǎn)(如日志記錄、事務(wù)管理等)。通過(guò)在不修改核心業(yè)務(wù)代碼的情況下,通過(guò)切面(aspects)來(lái)添加附加行為。
3. DDD (領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))
- ? 一種軟件設(shè)計(jì)理念,強(qiáng)調(diào)業(yè)務(wù)領(lǐng)域的建模,將業(yè)務(wù)需求直接映射到代碼結(jié)構(gòu)中,幫助開(kāi)發(fā)者更好地理解和實(shí)現(xiàn)復(fù)雜業(yè)務(wù)邏輯。
二、設(shè)計(jì)模式
1. DI (依賴(lài)注入)
- ? 依賴(lài)注入:一種設(shè)計(jì)模式,通過(guò)將依賴(lài)關(guān)系傳遞到類(lèi)的構(gòu)造函數(shù)、屬性或方法中,而不是在類(lèi)內(nèi)部硬編碼創(chuàng)建依賴(lài),來(lái)實(shí)現(xiàn)解耦。有助于提高代碼的可測(cè)試性和可維護(hù)性。
2. IoC (控制反轉(zhuǎn))
- ? 控制反轉(zhuǎn):是一種設(shè)計(jì)原則,使得控制流從程序本身轉(zhuǎn)移到框架或外部容器中。DI 是實(shí)現(xiàn) IoC 的一種常見(jiàn)方法。
3. SOLID 原則
SOLID 原則是面向?qū)ο缶幊讨形鍌€(gè)設(shè)計(jì)原則的縮寫(xiě),旨在提高軟件設(shè)計(jì)的可維護(hù)性、可擴(kuò)展性和可理解性
- ? 面向?qū)ο笤O(shè)計(jì)原則:一組用于編寫(xiě)可維護(hù)和擴(kuò)展的面向?qū)ο蟠a的原則,包含五個(gè)基本原則:
- ? S: 單一職責(zé)原則(Single Responsibility Principle)
- ? O: 開(kāi)放封閉原則(Open/Closed Principle)
- ? L: 里氏替換原則(Liskov Substitution Principle)
- ? I: 接口隔離原則(Interface Segregation Principle)
- ? D: 依賴(lài)倒轉(zhuǎn)原則(Dependency Inversion Principle)
4. Singleton Pattern (單例模式)
- ? 單例模式:確保類(lèi)只有一個(gè)實(shí)例,并提供全局訪問(wèn)點(diǎn)。通常用于需要全局共享資源的場(chǎng)景。
5. Factory Pattern (工廠模式)
- ? 工廠模式:一種創(chuàng)建對(duì)象的設(shè)計(jì)模式,客戶(hù)端無(wú)需指定具體的類(lèi),而是通過(guò)工廠方法獲取對(duì)象。
6. Repository Pattern (倉(cāng)儲(chǔ)模式)
- ? 倉(cāng)儲(chǔ)模式:一種設(shè)計(jì)模式,旨在將數(shù)據(jù)庫(kù)操作封裝在一個(gè)層次中,提供與數(shù)據(jù)庫(kù)交互的抽象接口。
7. CQRS (命令查詢(xún)職責(zé)分離)
- ? 將讀取和寫(xiě)入操作分離到不同模型中,優(yōu)化性能和可擴(kuò)展性。適用于復(fù)雜的業(yè)務(wù)場(chǎng)景,尤其是 DDD 中。
三、運(yùn)行時(shí)環(huán)境
1. CLR (公共語(yǔ)言運(yùn)行時(shí))
- ? 公共語(yǔ)言運(yùn)行時(shí):.NET 平臺(tái)的核心部分,負(fù)責(zé)代碼的執(zhí)行、內(nèi)存管理、安全性、異常處理等。
2. JIT (即時(shí)編譯)
- ? 即時(shí)編譯:在程序執(zhí)行時(shí),將中間語(yǔ)言(IL)代碼編譯成機(jī)器代碼。CLR 使用 JIT 編譯器將 C# 代碼從中間語(yǔ)言轉(zhuǎn)換為特定平臺(tái)的機(jī)器代碼。
3. P/Invoke (平臺(tái)調(diào)用服務(wù))
- ? 平臺(tái)調(diào)用服務(wù):允許 .NET 程序調(diào)用 Windows API 或其他本地代碼庫(kù)(如 C、C++ 編寫(xiě)的庫(kù))。通常用于與外部代碼庫(kù)交互。
四、內(nèi)存管理
1. **GC **
- ? 垃圾回收:自動(dòng)管理內(nèi)存的一種機(jī)制。C# 使用 CLR 的垃圾回收來(lái)自動(dòng)回收不再使用的對(duì)象。
2. Value Type (值類(lèi)型)
- ? 值類(lèi)型:C# 中的一種數(shù)據(jù)類(lèi)型,包括基本數(shù)據(jù)類(lèi)型(如 int、char、double)和結(jié)構(gòu)體(struct)。值類(lèi)型存儲(chǔ)的是數(shù)據(jù)本身。
3. Reference Type (引用類(lèi)型)
- ? 引用類(lèi)型:C# 中的一種數(shù)據(jù)類(lèi)型,包括類(lèi)(class)、數(shù)組和委托等。引用類(lèi)型存儲(chǔ)的是指向數(shù)據(jù)的引用(內(nèi)存地址)。
4. Boxing and Unboxing (裝箱與拆箱)
- ? 裝箱:將值類(lèi)型轉(zhuǎn)換為引用類(lèi)型(通常是
object
類(lèi)型)。 - ? 拆箱:將引用類(lèi)型(通常是
object
)轉(zhuǎn)換回原始的值類(lèi)型。
Memory Management (內(nèi)存管理)
- ? 內(nèi)存管理:C# 使用垃圾回收(GC)來(lái)自動(dòng)管理內(nèi)存。在運(yùn)行時(shí),CLR 會(huì)跟蹤對(duì)象的生命周期并在對(duì)象不再需要時(shí)釋放它們。
五、并發(fā)編程
1. Thread (線程)
- ? 線程:是執(zhí)行代碼的基本單位。C# 提供了多線程編程的支持,可以在多個(gè)線程中并發(fā)執(zhí)行任務(wù),提高程序的效率。
2. Task
- ? 任務(wù):C# 中的并行編程單元,比線程更輕量級(jí),通常用于表示異步操作的完成狀態(tài)。
Task
與 async
/await
配合使用時(shí),能夠簡(jiǎn)化異步編程。
3. Async/Await
- ? 關(guān)鍵字用于簡(jiǎn)化異步編程,非阻塞地執(zhí)行異步操作。 通過(guò)
await
,可以非阻塞地執(zhí)行異步操作并等待其完成。
4. Mutex (互斥體)
- ? 互斥體:一種同步機(jī)制,用于避免多個(gè)線程同時(shí)訪問(wèn)共享資源,確保在任意時(shí)刻只有一個(gè)線程可以訪問(wèn)該資源。
5. Semaphore (信號(hào)量)
- ? 信號(hào)量:一種同步原語(yǔ),用于控制同時(shí)訪問(wèn)某個(gè)資源的線程數(shù)量。信號(hào)量有一個(gè)計(jì)數(shù)器,指示當(dāng)前可用的資源數(shù)量。
六、數(shù)據(jù)訪問(wèn)
1. LINQ (語(yǔ)言集成查詢(xún))
- ? 用于處理數(shù)據(jù)查詢(xún)的功能,支持
IEnumerable
和 IQueryable
數(shù)據(jù)源。
2. LINQ to SQL / Entity Framework
- ? LINQ to SQL:一種使用 LINQ 查詢(xún) SQL 數(shù)據(jù)庫(kù)的方式。可以在代碼中直接使用 C# 查詢(xún)數(shù)據(jù)庫(kù)。
- ? Entity Framework (EF):一種 ORM(對(duì)象關(guān)系映射)框架,通過(guò)對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射簡(jiǎn)化數(shù)據(jù)庫(kù)操作。
七、其他重要概念
1. Tuple (元組)
- ? 元組:C# 中用于表示多個(gè)值的集合,可以是一組不同類(lèi)型的元素的組合。
2. Lambda Expression (Lambda 表達(dá)式)
- ? Lambda 表達(dá)式:C# 中用于定義匿名方法或表達(dá)式的簡(jiǎn)潔語(yǔ)法,通常用于 LINQ 查詢(xún)、事件處理等。
3. Delegate (委托)
- ? 委托:C# 中的類(lèi)型安全的函數(shù)指針,可以用來(lái)引用和調(diào)用方法。是事件和回調(diào)的基礎(chǔ)。
4. Event (事件)
- ? 事件:C# 中用于處理消息傳遞和通知的機(jī)制,通常與委托一起使用,常用于 UI 編程和應(yīng)用程序之間的通信。
5. NuGet
- ? NuGet:是一個(gè)包管理工具,用于管理 .NET 項(xiàng)目中的第三方庫(kù)和組件。通過(guò) NuGet,可以方便地安裝、更新和刪除項(xiàng)目依賴(lài)的庫(kù)。
6. Reflection (反射)
- ? 反射:C# 提供的一個(gè)強(qiáng)大機(jī)制,允許程序在運(yùn)行時(shí)檢查對(duì)象的類(lèi)型信息,并動(dòng)態(tài)訪問(wèn)和操作類(lèi)型的元數(shù)據(jù)、方法、屬性等。
7. Attribute (特性)
- ? 特性:用于為類(lèi)、方法、屬性等添加元數(shù)據(jù)的標(biāo)簽??梢栽谶\(yùn)行時(shí)通過(guò)反射讀取這些特性,用于不同的應(yīng)用,如序列化、驗(yàn)證、日志記錄等。
8. Null Coalescing Operator (??)
- ? 空合并運(yùn)算符:C# 中的運(yùn)算符
??
用于簡(jiǎn)化空值檢查。如果變量是 null
,則返回默認(rèn)值。
9. Extension Methods (擴(kuò)展方法)
- ? 擴(kuò)展方法:一種允許向現(xiàn)有類(lèi)型添加新方法的方式,而無(wú)需修改該類(lèi)型的源代碼。通過(guò)靜態(tài)類(lèi)和
this
關(guān)鍵字實(shí)現(xiàn)。
10. Lazy Loading (延遲加載)
- ? 延遲加載:一種設(shè)計(jì)模式,在程序需要時(shí)才加載資源,而不是一開(kāi)始就加載所有資源。這有助于提高程序啟動(dòng)速度和節(jié)省資源。
Interface (接口)
- ? 接口:定義了類(lèi)應(yīng)該實(shí)現(xiàn)的方法和屬性的契約,接口不能包含實(shí)現(xiàn)細(xì)節(jié)。類(lèi)通過(guò)實(shí)現(xiàn)接口來(lái)提供實(shí)際功能。
Abstract Class (抽象類(lèi))
- ? 抽象類(lèi):一個(gè)不能實(shí)例化的類(lèi),通常作為其他類(lèi)的基類(lèi)。抽象類(lèi)可以包含部分實(shí)現(xiàn),并允許子類(lèi)實(shí)現(xiàn)自己的方法。
Polymorphism (多態(tài)性)
- ? 多態(tài)性:通過(guò)繼承和接口實(shí)現(xiàn)的一種特性,允許不同對(duì)象以相同的方式響應(yīng)相同的消息。是面向?qū)ο缶幊讨械囊粋€(gè)重要特性。
TDD (測(cè)試驅(qū)動(dòng)開(kāi)發(fā))
- ? 測(cè)試驅(qū)動(dòng)開(kāi)發(fā):一種軟件開(kāi)發(fā)方法,開(kāi)發(fā)人員首先編寫(xiě)測(cè)試用例,然后編寫(xiě)代碼以通過(guò)測(cè)試。
閱讀原文:原文鏈接
該文章在 2025/3/24 17:08:41 編輯過(guò)