我在單獨的類庫上使用了BLL,DLL和BE(業務實體)的WCF服務。爲不同類型的項目抽象BLL,DLL和BE的最佳實踐
我想使用上面的BLL,DLL和BE作爲其他項目類型,如控制檯應用程序,Web應用程序和Azure工作人員角色等。原因是所有這些應用程序使用相同的數據源和一些相同的BE 。
任何人都可以請建議,如果上述方法是最好的模式使用?或者我應該在它自己的每個項目類型上創建單獨的BLL和DLL。
謝謝堆。
我在單獨的類庫上使用了BLL,DLL和BE(業務實體)的WCF服務。爲不同類型的項目抽象BLL,DLL和BE的最佳實踐
我想使用上面的BLL,DLL和BE作爲其他項目類型,如控制檯應用程序,Web應用程序和Azure工作人員角色等。原因是所有這些應用程序使用相同的數據源和一些相同的BE 。
任何人都可以請建議,如果上述方法是最好的模式使用?或者我應該在它自己的每個項目類型上創建單獨的BLL和DLL。
謝謝堆。
有幾種共享邏輯的方法:
直接引用其他項目中的DLL。對於共享的代碼,將輸出調整爲共享目錄。首先編譯共享邏輯,然後在需要此邏輯的項目中,只需添加一個DLL引用即可。
鏈接源代碼管理文件。 Visual Studio允許鏈接其他項目中的源代碼控制文件。我已經做了幾次,但它可能會讓人有點困惑,因爲源文件已鏈接。要進行更改,請更新項目中未鏈接的源文件,然後所有項目都將在鏈接到源控制文件時進行更新。
通過接口實施合同。不是直接引用代碼,而是每個BLL,DLL,BE通過Contract DLL公開一個接口。然後,使用BLL,DLL,BE的項目引用合約DLL(不是直接實際的DLL)並使用該接口。這是一個鬆散耦合的模型。要使用它,可以使用UNITY或MEF或任何其他類型的框架來幫助將鬆散耦合的組件綁定在一起。關於這一點的好處是你的代碼只是共享接口而不是實際的實現,所以它可以在未來變得很容易。
我的建議是,如果您的實現頻繁更改,最好使用鬆散耦合的系統。如果共享的邏輯不會改變,那麼使用前兩個選項去更緊密的耦合系統。
感謝Jon Raynor,我試着創建Contract DLL,但是當我試圖在DLL上實現契約時(這是因爲契約使用DLL來引用由Entity Framework創建的幾個對象)時,它給出循環引用錯誤。有沒有解決這個問題,還是我做得不對? –
合同DLL不應該有任何依賴項,除非接口正在接受特定類型的參數。這聽起來像接口期望其方法簽名中的一些實體框架對象。嘗試使接口儘可能通用,而不參考其他DLL。根據目前的設計可能無法實現。例如,一個好的界面就是Save(Employee e)。現在接口中沒有實體框架引用,實現者可以使用實體框架來保存,但接口本身沒有直接的參考。 HTH。 –
謝謝#Jon Raynor,理解:-) –