亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶接口的 Spring 目錄結構(最佳實踐)

帶接口的 Spring 目錄結構(最佳實踐)

慕斯709654 2022-06-15 16:38:09
我目前正在編寫我的第一個 Spring 應用程序(Spring boot + hibernate)。我在這里查看了他們文檔中的最佳實踐目錄結構。這說得通。問題一:我有一個interface(或Abstract class)幾個子類擴展的,所以我只需要一個@Repository父類。我決定這樣做:com +- example     +- myapplication         +- Application.java         |         +- message         |   +- AbstractMessage.java         |   +- IMessageRepository.java         |   +- MessageRepositoryImpl.java                +- messageTypeA                |  +- messageTypeA.java                |  +- messageTypeAService.java                +- messageTypeB                |  +- messageTypeB.java                |  +- messageTypeBService.java問題2:現在我有一個新entity的要保存的名稱Group。所以我能做的就是添加一個Group與Message. 然而,這Group實際上是(就像邏輯上的)的一部分,所以如果它是同一個目錄的Message一部分實際上是有意義的(我們將它們保存為不同實體的唯一原因是因為以這種方式派生分析更有意義)。此外,我什至使用相同的方法來保存它(我只是在界面中添加了第二種方法,如下所示:)messageMessageRepositorypublic interface MessageRepository {    void insert(AbstractMessage message);    void insert(AbstractMessage message, AbstractGroup group);}像下面這樣的東西會好嗎?或者每個 entity人都應該有自己的包裹?這是我想太多了嗎?com +- example     +- myapplication         +- Application.java         |         +- message         |   +- AbstractMessage.java         |   +- IMessageRepository.java         |   +- MessageRepositoryImpl.java             |  +- messageTypeA             |     +- messageTypeA.java             |     +- messageTypeAService.java             |  +- messageTypeB             |     +- messageTypeB.java             |     +- messageTypeBService.java             |             +- group                +- AbstractGroup.java                +- GroupTypeX.java // same service as message, just different entity                +- GroupTypeY.java // same service as message, just different entity
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

這更多是基于意見的事情,但我想給你一些建議。


首先,命名。

接口上的I前綴是 IBM 用來識別它們的“古老”技術。請不要那樣做,這是多余的,在新鮮的環境中沒有意義。什么是I-MessageRepository?!您會在項目或 IBM 的任何產品

中發現這種命名約定。Eclipse RCP


然后是實現名稱。不要使用Impl后綴,它對閱讀或編輯代碼的人沒有任何意義。

給它一個名稱,說明它的用途或域范圍是什么。


ActiveMQMessageRepository

FileMessageRepository

TcpMessageRepository

第二,Repositories。

存儲庫應該管理一種類型的對象,不超過一個。用于Services協調多個Repositories. 這樣可以方便大家調試,也可以解耦很多代碼。


第三,packages。

嘗試始終采用扁平封裝結構。扁平結構更易于維護、更易于查看、更易于理解。不要創建幾十個子包,例如


- messages

   - services

       MessageService

     - implementations

        ...

   - repositories

       MessageRepository

     - abstract

         AbstractMessageRepository

     - implementations

         TextMessageRepository

   - exceptions

     - runtime

     - checked

         UnsupportedMessageException

可怕而無用。而且你不能利用包的可見性。


因此,將messages和groups放在單獨的包中,并給它們自己的Repository.


從包中公開接口,而不是具體實現。(若有可能)


查看完整回答
反對 回復 2022-06-15
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

我同意上面的@LppEdd 回答。只是一個問題你說的時候是什么意思

(我們將它們保存為不同實體的唯一原因是因為以這種方式派生分析更有意義)。


查看完整回答
反對 回復 2022-06-15
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號