簡體   English   中英

在單獨的項目和單獨的命名空間中組織代碼

[英]Organizing code in separate Projects vs separate Namespaces

我在.net c#應用程序中工作,該應用程序包含2個客戶端和服務器解決方案。 在服務器端,有80多個項目用於分隔以下建築圖層,

  • 基礎設施層
  • 集成層(外部系統)
  • 域層
  • 存儲庫層
  • 經理層
  • 服務層

此外,幾乎每個層都有測試項目。現在,解決方案的構建時間需要2到3分鍾,許多開發人員(包括我:))覺得我們需要解決這個問題。

因此,提出的解決方案是通過合並項目來減少項目數量。在我看來,這可能是一個很好的解決方案,可以最大限度地縮短構建時間,我們可以實現我們想要的目標。

提出的解決方案是我們將項目合並為3個區域,例如一個用於生產代碼的庫,一個用於測試代碼的庫,一個用於部署項目(WCF主機等)以及通過分隔命名空間在同一項目中邏輯划分的層。

但是,我擔心的是

  1. 這些分離是否有利於可維護性? 為每個命名空間appox提供更多類的hundread。
  2. 如果我們有共同的功能,如助手,我們把它們放在哪里?

有沒有其他方法來分層解決方案?

為什么80多個項目,而您的應用程序中只有6層?

您可能會回答它們涵蓋了大量功能區域,但您是否首先需要在一個解決方案中使用所有這些功能區域?

我建議將建築部門與項目和功能部門一起反映出來。 不同的解決方案可以重用相同的項目 這樣,每個可重用的體系結構層都有一個項目,並且有多個Domain項目和功能區域。

我想你應該在邏輯層中拆分你的解決方案。

作為你在哪里幫助的一部分。 在最低級別之一上為其制定解決方案。

農場軟件。 你需要跟蹤你的動物和蔬菜。 您需要一個用於喂養動物的模塊和一個用於將動物和蔬菜出售給消費者市場的模塊。

這可以在以下解決方案中分開

后端

  • 銷售模塊:用於銷售您的產品
  • 購買模塊:購買種子,動物食品,其他產品,......
  • Sheduler模塊:觸發播種,收獲,...的活動
  • 預測模塊:根據天氣和市場價格預測收成數量,......
  • ...

這些后端模塊中的每一個都可以擁有自己的數據訪問層,DTO,WCF服務,......

此解決方案僅包含業務邏輯,數據訪問,.... 並且可以有多個前端解決方案連接到這些后端解決方案。

前端

  • ASP.NET MVC應用程序:用於向消費者銷售的網上商店
  • WPF申請:批准銷售
  • 其他WPF應用程序:購買東西。
  • 移動應用程序:將事件發送到手機或其他內容。
  • (另一種選擇是將2個或更多后端解決方案連接到1個前端解決方案中)
  • ...

這對您的項目來說是一個巨大的變化,這將產生影響。 如果你不想改變它,請確保你認為這是真的。

多個解決方案將增加您的整體構建時間,並且每晚構建一次非常重要,這樣每個開發人員都可以使用最新的二進制文件,而無需在本地計算機上構建所有解決方案。

請注意,您仍可以在不同的解決方案中使用您的圖層:

  • 基礎設施層
  • 集成層(外部系統)
  • 域層
  • 存儲庫層
  • 經理層
  • 服務層

為了使這一切工作在一起,不要弄亂二進制文件。 您可以映射驅動器IE X:您有一個文件夾二進制文件,其中您有每個解決方案的文件夾。 其中每個解決方案都復制了post build事件上的程序集。 (編寫腳本,因此它適用於每台機器)

如果您有良好的網絡基礎設施,您也可以將其復制到服務器上。 因此,當您在TFS中構建所有解決方案時,它可以將其復制到所有開發人員都可以訪問的位置。

如果您在TFS中構建,請確保構建順序正確,首先是最低層,最后一層是最高層。

但是當您拆分解決方案時,在解決方案中,您可能並不需要在每個解決方案中使用它們。

我最近讀了一篇關於洋蔥建築的文章,也許你也可以看一下。 (它特定於ASP.NET MVC)。

您還可以查看CQRS

我絕對不會合並這些項目...我認為你很快就會在每一層都有意大利面條代碼,因為開發人員采取了他們不應該采取的捷徑(無論他們是否意味着)。

我更傾向於將層分成單獨的解決方案......並使用二進制引用而不是跨層的項目引用。 這可能會對分支造成嚴重破壞,但要小心。

通過使項目構建到一個共同的位置,我已經看到構建時間下降 - 顯然這可以防止VS重建項目,當它不需要時 - 但我不知道這是否真實。

這里有一些想法: http//blogs.microsoft.co.il/blogs/arik/archive/2011/05/17/speed-up-visual-studio-builds.aspx

最后....是完整構建的三分鍾還是單元測試一個項目? 專注於最大的問題。 如果單元測試需要很長時間,那么您就會遇到依賴性問題。 如果完整的解決方案需要很長時間,請獲取構建服務器並專注於降低單元測試開發時間。

希望有所幫助

我曾經處理過類似問題的低影響方法是創建一系列解決方案文件,其中只包含一個項目及其測試項目(可能還有項目的依賴項)。 然后,給自己一個像NCrunch這樣的工具,並在這些解決方案中完成大部分編碼,可能使用TDD。 這將為您提供閃電般快速的反饋循環,並且絕對是分層,分離方法的精神。 當我在過去做過這個時,我發現我實際上每天只運行整個應用程序幾次,最多,而且我非常依賴紅綠色重構,無論如何這都很好。

如果你願意,你甚至不需要控制這些小的解決方案文件 - 開發人員可以創建他們自己的,他們可以邊緣丟棄。

當然,這絕不是靈丹妙葯,並不能解決您希望運行應用程序時編譯時間長的問題,但它肯定有助於同時縮短反饋時間,同時促進良好的設計/開發實踐,並且具有極低風險和快速設置的優點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM