2011-10-16 28 views
1

我剛開始將我的代碼重構爲多個程序集,並且感覺在放置位置以及如何命名它們時感覺有點失落。到目前爲止,我已經將所有常見的課程放在一個單一的圖書館中,但現在是時候推進這個課程。要放哪個庫?

那麼幾個例子/問題,我的頭開始:

  1. 兩個班,IMessageBus和MessageBus,這是通用的EventAggregator,允許任何類型的消息的訂閱和發佈。可以用於任何項目。在哪裏放這些類?什麼來命名文庫,還有什麼可以屬於這個庫?

  2. 那麼常見的.net類型的擴展方法的模塊,你會把所有這些在一個單一的庫?也許我迷失在正確的東西移動到圖書館的理由或不,我基本上只是想「重用」。因此,如果能夠注意到一些更加智能的簡要規則,將會有所幫助。


編輯:

是我的理由是種模糊的,這就是爲什麼我期待的意見。當然,一個共同的圖書館滿足重複使用,所以應該有其他理由。我正在製作一些應用程序,它們都使用相同的通用庫。一個應用程序將分發給外部用戶,因此我必須強制他們更新,當我發現錯誤。出於這個原因,我想有時候我可能無法知道一個bug是否會影響該程序,因爲我不記得公共庫的哪個部分被利用。因此,如果我擁有許多較小的庫,可能會更容易確定哪些程序受到影響,以避免推送不必要的更新。 (?)順便說一句,我不是爲消費者編程,所以我自己管理所有的分配。

回答

1

只有在需要時纔會拆分。

與命名類型,變量,文件等一樣:如果您不知道如何調用它,請不要創建它。這是一個不知道它是什麼以及它的目的是什麼的跡象。

理由分裂是:獨立的版本,不同的部署和隱藏類型使用「內部」

0

嘗試按類似的目的對它們進行分組。例如,你可以把所有的消息傳遞給一個名爲YourCompany.Messaging的dll。

0

如果你要走這條路,就把東西放入相關組件的庫中。不過要謹慎分割東西來分割東西。你沒有提到爲什麼「現在是時候推進」。你在尋求什麼具體收益?公共圖書館是否「變得太大」?你是否有想要暴露給外部組織而沒有給他們整個堆棧的東西?部署是一個問題,因爲需要修補的應用程序數量很大?

分組事物相關形式是一個很好的經驗通用規則,但不知道分手的原因,這就是所有你會得到什麼。 :)

擴展新信息: 由於這個原因,我想有時候我可能無法知道一個錯誤是否會影響該程序,因爲我不記得公共庫的哪個部分正確使用。因此,如果我擁有許多較小的庫,可能會更容易確定哪些程序受到影響,以避免推送不必要的更新。

物理隔離可能不會幫助你所有的東西,與上面的。在我看來,如果「發現這部分」是一個令人關注的真正原因,然後你的庫中你違反了單一職責原則(SRP),你可能還沒有編碼對接口或使用單元測試。

在組件中使用名稱空間可以儘可能多地分離組織。在我看來,將事情分解成類庫的理由主要是爲了共享,修補和隱藏(通過內部)你不想讓別人接觸的東西。當然,如果你有一些代碼存在於程序A但不是B中,那麼這是一個非常容易分離的候選項。

+0

乾杯!請參閱更新。我認爲錯誤修復的傳播可能是這樣做的理由。 – bretddog

0

我一般儘量保持對事物的數量最少的組件成爲可能,但也有分裂組件的幾個重要原因。

當我寫一個客戶機/服務器的解決方案,我將通常具有3個組件,一個用於客戶端,一個用於服務器,以及表示在兩者之間共享對象一個第三項目。客戶端和服務器都將引用共享項目,但不是彼此。

我拆分程序集的另一個原因是允許其他用戶擴展我的工作。在這種情況下,我將與代碼在它的膽量主體工程,並暴露了第三方利用寫「插件」爲主要應用的接口和基類第2個項目。這允許第三方只需引用接口程序集而不需要訪問主程序。