ALM-開發 for C#

常見的誤解

不當設計的根源

甚麼是物件

甚麼是型別

甚麼是類別

甚麼是抽象化

甚麼是物件導向

三大特型

封裝

隱藏行為、訊息不讓外界知道

繼承

繼承者擁有被繼承者的行為,靜態成員除外

.NET的繼承

只能一個類別

多個介面

多型

廣義多型 (universal polymorphism)

繼承式多型 (inclusion)

參數式多型 (parametric)

泛型

特設多型 (ad hoc polymorphism)

多載 (overloading)

程序多載,同一個名稱但有不同的參數

運算子多載
operator

強制同型 (coercions)

二大抽象

interface

abstract

六大原則:SOLID

S:單一職責原則,單一類別單一責任、低耦合 (Single Responsibility Principle,SRP)

用“職責”或“變化原因”來衡量介面或類別設計,也可以套用到方法

O:開放封閉原則,開放擴充、封閉修改。(Open-Closed Principle,OCP)

應該透過擴展來實做變化,而不是修改已有的程式碼來實作變化

L:里氏替換原則,類別間的相容性。(Liskov’s Substitution Principle)

父類別能出現的地方,子類別就可以出現,而且替換成子類別不會造成錯誤或異常。

L:最少知識原則,(Least Knowledge Principle, LKP),又稱狄米特法則(Law of Demeter, LoD)

一個物件應對其他物件有最少的了解。通俗來說就是我只要知道你提供這麼多public方法,其他我都一概不關心。

I:介面隔離原則,介面要特定目的、易懂、可再用性高。(Interface Segregation Principle)

客戶端不應該依賴他不需要的介面,類別間的依賴關係應該建立在最小的介面上。

D:依賴反轉原則,抽象化。(Dependency Inversion Principle)

高層模組不應依賴低層模組,兩者都應依賴其抽象
抽象不應依賴細節
細節應依賴抽象

一致性開發方式

OOA/OOD/OOP

物件設計原則

Coding Stytle

程式碼命名原則

資料庫設計原則

Framework

3 Layer

3 Layer

3 Layer 職責

3 Layer 優點

3 Layer 缺點

Value Object

物件彼此之間資料傳遞方式

只有屬性,沒有方法

序列化

Data Transfer Object (DTO)

Plain Old Java Object(POJO)

Plain Old CLR Object(POCO)

EF

Log

正確的建立方案

元件的成員

Namespace

命名規則

class

方法(method)

回傳
return

不回傳
void

方法宣告

方法宣告

常數(constant)

欄位(field)

屬性(property)

建構函數(contructor)

解構函數

委派(delegate)

m

事件(event)

m

nest class

轉型

關鍵字

傳值 vs 傳參考

擴充方法

m

泛型

匿名

案例

結論