ASP.NET Object Oriented Programming 物件導向程式開發筆記

文章推薦指數: 80 %
投票人數:10人

筆記關於ASP.NET 物件導向開發的常見的名詞與使用情境. logo. 說明. 物件導向的程式設計,是以物件的互動的方式進行開發,可以提升程式的可維護性, ... 2021-06-09 Dev 說明屬性Property多載Overload建構子Constructor覆寫Override物件的關係RelationshipUSE-AHAS-AIS-A介面Interface靜態修飾Static參考資料相關連結 筆記關於ASP.NET物件導向開發的常見的名詞與使用情境 說明物件導向的程式設計,是以物件的互動的方式進行開發,可以提升程式的可維護性,對於複雜與大規模的系統開發有著更好的管理。

物件導向設計與資料庫的設計息息相關,都是從需求到建立抽象化模型的過程。

而該如何識別類別,可以從需求情境中,找出名詞關鍵字作為實體,動詞作為方法建構出類別。

在類別設計上,需要注意切割責任,保持類別的單一功能,將客戶的地址由primitivetype(string)獨立為Class,讓基於地址的資料(zipCode,city,street..)與方法由類別負責。

屬性Property屬性是公開面對外界的物件資料,依據情境可以提供getter/setter或只提供getter。

屬性背後指向的仍是Field,而Field是封裝在物件之中不提供外界直接存取。

藉由Property可以從Field衍生多種資料。

例如BirthdateField可以衍生為AgeProperty;LastName與FirstNameField可以衍生為組合再一起的FullName。

publicclassPerson { privateDateTime_birthDate; publicintAge=>(DateTime.Now-_birthDate).Days/365; privatestring_lastName; privatestring_firstName; publicstringName=>$"{_firstName},{_lastName}"; } 屬性通常會與驗證做結合,在ASP.NETMVC框架中,搭配DataAnnotations設定屬性的規範,可以在使用EntityFramework時自動進行檢查,同時也將檢查的設定做關注點的分離,非常方便。

多載Overload函式可以同名,但藉由簽名(由參數的型別、順序、數量所構成)的不同提供使用上的便利性,在不同的使用情境選擇使用。

同時多載函式也可以作為對於執行期間的邏輯控制。

然而參數過多的PrimitiveVariable會變得不容易閱讀,應該用Class作為裝載參數。

在ASP.NETMVC框架中,不論是HtmlHelper或者UrlHelper都有提供多載,在創造HtmlTag上具有極佳的彈性。

建構子Constructor建構子可以定義物件被建立時,建立當下要進行的步驟,通常是為屬性進行賦值。

建構子本身也可以Overloadding,依照使用情境提供不同的參數進行建立。

在MVC的Controller中,如果有共通的ViewBag值需要設定,可以創造該Controller的建構子,這樣所有的Action都會有建構子的設定。

覆寫Override類別可以覆寫所繼承(Inherit)或者所實作介面(ImplementInterface)的屬性與方法,未被覆寫的內容達到程式碼重複使用的便利,覆寫的內容則提供了程式設計與擴充上的彈性。

覆寫可以針對類別(Class)、抽象類別(AbstractClass)與介面(Interface)中的屬性或方法進行覆寫,允許被覆寫的屬性與方法須明確以Virtual修飾,否則預設都是不可被子類別複寫的Sealed修飾。

抽象類別的方法與屬性則是以Abstract進行修飾。

MVC提供了許多可供覆寫的元件,許多機制的客製化,就是實作介面並覆寫方法,例如Filter、RouteHandler。

物件的關係RelationshipUSE-A類別之間是使用關係,例如在任務類別中啟用了一個計時器的類別。

publicclassCalculator { publicvoidCaculate() { vartimer=newTimer(); ... } } publicclassTimer { publicDateTimeTime{get;set;} } HAS-A類別之間是擁有關係,例如計算機類別擁有一個CPU類別。

publicclassCalculator { publicstringName{get;set;} publicCPUComputeChip{get;set;} } publicclassCPU { publicstringModel{get;set;} } IS-A類別之間是繼承關係或者實作關係,因此可以使用物件導向中多型(Polymorphism)的功能。

publicclassCalculator:IComputable { publicstringName{get;set;} publicCPUComputeChip{get;set;} publicvoidCompute() { ... } } publicclassCalculator:Object { publicstringName{get;set;} publicoverridestringToString() { returnbase.ToString(); } } 介面Interface MVC中常見的Interface:IActionFilter、IDisposable 靜態修飾Staticstatic可以用於修飾Class形成靜態類別,或者是修飾類別中的屬性與方法。

靜態類別的特性是無法實體化,且其成員(屬性與方法)都被須為static修飾,而靜態類別的屬性與方法可以直接被呼叫。

publicstaticclassHelperMethod { publicstaticintSquareSum(intx,inty)=>x*x+y*y; } staticvoidMain() { Console.WriteLine(HelperMethod.SquareSum(1,5));//26 } 一般類別中的靜態屬性或靜態方法,不是保存在個別的實體化物件之中,而是保存在類別之中,只會有一份資料,可以用於類別與其物件管理上的用途。

publicclassPerson { publicstaticintCount{get;set;} publicstringName{get;set;} publicPerson() { Count+=1; } publicstaticintPersonNumbers{get{returnCount;}} } staticvoidMain() { varp1=newPerson(){Name="Javis"}; varp2=newPerson(){Name="Ted"}; Console.WriteLine(Person.PersonNumbers);//2 } 參考資料Object-OrientedProgrammingFundamentalsinC# 相關連結CourseReview-C#IntermediateClasses,InterfacesandOOP VisualStudio入門教學 Older HTTPHeaderContentSecurityPolicy(CSP) Newer SQLServer記憶體監控(MemoryMonitor) RecentPosts SQLServerDataCompression(Row,Page,ColumnStore&ColumnStoreArchive) AzureDevOpsCIPipelineWithCheckmarx DP-300證照準備心得(MicrosoftAdministeringMicrosoftAzureSQLSolutionsStudyGuide) SQLServer使用AzureStorageAccount備份資料庫(BackupDatabaseToURL) SQLServerAzureSQLSolutions Categories Blog3Cloud2CyberSecurity19Database125Design1Dev159IIS34LearningNote24LifeHack6Microsoft1Misc34Mobile1Network4News1OS60Office11PowerBI8Resource10Toys22TroubleShooting4Vue13 Archives 202217120212432020128 Home Categories Tags Apps About



請為這篇文章評分?