更改Java包名稱如何改變我的系統架構

即使只是少量更改角度,也可能對您如何使用系統產生深遠影響。
假設您正在用Java編寫Web應用程序。 在系統中,您處理訂單,客戶和產品。 作為Web應用程序,您的類包括諸如Controller,PersonRepository,CustomerController和OrderService之類的訂書釘。 您如何將課程組織成包?
有兩種基本的方法來構建軟件包。 您可以專注于邏輯層,例如com.brodwall.myapp.controllers,com.brodwall.myapp.domain或com.brodwall.myapp.services.customer。 或者,您可以專注于域上下文,例如com.brodwall.myapp.customer,com.brodwall.myapp.orders和com.brodwall.myapp.products。 迄今為止,第一種方法最為普遍。 在我看來,它也是最沒有幫助的。
如果您圍繞領域概念而不是技術層來構建軟件包,則可以通過以下幾種方式改變思維:
首先,也是最根本的,您的思維模型現在將與系統用戶的思維模型保持一致。 如果要求您實現典型功能,那么現在很可能將重點放在系統軟件包的嚴格子集中。 例如,向表單添加新字段將至少影響相應域概念的表示邏輯,實體和持久層。 如果您的軟件包是圍繞層組織的,則此更改將影響整個系統。 一句話:圍繞功能而非技術組織的系統具有更高的一致性。 這個技術術語意味著一個類的大部分依賴項都位于該類附近。
其次,隨著軟件的發展,圍繞領域概念進行組織將為您提供更多選擇。 當一個程序包包含數十個類時,您可能需要將其拆分為幾個程序包。 討論本身可以啟發人。 “也許我們應該將客戶地址類別分離到com.brodwall.myapp.customer.address包中。 它似乎有自己的生活。” “是的,也許我們可以在需要地址的其他地方使用相同的類,例如供應商?” “很酷,那么com.brodwall.myapp.address呢?” 或者,也許您認為應該將訂單狀態代碼和付款狀態代碼放在“ com.brodwall.myapp.order.codes”包中。
另一方面,您有什么選擇拆分com.brodwall.myapp.controllers? 您可以為客戶,訂單和產品創建子包,但是這些子包可能只具有一個或兩個類。
最后,也許是最有趣的是,使用領域概念進行包裝可以使您根據具體情況改變設計。 也許您確實需要一個OrderService來協調訂單的付款和運輸,而ProductController僅需要帶有存儲庫的基本create-retrieve-update-delete功能。 一個ProductService只會給您帶來麻煩。 如果com.brodwall.myapp.services包中缺少ProductService,這可能會造成混淆,或者至少會給您帶來麻煩的感覺,那就是出現了問題。 另一方面,如果com.brodwall.myapp.product程序包中沒有控制器,則沒關系。
而且,大多數系統都有一些不錯的零件,而有些則不太好。 如果您的服務包對您不起作用,那么您將無能為力。 但是,如果“產品”程序包爛了,您可以將其丟棄并重新實現它,而不會使整個系統陷入混亂狀態。
通過將實現某個功能所需的類彼此放在一起,并與實現其他功能所需的類分開,開發人員在開發一個功能時可以務實和創新,而不會負面影響其他功能。
不利的一面是,大多數開發人員對應用程序中的某些技術更滿意,而對其他技術則較不滿意。 圍繞功能而非技術進行組織會迫使每個開發人員考慮更多的技術挑戰。 有些程序員將其視為學習的動力,而其他程序員似乎寧愿不必學習新知識。
如果花我的錢來創建功能,我就知道我想要什么樣的開發人員。
細微的變化會產生很大的影響。 通過圍繞功能組織軟件,您將獲得一個更加一致的系統,可以進行擴展。 它可能會給您的開發人員帶來挑戰,但會降低實現功能所需的交接數量,并會挑戰開發人員以改善他們正在處理的應用程序部分。
參考: Java 合伙人 Johannes Brodwall在“ 更大的盒子里的思考”博客中的更改Java包名稱如何改變了我的系統架構 。

翻譯自: https://www.javacodegeeks.com/2012/07/how-changing-java-package-names.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

靜態屬性_Java面試題—內部類和靜態內部類的區別

內部類和靜態內部類的區別內部類:1、內部類中的變量和方法不能聲明為靜態的。2、內部類實例化:B是A的內部類,實例化B:A.B b new A().new B()。3、內部類可以引用外部類的靜態或者非靜態屬性及方法。靜態內部類:1、靜態…

儲存與更新 access_token

做微信的項目,一開始就是 access_token 的申請,微信文檔上寫的比較清楚: 1、為了保密appsecrect,第三方需要一個access_token獲取和刷新的中控服務器。而其他業務邏輯服務器所使用的access_token均來自于該中控服務器,…

Eclipse安裝以及JDK環境變量配置

首先是下載Eclipse;點擊鏈接打開Eclipse官網eclipse官網點擊DownLoad Packages,注意是點擊“DownLoad Packages”點擊你需要的版本開始下載(一般是64bit Eclipse IDE)等待幾秒鐘,開始下載這樣Eclipse已經下載好了&…

完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

我們創建了這篇文章,將展示如何使用以下工具創建完整的Web應用程序:Tomcat7,帶有Primefaces的JSF2(Facelets和Libraries)(具有AutoComplete),JPA / Hibernate(具有NxN關系…

mysql主從架構升級_實戰項目——mysql主從架構的實現

一主一從1.1 環境準備:centos系統服務器2臺、 一臺用戶做Mysql主服務器, 一臺用于做Mysql從服務器, 配置好yum源、 防火墻關閉、 各節點時鐘服務同步、 各節點之間可以通過主機名互相通信1.2 準備步驟:1)iptables -F && s…

