今天在工做的時候,代碼實現的時候,遇到了一個代碼風格的問題。或者說其實我我的更偏向於這多是依賴注入的濫用問題。spring
說說我遇到的狀況: 咱們與國外的同事一塊兒開發項目,同事作了一記錄event log的功能,放到了common包公共代碼中,須要全部微服務中都引入使用。微服務
簡單地說一下這個的實現吧: common包中提供了一個logAgent,須要全部服務註冊這個logAgent並在須要記錄event的時候,調用裏面的相應方法。 logAgent的底層與其餘服務通訊的邏輯使用的是Redisson提供的RBlockingQueue(別糾結技術棧)。工具
隨後這位同事也在我正在開發的項目中加入了這個類的引用與初始化(兩邊有時差,兩邊都有人負責同一個服務的相同的一些功能,美其名曰「充分利用時間」)。學習
等我早上回到公司review代碼的時候,我以爲新增的代碼有點彆扭不太舒服,先說一下爲何我以爲有點彆扭:測試
做爲生產者的看待這個消息隊列的角色,我在這個公共庫的時候,固然是想要準備好配置,初始化好服務類(logAgent),我就能夠往這個橋樑裏放產品了。 但這位同事這個logAgent的實現中,使用Autowired注入了兩個類,分別是設計
在個人服務的配置類中,這位同事註冊了4個類,分別是cdn
我稍微有點微詞。個人想法是應該儘量不要讓這些內部使用,而且內部就能徹底管理好的類暴露在外面來,提供的工具應該儘可能作到簡單配置簡單使用纔對,並且這個複雜的配置邏輯這位同事也沒有準備任何文檔與註釋,因而我就這個問題發郵件問了一下爲何要這麼設計,隨後闡述了一下個人想法,到這裏爲止我也只是微詞而已。對象
而後這是我最後發過去闡述觀點的郵件,我以爲可能我語氣也不太好blog
但最後我收到的郵件讓我炸了:到此我就馬上關掉了郵箱,由於說再多也已經沒用了。 其實以前也有不少關於維護性的、開發流程的、團隊管理的想法我有提出來(肉眼可見的糟糕),也有走人的想法,我最近都在自主學習,因此暫時仍是想着先充實一下知識。 那至少到這裏,我以爲我應該是不太能繼續呆在這個三觀不太符合的公司裏了。接口
我感受我最後收到的回覆的觀點太絕對了,並且做爲一個被其餘代碼調用的公共組件,不是應該儘可能作到高內聚低耦合嗎? 舉個例子:
我想象中的使用場景:
但上面logAgent的調用就像這樣子:
這麼一類比,我更以爲這種實現不合理了,不只代碼調用麻煩,還有用錯的風險,須要提供更多的文檔說明怎麼使用(這位同事沒提供文檔的問題咱就不糾結了,老問題了)。
我仍是認爲,不只是這種公共jar包提供的組件,項目內部的各類Service、Manager、Helper、Handler、etc.
真的不該該把一些本該對外隱藏的私有組件,交給spring管理,尤爲是這個組件上還保存着狀態信息的,意味着這些組件不只要設置成privite,對外的操做也須要封裝好方法,否則組件裏面的狀態被其餘類經過注入取到並隨意改變後,整個業務邏輯就不對了,不是嗎?
固然我也很想知道我這樣的想法到底有沒有問題,真的須要把什麼東西都丟給Spring管理嗎?歡迎你們告訴我一下大家的想法,謝謝。