深入的了解面向對象編程
所謂面向對象變成,相信大家都知道,但我們在寫(xiě)代碼是否有這樣做呢?比如在實(shí)際項目中,我們會(huì )對數據庫進(jìn)行一些操作,如果我們對面向對象了解的不夠深,就很有可能會(huì )局限于以數據庫為中心的思路進(jìn)行編程。拿數據庫和實(shí)體類(lèi)來(lái)說(shuō),它們分別對應物理模型和類(lèi)圖模型,而且之間應該是可以互相轉換的,之前我一般會(huì )先設計好物理模型生成SQL語(yǔ)句創(chuàng )建數據庫,然后在轉換生成實(shí)體類(lèi)。而使用Hibernate這個(gè)ORM框架,建好實(shí)體類(lèi)后可反向創(chuàng )建數據庫表,更精彩的是Java里可以使用注解來(lái)標識實(shí)體類(lèi)或屬性對應的數據庫表或列,通過(guò)Spring接管代理后,通過(guò)XML配置可在初始化時(shí)把實(shí)體類(lèi)同步到數據庫表結構,甚至可根據實(shí)體對象的關(guān)系(如一對多、多對多)自動(dòng)生成主外建關(guān)系,自動(dòng)創(chuàng )建數據庫。
Hibernate實(shí)體類(lèi)(包含ManyToOne和ManyToMany關(guān)系,使用@代碼注解代替繁雜的XML配置)
面向接口編程,依賴(lài)注入接口的實(shí)例
所謂接口,旨在提供一種約束規范,它要求實(shí)現類(lèi)必須實(shí)現接口內所有方法或屬性。我們常說(shuō)的提供一個(gè)接口,但其實(shí)是提供一個(gè)接口的實(shí)例,只不過(guò)應該是以接口形式返回的,接口類(lèi)里只有方法或屬性的申明,所以我們不必要關(guān)注里面的實(shí)現,這樣可促進(jìn)各模塊的松耦合。Spring里有一種稱(chēng)作控制反轉(IOC)的技術(shù),其中很多的地方就是使用接口,先通過(guò)容器配置管理一個(gè)bean實(shí)例(一般為singleton模式),然后再使用set方法或構造函數進(jìn)行注入實(shí)例。
三層架構表現層(MVC)、業(yè)務(wù)邏輯層、持久層
傳統的三層應該是表現層、業(yè)務(wù)邏輯層、持久層,根據項目需求的不同可能層次會(huì )更細分,但一般應該保證有這三層的明確分工,如下圖:

但這里應該跟MVC三層區分開(kāi)來(lái),因為MVC應該是表現層一層,拿Struts來(lái)說(shuō),M(Model)應該是Action Form,V(View)應該是jsp頁(yè)面,C(Control)應該是Struts Action。而如果使用Spring框架的話(huà),當然也可以把Struts整合在一起,但Spring本身有提供DispatcherServlet控制分發(fā)器,可以直接把請求交給指定類(lèi)處理,并可以根據不同URL參數響應不同方法,加上可以使用@代碼注解,所以很方便實(shí)用。Spring同時(shí)還能整合Hibernate,構成目前JavaWeb開(kāi)發(fā)領(lǐng)域最流行的框架SSH,Spring在其中沖當著(zhù)控制管理的核心作用,詳細流程如下圖所示:

相比Java,.Net則是本身提供了一個(gè)強大的平臺,在表現層,aspx頁(yè)面則是屬于View,aspx.cs相當于每個(gè)頁(yè)面的控制層Control,依賴(lài)于.Net里強大的服務(wù)器控件,很容易在cs里控制aspx頁(yè)面輸出的內容,一般直接可以很方便通過(guò)控件ID獲取值,因此View在到Control層前很少對Model進(jìn)行填充轉換,不過(guò)到持久化寫(xiě)入數據庫還是依賴(lài)Model實(shí)體,因此Model層轉換還是必須的,但目前我還沒(méi)有用過(guò).Net自動(dòng)轉換Model層的框架
聯(lián)系客服