在一個文件中有多個類定義是不是很好的做法?或者每個文件最好有一個類?在一個文件中有多個類定義是不是很好的做法?
回答
我更喜歡每個文件一個類。您永遠不必搜索正確的文件名,因爲它始終是類名稱。
我認爲這是最好有每個文件一個類,並組織他們在具有相同的層次結構,作爲命名空間的文件夾。
大多數程序員會認爲每個文件一個類是最佳實踐。
通常最好的做法是每個類有一個文件。
有些人,不是我喜歡有不止一個,如果他們是相關的,非常非常小的規模。其他人可能會在原型階段做到這一點。我說開始,留在每一個文件作爲他的重要著作Code Complete
引述確實斯科特·麥康奈爾在他的授課質量話語,「把一個類在一個文件中,文件是不只是持有桶一些代碼如果你的語言允許的話,一個文件應該包含一個只支持一個目的的例程集合,一個文件強化了一個例程集合在同一個類中的想法。
每個文件一個類。
這樣你可以避免合併編輯時,兩個人編輯同一個文件,因爲一個正在class A
和其他正在class B
。雖然這在任何源代碼控制系統中都應該是自動的,但這是一個額外的步驟,可能會被錯過,這會導致問題。
遠東最好是有一個過程,不允許擺在首位出現這種錯誤。
您不應該手動合併編輯,因爲兩個人在同一個文件的不同部分工作。如果你這樣做,也許是時候換一個新的版本控制系統了。 – 2009-10-16 09:00:53
@Matthew - 同意,但這是一個額外的步驟,沒有必要,並且會在有人忘記在檢查編輯之前忘記執行合併時不時出現問題。 – ChrisF 2009-10-16 09:03:28
我不能說其他版本控制系統,因爲我獨佔使用Subversion,但svn處理自動合併,除非編輯文件中的相同部分(即兩個人編輯當前簽入文件的第54行) – 2009-10-16 09:10:28
通常 - no。 以下練習「每個文件一個類」簡化了解決方案的瀏覽。 此外,如果您有一個使用悲觀方法(獨佔鎖)的開發人員和源代碼管理工具的大型團隊 - 開發人員在處理同一個文件時將遇到困難。
只要類是相互關聯的,我不會在同一個文件中看到多個類的問題。
如果你有resharper,你可以隨時使用導航工具找到任何類。
+1同意,並非所有類都需要處於獨立單位。 – James 2009-10-16 08:51:30
+1 Resharper否定導航問題(ctrl T)。 – 2009-10-16 08:53:17
不是每個人都有,或者甚至可以使用Resharper(例如Express版) – 2009-10-16 08:58:17
我會說不,我知道的DevExpress討厭它藏漢(它有一些不好的檢測practives)。
,但我有有時,當它的一個非常小的類多數民衆贊成basicly只能由文件中的「主」類中使用。 Personaly我認爲它有點味道,有一個10K行長的.cs文件或在你的項目中有許多.cs之間的平衡。
我想這是根據您的偏好。 我想你會發現大多數在線示例/大多數代碼是每個文件一個類,便於管理。
我有時會把2班在一個文件 - 只有當我使用的第二類作爲一個實體,它只是作爲一個在第一類中使用。
我認爲它是一種「最佳實踐」方法,那麼很可能是。但是,這實際上取決於項目。我傾向於將相關代碼放到獨立的單元,例如:
MyApplication.Interfaces
MyApplication.Utils
MyApplication.Controllers
我真的覺得一個類只有永遠值得它自己的單位,如果它變得巨大。但是,如果它達到了這個階段,你應該開始考慮將一些代碼移入輔助類來分離邏輯。
我想你問,因爲你已經注意到,它被認爲是最佳實踐。鑑於顯而易見的好處(以及這裏提到的一些不那麼明顯的好處),爲什麼你想要以不同的方式做呢?每個文件在多個類中是否有任何好處?我想不出任何。
你是對的,我一直認爲最好的做法是每個文件有一個類,但是如果不是這種情況,我似乎會遇到越來越多的代碼。即使是由行業專家編寫的代碼。 – 2009-10-16 08:51:47
行業專家不一定是維護代碼的專家。 – 2009-10-17 15:14:05
這在演示代碼等方面並不少見,有時這樣更方便。使用演示代碼,便利勝過其他考慮因素。 – 2009-10-18 20:14:55
通常這是最好的解決方案,每個文件有一個類(文件的命名與包含的類完全相同)。
我只不同從,如果
- 有很多小枚舉 - >我收集這些成一個單一的文件如Enums.cs
- 有很多(20+)生成的類/接口彼此直接相關 - >將一個文件E.g. Interfaces.cs
- 有些東西不是應用程序的直接功能部分,而是緊密語義上的一致性(比如你需要的所有內容,通常是一些結構,枚舉,常量和一個類) - >以interop類命名的單個文件。
- 專用內部類 - >留在他們的父類,而不是局部類
我會用最就此達成一致。每個文件一個類是理想的。它可以讓您更輕鬆地查看項目中可用的內容,而無需依賴智能感知來發現給定程序集中可用的類型。
我認爲唯一一次我對每個文件規則中的一個類進行fudge的時候是我定義了一個自定義的EventArgs類,並且它與從另一個類中觸發的事件有關。然後,通常我會在同一個文件中將這些定義與該事件的委託一起定義。我不知道這是一種好的做法,還是出於純粹的懶惰?
由於'EventHandler
如果您在一個非常大的項目上工作,太多的文件會顯着減慢構建時間(至少使用C++)。我不認爲嚴格遵守規則是必然的。
一類每個文件是我的首選方法,它可以幫助我擺脫任何混亂後來......我傾向於使用了很多,雖然部分類的......
只要我不打破1000線障礙,我會填入許多相關的類,這是有道理的。
有時抽象可能只是一個重寫的方法。
- 1. 在同一個文件中有多個類是不好的做法嗎?
- 2. 在一個表中有幾個外鍵是不是很好的做法?
- 3. 它是一個很好的做法,同一列的多個表
- 4. 在一個文件中有兩個AsyncTask內部類是不好的做法嗎?
- 5. 在xCode項目中有多個* .xcodeproj文件是否是一種好的做法?
- 6. 在Android中保存多個文件是不好的做法嗎?
- 7. 在使用它的多個文件中共享一個dao是否是一種很好的做法?
- 8. 在卡桑德拉有多個密鑰空間是不是很好的做法?
- 9. 設置包裝類是一個很好的做法嗎?
- 10. 它是很好的做法,定義特定條件
- 11. 在同一個文件中聲明新的類是不是很好的「形式」?
- 12. 是定位與JavaScript一個很好的做法
- 13. 在頭文件中定義類是一個好習慣嗎?
- 14. 這個網址是無效的,不是很好的做法?
- 15. 是否有良好的做法有很多if else條件?
- 16. jQuery插件 - 這是一個很好的做法嗎?
- 17. 做不好有一個HTML元素很多類?
- 18. 在類中定義ID屬性是一種好的做法嗎?
- 19. if else在類構造函數中的條件......是不是很好的做法?
- 20. 是@unlink一個不好的做法?
- 21. 它是一個很好的做法,使用'的Response.Redirect()``中Global.asax`
- 22. POJO中的泛型 - 這是一個很好的做法
- 23. 在onPause()方法中調用GC是不是很好的做法?
- 24. 它是一個很好的做法,以設置一個函數python類屬性?
- 25. 有一個很長的初始化方法是不好的做法嗎?
- 26. 是否有一個很好的方法來定義catch塊是否運行?
- 27. 它是一個很好的做法在MySQL
- 28. Java:在XML中定義bean是否是一種好的做法?
- 29. JavaScript:window.spam是一種很好的做法嗎?
- 30. 在Python的另一個類中定義一個類是否有好處?
好的,但嵌套類呢?繼每個文件策略一個類之後,你會讓主類變得部分嗎?那麼你會有MainClass.cs和MainClass.NestedClass.cs ... – ParmesanCodice 2009-10-16 08:50:20
而且?你想說什麼?實際上,我經常在這種情況下爲MainClass創建一個文件夾,尤其是對於大型靜態類。私有嵌套類不(總是)需要他們自己的文件,但公共的文件應該。 – 2009-10-16 08:57:15
我不想提出任何觀點,我在問蒂姆他是如何嚴格遵守每個文件策略的一類關於嵌套類的。 – ParmesanCodice 2009-10-16 09:01:39