MyBatis知多少(6)表现层与业务逻辑层
?
?
?
?
?
?
?
?
?
?
?
?
?
表現層
表現層負責向最終用戶展示應用程序的控制方式以及數據。它還要負責所有信息的布局和格式。今天,商業應用程序最流行的表現方式應該算是Web前端了,它使用HTML和JavaScript并通 過Web瀏覽器來滿足用戶的界面外觀需求。
Web應用程序的優勢包括跨平臺兼容性、易部署和可擴展。amazon.com就是Web應用程序的—個極好的例子,它允許你在線購書。這就是Web應用程序的一個絕佳應用,因為不可能要求用 戶為了買一本書而去下載一個應用程序。
當需要高級的用戶控件或者復雜的數據操縱時,Web應用程序通常就無法勝任了。在這些情況下,使用本機操作系統小部件(如tab、table、treeView和嵌入式對象)的富客戶端就體現出了 它的優勢。富客戶端允許一個強大得多的用戶界面,但它往往更難部署,且要達到與Web應用程序相同級別的性能和安全性需要開發人員花費更多的精力。富客戶端技術的例子包括Java的Swing等。
最近,Web應用程序和富客戶端這兩個概念被混合了起來,形成了所謂的“混合型客戶端”, “混合型客戶端”試圖同時獲得Web應用程序和富客戶端兩者的優點。一些非常小且使用了一些髙級控件的富客戶端可能通過Web瀏覽器被悄悄地下載到用戶的桌面。這個混合型的富客戶端不包含任何業務邏輯,甚至可能連用戶界面的布局都不是內建好的。相反,應用程序的界面外觀以 及可用的業務功能都是通過一個Web服務,或者把XML用作客戶端與服務器間接口的Web應用程序來配置的。這種方式唯一的缺點就是開發和部署這樣的應用程序需要額外的軟件。
接下來當然就有了所謂混合型表現層的典型案例,即Ajax。它曾經是Asynchronous JavaScript and XML (異步JavaScript和XML)的首字母縮寫,但現在所有 人都意識到它既不需要異步,也并非只能使用XML,所以現在Ajax代表的僅僅是“一種基于Web 的富客戶界面,由大量非常巧妙的JavaScript所驅動”。Ajax是使用舊技術構建內容豐富且交互性強的用戶界面的一種新方法。Google很好地檢釋了Ajax技術,例如在Gmail、Google Maps和Google Calendar這樣的應用程序中就充分利用了這種技術。
MyBatis既可用于Web應用程序和富客戶端應用程序,也可用于混合型應用程序。雖然表現層通常不會直接與持久化框架“交流”,但用戶界面設計時的某些決定還是會影響你對持久層的需 求。舉個例子,考慮一個Web應用程序,它需要處理一個包含5000條記錄的大型列表。我們不可能需要同時顯示出所有這5000條記錄,而且如果我們不是立即需要使用它們,那么同時從數據 庫中加載這5000條記錄也不是什么好主意。一個更好的方案可能是一次只加載和顯示10條記錄。 這樣的話,持久層就需要能夠在返回數據的數量上允許一定的靈活性,甚至提供選擇和獲取我們 希望的10條記錄的能力。這樣就可以避免不必要的對象創建和數據獲取,減少應用程序的網絡訪 問量和內存需求,進而提高應用程序的性能。MyBatis允許只查詢某個特定范圍內的數據,這樣的 特性就可以幫助我們達到以上這些目的。
業務邏輯層
應用程序的業務邏輯層描述了應用程序所能提供的“粗粒度”的服務。正是這個原因,業 務邏輯層中的類有時也被稱為服務類。從較高的層次來看,任何人都應該能看懂業務邏輯層中的類和方法進而明白系統到底要做什么。舉個例子,在一個銀行應用程序中,業務邏輯層可能就會包含名為TellerService的類,其中包括像openAccount ()、deposit () withdrawal () 和getBalance()這樣的方法。這些都是非常大的功能,涉及復雜的數據庫交互甚至可能是與其他系統的交互。這些方法太重了,不適合放在領域類中,否則代碼很可能馬上就會變得耦合、 并且通常會難以管理。解決方案就是將這些粗粒度的業務方法從與它們相關的業務對象模型中分離出來。這種業務邏輯類與對象模型類的分離有時也被稱為“名詞與動詞的分離''。
純面向對象論者可能會說,這樣的設計不夠面向對象,將業務方法直接放在相關的領域類中才更加面向對象。不論哪種方式更面向對象,能將關注點分離才是一個更好的設計選擇。 其中的主要原因還是在于業務方法通常都非常復雜。它們通常都涉及不止一個類,處理不止 一種基礎組件這些基礎組件可能包括數據庫、消息隊列和其他系統。更重要的是,一個業務功能往往涉及許多領域類,那么該方法到底應該屬于哪個類呢, 的確難以決定。也正是由于這些原因,粗粒度的業務功能最好還是實現為業務邏輯層中某個類的方法。
不要害怕把那些粒度更細的業務邏輯放到相關的領域類中。業務邏輯層中那些粗粒度的服務 方法可以自由地調用內建在領域類中的細粒度的純邏輯方法。
在我們的分層架構中,業務邏輯層是持久層服務的消費者。它調用持久層的方法來獲取數據和修改數據。業務邏輯層也是事務定界的最佳場所,因為其中定義的粗粒度業務功能可以供許多 不同的用戶界面使用,甚至還可能被像Web服務這樣的一些其他接口使用。
系列文章:
MyBatis知多少(1)
MyBatis知多少(2)
MyBatis知多少(3)
MyBatis知多少(4)MyBatis的優勢
MyBatis知多少(5)業務對象模型
轉載于:https://www.cnblogs.com/Coda/p/4643757.html
總結
以上是生活随笔為你收集整理的MyBatis知多少(6)表现层与业务逻辑层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5 css3中的一些笔记
- 下一篇: Android开发UI之Fragment