Sınıflar, numaralar ve diğer varlıklar ayrı dosyalara yerleştirilmeli mi?


12

Şirketimin ekip lideri \ architect, "mantığa bağlı varlıklar" ın bir .cs dosyasına yerleştirilip yerleştirilmediğini anlamak için büyük ölçekli bir projenin daha kolay anlaşıldığını savunuyor.

Alıntı yaparım:

  • "Mantık ve arayüz ve sınıfın tüm yapısı tek bir yerde görülebilir, bu çürütülemez bir argüman. Aynı şeyi görmek için ama bir grup dosya ile araçları kullanmanız gerekir, sınıf diyagramı, navigasyon için R #, vb. "

  • "Zayıf teoriyi takiben ayrı bir dosya ordusunun havalı olduğunu çığlık atabilirim, ancak mevcut kodda değişiklik yapmak söz konusu olduğunda, özellikle de bu kodun yazarı değilseniz, çok sayıda dağınık dosyayı anlamak çok zor. Bu yüzden forumlarda "tek bir dosya" yazabilirsiniz, ancak pratikte bu yaklaşım asla kullanılmamalıdır "

  • "... Kod tabanının geliştiriciler arasında ayrılmasına gelince, bugünlerde aynı dosyayı aynı anda düzenlemek bir sorun değil. Birleştirme sorun değil."

Birçok kez duydum ve enum, sınıf ve benzeri başına bir .cs dosyası oluşturmak zorunda olduğunu okudum ve bu en iyi uygulamadır.

Ama onu ikna edemiyorum. Jon Skeet gibi tanınmış programcılara güvenmediğini söylüyor. Bu arada Skeet'in bu konudaki görüşü: Enum türlerini bulmak için en iyi yer nerede?

Ne düşünüyorsun? Gerçek bir sorun mu var? Yoksa bu bir zevk meselesidir ve kuruluşun kodlama standardı tarafından mı düzenlenmelidir?


Skeet Kartını oynasanız bile hepsini kazanamazsınız.
JeffO

6
Adil olmak gerekirse, Jon Skeet'in şöhret iddiası mükemmel bir kod ustası değil, C # sorularına hızlı ve doğru bir şekilde cevap vermeye istekli ve yetenekli (ve tam olarak kitabı yazdı). Muhtemelen asla uyumaz, ancak bu sadece bir söylenti. Yalnız bu konudaki düşüncesi yeterli olmamalı ve onun argümanı güçlü değil. Bu, onun bu durumda yanlış olduğu anlamına gelmez, sadece yaşlılarınızın "bana fikirlerle değil gerçeklerle ve nedenlerle gel" demeye hakkı olduğunu söylüyorum.
pdr

2
Dosya başına bir sınıfa oy veriyorum ve yalnızca o sınıfla ilgili olan tüm numaralandırmalar veya arabirimler yalnızca dosyanın içinde değil, sınıf içinde olmalıdır. Öte yandan, ne kadar mantıksız olursa olsun, şirketin kodlama standardını izlemelisiniz, çünkü bu işiniz için iyi kod yazmanın bir parçasıdır .
Mart'ta Bobson

2
Visual Studio eklentisi olarak StyleCop'un dosya başına> 1 sınıf varsa uyarılar olduğunu belirtebilirsiniz
Kevin

Yanıtlar:


20

Takım Liderinin argümanında birkaç kusur var:

  1. İyi tasarlanmış sınıflar ve numaralandırmalar, sadece mantıklı gelebilecekleri yerde değil, projenizin herhangi bir yerinde kullanılmak üzere tasarlanmıştır .

  2. XML yorumlarıyla düzgün bir şekilde belgelenen sınıflar ve numaralandırmalar, yalnızca onu referans alan öğenin üzerine gelip çok açıklayıcıdır.

  3. Referansı sağ tıklayıp "Tanıma Git" i seçerek her zaman bir sınıfa veya numaralandırma tanımına ulaşabilirsiniz, böylece nereye koyduğunuz önemli değildir .

  4. Nesneleri bir "mantıksal" tarzda bir araya getirmek keyfi bir şeydir (yani "mantıksal" ın ne anlama geldiğini düşünmek zorundasınız. Bu programlamaları gerçek programlama yaparak harcamak istiyorum).

Her nesne tanımını kendi dosyasında kurmak, düzenli ve disiplinli bir organizasyon ve yapı beklentisi yaratır ve "bu neden burada?" Sahip olmak çok güzel bir şey.

İki veya daha fazla nesne mantıksal olarak ilişkiliyse, bunları Proje Gezgini'nde kendi klasörlerine koyun .


5
Başka bir notta, kod emmeyi birleştirir. Tabii, onları yapabilirsiniz, ama neden, gerekmiyorsa?
Robert Harvey

4

Büyük olasılıkla takım lideri, sağ tıklayıp "tanımlamaya git" i seçmenin bir seçenek olmadığında dişlerini daha erken bir dönemde kesti. Ben ağır başak geliştirme modunda olduğumu biliyorum yeniden birleştirici benim için düzeltmek izin verene kadar oldukça büyük sınıf dosyaları büyüyecek.

Her durumda, takımı göreve götürmek istiyorsanız, ona bu sınıfların ve numaralandırmaların neden çocuk sınıfları ve numaralandırmalar olmadığını sorun - gerçekten bağımlı varlıklarsa onları bağımsız varlıklar olarak ilan etmek için bir neden yok. Bu, fetva'yı biraz düşünmesine yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.