FastReport.Net使用:[30]對話框使用

使用對話框需要知道的地方 1.按鈕的DialogResult屬性。 假如DialogResult屬性值為OK的按鈕被點擊,報表將會展現后面的對話框或者報表頁;如果屬性值為None,則停留在當前窗體;如果為其他值,則直接退出報表打印&#xff0…

模擬聊天室顯示語句保持最新顯示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>模擬聊天室顯示語句保持最新顯示</title> <style> *{ border-collapse: collapse; } .dialog_box{ width:400px; height: 600px; margin…

改善Java EE生產支持技能的8種方法

參與Java EE生產支持的每個人都知道這項工作可能很困難。 7/24傳呼機支持&#xff0c;定期處理的多個事件和錯誤修復&#xff0c;來自客戶和管理團隊的壓力&#xff0c;要求它們盡快解決生產問題并防止再次發生。 在日常工作中&#xff0c;您還必須照顧由多個IT交付團隊驅動的多…

plsql連接mysql_安裝了mysql和pl/sql,怎么配置讓pl/sql能聯接mysql數據庫

64位環境下&#xff0c;使用PL/SQL Developer連接Oracle&#xff1a;?1. 下載32位Oracle InstantClient&#xff0c;并展開到某目錄&#xff0c;例如C:\instantclient-basic-nt-11.2.0.2.0&#xff1b;?2. 將系統的tnsnames.ora拷貝到該目錄下&#xff1b;?3. 在PLSQL Devel…

varnish基礎

varnish概念 初步認識 首先來跟我學習&#xff0c;v~a~r~n~i~s~h~~ &#xff0c;學會了沒有~ 當然還有很重要的一個概念&#xff0c;它是高性能緩存服務器&#xff0c;舉個例子。 好比我們要去買東西&#xff0c;所有的我們需要的東西是在超市廠家生產出來的&#xff0c;我們需…

引入Spring集成

在本文中&#xff0c;我們介紹Spring Integration 。 如果您以前沒有使用過Spring Integration&#xff0c;那么可能會幫助您復習Gregor Hohpe的Enterprise Integration Patterns 。 我還將推薦Josh Long 撰寫的這篇出色的介紹性文章 。 上下文設置 簡而言之&#xff0c; 企業…

PAT 1024. 科學計數法 (20)

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法&#xff0c;其滿足正則表達式[-][1-9]"."[0-9]E[-][0-9]&#xff0c;即數字的整數部分只有1位&#xff0c;小數部分至少有1位&#xff0c;該數字及其指數部分的正負號即使對正數也必定明確給出。 現以科…

Mac上Hive環境搭建

本文介紹在Mac上搭建Hive環境。 建議首先配置好Hadoop&#xff0c;搭建與配置可以參考我之前的博文Mac Hadoop的安裝與配置。 當然你也可以選擇使用Docker搭建環境&#xff0c;本文不作介紹。 安裝 對于MacOs&#xff0c;推薦使用HomeBrew安裝hive&#xff0c;一步到位。 $ bre…

mysql+創建備份賬戶_mysql 添加用戶,授予權限,數據庫備份等 (轉載)

一&#xff0c;連接MySQL格式&#xff1a;mysql -h 遠程主機地址 -u 用戶名 -p 回車輸入密碼進入&#xff1a;mysql -u root -p 回車Enter password: ,輸入密碼就可以進入mysql> 進入了退出命令:>exit 或者ctrlD二&#xff0c;MySQL管理與授權1.修改密碼&#xff1a;格式…

分代緩存和轉換

康拉德&#xff08;Konrad&#xff09;最近在我們公司的技術室中分享了有關如何完成緩存的有趣文章&#xff0c;這是一個大型的波蘭社交網絡nk.pl。 算法中的核心概念之一是分代緩存 &#xff08;請參閱此處或此處 &#xff09;。 基本思想是&#xff0c;對于緩存鍵&#xff0c…

css精靈

○ css 精靈&#xff08;Sprites&#xff09;技術利用photoshop將圖片整合&#xff0c;然后用background-images&#xff0c;background-position&#xff0c;background-repeat技術&#xff0c;對圖片進行精確定位。 ○ 優點&#xff1a;減少http請求數量&#xff0c;減少服務…

基于Jenkins+Gitlab的自動化部署實戰

故事背景 一個中小型企業&#xff0c;是典型的互聯網公司&#xff0c;當初期的時候可能運維只能標配到2~3人&#xff0c;此時隨著公司的發展&#xff0c;項目會逐漸增多。前期部署項目可能都是手動的&#xff0c; 俗稱“人肉部署”&#xff0c;這簡直是無比的痛苦&#xff0c;不…

cmd如何刷新MySQL數據庫_怎樣在cmd中用命令操作MySQL數據庫 需要技巧

用命令來操作MySQL是工作必備的&#xff0c;今天我就來分享一下cmd命令操作MySQL數據庫的方法&#xff0c;希望有幫助。工具/材料電腦xampp操作方法01首先&#xff0c;啟動MySQL服務才行哦。這里我是用xampp集成的數據庫&#xff0c;方便&#xff0c;點擊‘start’。02如圖&…

Java順序IO性能

許多應用程序將一系列事件記錄到基于文件的存儲中&#xff0c;以供以后使用。 從日志記錄和審核&#xff0c;直到在事件源設計或其緊密相關的CQRS中保留事務重做日志&#xff0c;這都可以是任何東西。 Java具有多種方法&#xff0c;可以通過這些方法將文件順序寫入或重新讀取。…

text段,data段,bss段,堆和棧

.bss段和.data段的區別 text段,data段,bss段,堆和棧轉載于:https://www.cnblogs.com/jingzhishen/p/6203107.html