[英]Java architecture coding conventions
我現在在幾家不同的公司工作,每個人都有關於如何命名類和包的不同規則。 它們各自具有不同的包布局和類之間的工作流程。 通過這些經歷,我了解了如何布局項目; 但是,我想更具體地定義如何布局項目。 這個問題更多的是關於uml而不是關於命名約定。
我很好奇的是關於以下內容的官方架構定義是什么(我已經看到幫助器用作實用程序和管理器用作幫助程序等)。
對我來說:
幫助程序是一個外觀,或者它編碼/解碼特定的數據格式,並且在調用之間沒有狀態。
實用程序用於編碼/解碼格式或執行IO,如果創建連接,則通常不會保持連接或在調用之間保持文件打開。
管理員就像一個助手,但確實在通話之間有狀態。
Factory是一個獲取或創建然后返回一個對象(自定義對象或API對象)的類。
簡單和默認通常只是指基類。
我的“類”往往用於預先傳播的想法和代碼示例,盡管它有時用於生產代碼,例如MyApplication和MyView(主要用於命名單例)。
這些類名實際上是。 這些是我最常創建和看到的含義,但經常會出現矛盾的命名方案和不一致。 它們不是正式的設計模式名稱,在實踐中,任何這些名稱的選擇似乎幾乎是任意的。 有些人用它們中的一個來標記所有類的線程安全的類,以及那些與另一個不同的類。
通常我也會看到一個“管理器”名稱被賦予一個類,該類使用對象或鍵執行ORM函數,或者對仲裁連接的對象執行。
編輯
我看到一個構建在框架上的應用程序通常具有以下主要對象:
我認為專注於最大化可測試性並最小化這些接口的表面積比包命名和文件命名更重要; 我認為您應該按照自己的想法為您的項目進行詳細的細分和命名。 將代碼拆分為用於SCM目的的不同文件對於上面多個子彈所依賴的共享文件特別重要。
編輯
我使用單身,飛重,復合,迭代器,紀念品,觀察者,狀態,策略作為例行事項。 我使用Facade,代理,模塊之間和UI代碼中的責任鏈。 我偶爾會在復雜的數據系統中使用工廠,原型和構建器,在系統特別復雜的概念上使用模板和訪問者。 當行為復雜時,偶爾會使用適配器,橋接器,工廠,抽象工廠,裝飾器。 我很少使用Interpreter,我使用mediator來幫助我在某些情況下編寫更多通用代碼。 我個人並不喜歡在GoF之后命名我的課程,但很多人都很高興,這可能是一個好主意,我並不反對這種做法。 它可以是非常有用的,如果它讓人們開心,它確實幫助每個人清楚地知道在特定情況下發生了什么,那就太棒了。
我只是覺得調用我的app對象是Singleton,Composite或ChainOfResponsibilityLink(?)感覺並不好,並且調用我的網絡和數據庫代碼Adapters感覺並不好,所以我稱之為Managers。 而且我在GoF,Helpers或Utilities下調用了許多應該稱為Facades的東西,因為我覺得它更清楚意味着什么。
你通常會看到很多這些術語被拋出,但沒有任何官方標准。 我實際上會說其中一些是不好的做法。 很多時候“幫助”和“經理”類都是做得太多的類,並且應該是其他地方的行為。
我不認為你會發現這些術語的“官方”定義,因為它們對不同的人意味着不同的東西。 名字可能很難,因為雖然它們最終是任意的,但是有一個名稱可以精確而簡潔地描述一個類的角色是一個很好的目標。 GoF設計模式書是一個很好的建議。 如果您想要更加以Java為中心的東西,您可能還想查看核心J2EE模式。
從我所看到的,項目的包布局更加依賴於代碼的功能,而不是它的類型(即java.awt.image,java.awt.font而不是java.awt.utils, java.awt.singletons)。
實際上沒有標准用於命名包並決定這些包中存在哪些類型的類。 這完全取決於您的偏好以及對您有意義的事情。 雖然在組環境中,包命名和每個包中屬於哪種類型的類通常會在設計會議期間決定,其中組可以通過共識來達成決策。 或者你可以為一個控制狂來工作,他們做了什么事情或者沒辦法,他們為你決定。
我認為任何一個叫做FooManager的類都是OO系統中最值得懷疑的設計。 它們往往是大量州的地方,並保留了許多全局變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.