.NET'te dosya kuralı başına bir sınıf? [kapalı]


185

Bu kurala uyuyorum ama bazı meslektaşlarım buna katılmıyor ve bir sınıf daha küçükse diğer sınıf (lar) ile aynı dosyada bırakılabileceğini savunuyorlar.

Her zaman duyduğum bir başka argüman da "Microsoft bile bunu yapmıyor, neden yapmalıyız?"

Bununla ilgili genel fikir birliği nedir? Bundan kaçınılması gereken durumlar var mı?



Yanıtlar:


176

Dosya başına bir sınıf ayrıca, dosyanın farklarına bakmadan her check inin ne değiştiğiyle ilgili daha iyi bir fikir verir.


4
Aynı dosyada daha fazla sınıf, tek bir işlemde ilgili sınıflar arasındaki farkı artırır.
Luca

3
Doğru fark görüntüleyicileri, bir taahhüdün tüm farklarını görüntülemenizi sağlar.
Dykam

44
Bu özel cevabın orijinal gönderinin sorularına cevabının nasıl olduğundan tam olarak emin değilim. Elbette bir dosyaya 1 sınıf tutmak için bir neden sağlar (Luca ve Dykam iyi puanlar verse de), ancak genel fikir birliğini yansıtmaz veya kaçınılması gereken durumlar sunmaz.
Robert Davis

4
En iyi uygulamalar mevcut değildir, en iyi uygulamalara yalnızca belirli bir bağlam için geçerli olduklarını anlarsanız. Diğer yanıtların işaret ettiği gibi, bu kuralın aslında daha az sürdürülebilir kod oluşturacağı zamanlar vardır. Araçlar iyileştikçe, bu kural bir proje içinde sınıfları ve türleri bulmak çok daha kolay olduğu için gerçekten daha az alakalı hale gelir.
abombss

263

İnsanlar mutlak olarak düşündüklerinde ve bunu asla ya da böyle sübjektif ve nit seçici bir şeyle yapmamanız gerektiğini söylemekten nefret ediyorum, sanki hepimizin aptal doğru ve yanlış fikrine uymamız gerekiyormuş gibi. Alt satır: dosya başına birden fazla sınıfa sahip olmak mantıklıysa tamamen iyidir. Mantıklı olarak şunu demek istiyorum:

  1. Kodun sindirilmesini ve bakımını kolaylaştırır
  2. Çözümü daha az can sıkıcı (sayısız gereksiz dosyada kaydırma) ve daha az yavaş hale getirir
  3. Geliştirici ekibi yerel bir kodlama uygulaması olarak sorun değil

Dosya başına neden birden fazla sınıf isteyebileceğime gerçekten iyi bir örnek:

Birkaç düzine özel istisna sınıfım var, her biri 4 astarlı, her biri için ayrı bir dosyaya sahip olabilirim veya istisnaları gruplayabilir ve grup başına bir dosya alabilirim. Bana göre en rasyonel / pragmatik yaklaşım onları gruplandırmak ve sadece birkaç dosyaya sahip olmaktır, çünkü daha verimli zaman / kodlama akıllıca (sağ tıklamak zorunda değilim -> Sınıf Ekle, yeniden adlandır, 50 kez) , çözümü daha az karmaşık ve daha iyi performans gösterir.


92
1000. En iyi uygulamalar için mantığı anlamak ve onları ihlal etmeden önce iki kez düşünmek harika. Köle bağlılığı kötülüktür.
dsimcha

19
Birkaç düzine özel istisna sınıfı ? Sorunun asıl kaynağı bu değil mi? Burada sadece nit seçici olmak istemiyorum: Sanırım çoğu zaman insanlar sınıfları tek bir dosyada birleştirmek istiyorlar, çünkü gereksiz yere çok fazla tür oluşturuyorlar. (Bunu söyledikten sonra, belki de birkaç düzine özel istisna sınıfının mantıklı olduğu gerçek bir durum vardır). Çok sayıda küçük, işsiz sınıf normalde daha büyük bir sorunun işaretidir.
Jeff Sternal

16
Çoğunlukla sana katılıyorum. Ancak istisnalar özel bir durumdur. Doğru şekilde tasarlanmış bir sistem, meşru hatalar veren tüm durumlarla başa çıkmak için uygun istisna işlemeye ihtiyaç duyduğundan, okuduğum en iyi uygulama makalelerinin çoğu, belirli istisnalar oluşturma ihtiyacını vurgulamaktadır (ve bazen de bunlara çok ihtiyacınız vardır) büyük bir projedeki tüm iş kurallarını kapsar) böylece sisteme yakalanmayacaksınız.
James

6
İyi bir sebep olmadan bazı yönergeleri körü körüne takip etmemeniz gerektiğine katılıyorum, ancak bir dosyada birden fazla sınıf olması gerektiği konusunda katılmıyorum. Benim için dosya dersten sonra adlandırılmalıdır ve birden fazla içermemelidir. Bazı diller (java birdir), sınıfın, sınıf adıyla eşleşen dosya adıyla bir dosyada olduğunu zorunlu kıldığını not eder. Benim için yeni gelenlerin gezinmesini kolaylaştırıyor, bu nedenle dosya başına bir sınıfın doğru şey olduğuna inanıyorum
krystan onur

3
Değişkenleri adlandırmak gibi, dosya başına bir sınıf tutmak ve dosya adı ile sınıf adını senkronize tutmak bir kuraldır. Visual Studio bu yaklaşım için çok iyi ayarlanmıştır. Projenin ortasına eklenen kaynak kontrol sistemleri ve geliştiriciler için daha kolaydır. Sınıf adıyla eşleşen dosya adını sezgisel olarak arayacaklardır.
Oybek

75
static bool GeneralRuleShouldBeFollowed(IGeneralRule rule, IUseCase useCase)
{
    return (rule.Overhead(useCase) 
            < My.PersonalThresholds.ConformismVsPracticality);
}

4
.NET'te böyle bir kural var mı? Ben de sadece ifade sonucu dönecekti. : O
Joan Venge

50

Bazen bir dosya içinde birden fazla sınıfı sıkıca bağlanmışsa ve en az biri çok küçükse gruplayabilirim.

Genel 'en iyi uygulama' sınıf başına bir dosyaya sahip olmaktır.


7
Eşleştiklerinin farkındaysanız, neden onları birbirinden ayırmıyorsunuz?
The Matt

39
@ Matt: Buna mühendislikten kaçınmak deniyor. Sıkı birleştirilmiş birkaç sınıfınız varsa ve bunları ayırmak, sağladığı pratik esneklik miktarına kıyasla çok fazla karmaşıklık katacaktır, o zaman ne anlamı var?
dsimcha

9
Bazen sadece bu bir sınıf tarafından kullanılan temelde "veri" sınıfları gibi, bu yüzden veri-sınıfı genellikle kullanıcı ile aynı dosyaya koymak çünkü veri-lass genellikle çok az mantık yok ya da bir mantık gibi görünüyor israf yeni bir dosya oluşturmak için.
Mart'ta Earlz

3
Matt: Bazen kuplaj kabul edilebilir olarak öne sürdüğüm yardımcı sınıflar var. Başka bir sınıfın parçası için karmaşıklığı azaltırlar, ancak yine de o sınıfa yönelik çok özel bir amacı kolaylaştırırlar.
Jordan Parmer

6
@TheMatt: Bunu ayrıştırın: msdn.microsoft.com/en-us/library/… Modüller arasında eşleştirme kötü, ancak mantıksal bir özellik içinde sınıflar arasında işbirliği yapmak kaçınılmaz.
Ben Voigt

25

Varsayımsal argümanların ötesinde, Visual Studio IDE ve büyüyen yazılım projeleri ile Windows .NET'e odaklanmak, bu bağlamda her dosya için bir sınıfa sahip olmak mantıklıdır.


Genel olarak, görsel referans için hiçbir şey dosya başına bir sınıf alamaz. Gerçekten mi.

Microsoft'un aynı şeyi yapıp yapmadığını bilmiyorum, ancak bir sınıfı birden çok dosyaya bölmek için partialanahtar kelime oluşturdular (bu daha da şiddetli). Genellikle otomatik olarak oluşturulan tasarımcı kodunu aynı sınıftaki özel kodunuzdan ayırmak için kullanılır (ancak bazen farklı geliştiricilerin sınıfta aynı anda farklı dosyalar üzerinden çalışmasına izin vermek için kullanılır). Böylece Microsoft birden çok dosyanın faydalarını görür ve herkesin .NET ile kesin olarak düşünen birden çok dosya organizasyonu düşüncesi vardır.

Yuvalanmış sınıflar için, tek bir dosya veya sınıfların ilk bölümlerini kullanmaktan başka seçeneğiniz yoktur. Bu durumda bir dosya gerekli ve iyi:

class BicycleWheel {
    class WheelSpoke {
    }
}

Aksi halde neden tek bir dosyada birden fazla sınıf saklasınız ki? "Çünkü onlar küçük" veya birbirleriyle ilişkili argümanı fazla su tutmaz çünkü sonunda sınıflarınız diğer sınıflarla ilişkilendirilir. Sonuçta, özellikle yazılım büyümeye devam ettikçe , nesnelerin kullanımlarına göre dosya içi organizasyonunu kolayca çıkaramazsınız .

Ayrıca , ad alanları için klasörler kullanırsanız hiçbir zaman sınıf dosya adı çakışması olmaz. Visual Studio gibi bir geliştirme ortamında değilken (örneğin , bir sınıfı Not Defteri veya hızlı / hafif bir şeyle hızlı bir şekilde düzenlemek istiyorsanız) dosya sisteminde dosya adına göre bir sınıf bulmak da uygundur .

Pek çok iyi neden var ...


Teşekkürler, "en azından ilk kısımları" ile ne demek istiyorsun? İç içe sınıfları da ayırabiliyor musunuz?
Joan Venge

1
Bu, partialbahsettiğim anahtar kelimeye dolaylı bir referans .
John K

1
İç içe geçmiş kayıtlar için partial msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx olabilir Meraktan bu kadar baktı.
John K

Bu yalnızca varsayılan görünümün fiziksel (dosyalar) değil mantıksal (ad alanı / sınıf) olması gerektiğini gösterir.
David Schmitt

@DavidSchmitt Visual Studio'da Sınıf Görünümü'nün amacı budur.
Zack

14

Vakaların büyük çoğunluğunda, her dosya kuralı için bir sınıfı izlerim. Düzenli olarak yaptığım tek istisna, belirli bir sınıfa sıkıca bağlı olan bir enum tanımıdır. Bu durumda, enum tanımını sık sık bu sınıfın dosyasına ekleyeceğim.


12

Ben de tek bir dosyada bir tür olması gerektiğine inanıyorum.

Bu kuralda belirtilmesi gereken bir istisna vardır: Yalnızca aşağıdaki gibi genel bir argümanla farklılık gösteren iki sınıfa sahip olmak:

RelayCommand     

ve

RelayCommand<T>

Bu durumda StyleCop'u mutlu etmek için geçici çözümü biliyor musunuz?
George Polevoy

Katılmayın, jenerik sınıflar için başka bir kural var, Foo 1.cs for Foo <T> `ve Foo 2.cs for Foo <T, T1>.
Oybek

@Oybek: Ya Foo <T>, Foo <U> ve Foo <U, T> varsa? Şimdi ne olacak?
Andrei Rînea

@AndreiRinea O olması imkansızdır Foo<T>ve Foo<U>aynı ad alanı içinde. Ancak ad alanları farklıysa, genellikle farklı klasörlerde olurlar. Bu nedenle Foo<T>ve Foo<U>Foo 1.cs and for Foo <U, T> Foo`2.cs olmalıdır. Ama yine de dosya başına bir sınıf.
Oybek

Bilgi için teşekkürler! :)
Andrei Rînea

8

Gerçekten, bu kişisel tercihe bağlı. Herkes "dosya başına bir sınıf" diyecek, ama hepimizin bazı durumlarda bundan kaçınma nedenlerimiz var. Yaklaşık 300 farklı numaraya sahip büyük bir projem vardı. Hiçbir şekilde sadece bazı numaralandırmalar üç durumluyken, her sınıf için bir tane olmak üzere 300 ayrı dosyam olmayacak.

Ayrıca, belirli sınıfları, olduklarından sonra adlandırılan dosyalarda yoksa, bulamayan kişiler için, Bul'u tüm çözümde aramayı kullanmamanın bir nedeni var mı? Bul'u kullanmak Çözüm Gezgini'nde gezinmem için değerli zaman kazandırıyor.


Re: find - bir tür tanımı ararken, nerede kullanıldığını görmek istemiyorum. Ayrıca, find, muhtemelen bölündüğüm (ad alanına göre) alfabetik olarak sıralanmış dosyaların listesinde gezinmekten önemli ölçüde daha uzun sürer.
Jeff Sternal

1
İsim alanına böldüğünüz bir şeyle çalıştığınızı belirttiğinizi fark ettim. Ne yazık ki, yönetebildiğimiz projelerle her zaman çalışacak kadar şanslı değiliz.
Jason M

6

İçerik ne kadar hafif olursa olsun, dosya başına bir sınıf / arayüz / vb.

Visual Studio'da büyük bir çözüm üzerinde çalışıyorsam dosyaları görebilmek istiyorum ve görmek için içine delve gerek yok. ReSharper gibi navigasyon araçlarıyla bile, 1: 1 eşleme istiyorum.

İçeriği çok az olan veya hiç olmayan çok fazla kaynak dosya bulursanız (belki bir sınıfı genişletir, ancak hiçbir şey eklemezseniz) belki de tasarımınızı yeniden düşünmelisiniz.


5

Bir sınıfı standart fabrika sınıfı ile aynı dosyada gruplamanın çok yararlı olduğunu düşünüyorum.


5

Normalde her dosya için bir sınıfa sahip olurdum, ancak normalde dosyanın ilgili sınıfları içerip içermediğini görmek için kendi kendinize ve diğer geliştiriciler tarafından yeniden kullanılabilen istisnalarınızı gruplandırabileceğinizi görmek zorundasınız. Bu durumda, kullanıcının birden fazla dosya yerine yalnızca bir dosyaya dahil edilmesi gerekir.

Mesele şu ki: takdir yetkisi kullanılmalıdır !!!


1
Gerçek bilgelik, programlamada hiçbir kural zor ve hızlı değildir.
ChaosPandion

4

Daha büyük çözümlerde, dosya başına bir sınıfa sahip olmanın çok değerli olduğunu ve dosyanın sınıfla aynı şekilde adlandırıldığını düşünüyorum. Çalışmanız gereken kodu bulmanızı kolaylaştırır.


ReSharper gibi araçlarla bu argümanı daha az değerli buluyorum. I CTRL + T yapın ve aradığım tipin adını yazmaya başlayın.
Mark

3
Evet, ancak uygulama yapınızın üçüncü taraf bir araca bağımlı olmasını ister misiniz?
magnus

1
@magnus Bunun bunu yapmamanın bir nedeni olmadığını, birinin yapması için bir argümanın daha az zorlayıcı olduğunu söylemiyordum.
Mark

4

C # için StyleCop aracı, bir ad alanında birden fazla üst düzey sınıf gerektirmeyen standart kurallara sahiptir (ayrıca bu ad alanındaki herhangi bir sayıda arabirim, delege ve numaralandırma).

İkinci ve sonraki sınıfların yalnızca birincisi tarafından kullanıldığı iki veya daha fazla sınıf durumunda, bunlar yalnızca tüketen sınıf tarafından görülebilen iç sınıflar olabilir ve olmalıdır.


3
"Bir ad alanında birden fazla üst düzey sınıf" demediğinizde, tek bir namespaceblokta demek istersiniz , değil mi?
Daniel Pryden

1
Belirtilen kurallar SA1403: AC # belgesi yalnızca tek bir ad alanı içerebilir. SA1402: AC # belgesi, tüm sınıflar kısmi değilse ve aynı türde değilse, kök düzeyinde yalnızca tek bir sınıf içerebilir.
Steve Gilham

4

Bazen dosya başına bir sınıf, ama ...

Birden çok sınıf sıkı bir şekilde ilişkili olduğunda, aynı kaynak dosyadaki birden fazla sınıf, her sınıfa kısa bir kaynak dosyası ayırmak yerine IMHO, BETTER olur. Kaynak daha okunabilir ve kompakttır (ve #region kullanılarak aynı kaynak öncekinden daha yapılandırılabilir).

Ayrıca, 20000+ satır kaynak dosyasına sahip olduğum RAM ile bile kullanışlı olmadığından , bazen aynı sınıfı farklı dosyalara ( kısmi kullanarak ) yaymanın GEREKLİ olduğunu düşünün (ama bu başka bir soru).


Tabii ki, çok fazla kod satırına sahip bir sınıftan kaçınmaya çalışmalısınız. 1000+ bile çok büyüyor diyebilirim. Ayrıca bu eski kod her zaman mümkün olmadığını fark ediyorum.
Peter

Kaynak kodu oluşturmaya çalışırsanız (benim durumum, OpenGL için belirtiminden C # bağlama nesli, binlerce giriş noktasına sahip), çok miktarda veri için küçük bir sınıf düşünmek zor ...
Luca

3

Bazen daha büyük bir sınıfla küçük bir sınıf bırakacağım, ancak sadece bir nesne ve koleksiyon sınıfı veya fabrika gibi çok sıkı bir şekilde ilişkili oldukları takdirde.

Bununla ilgili bir sorun var. Sonunda küçük sınıf, kendi dosyasında olması gereken noktaya kadar büyür, eğer yeni dosyaya taşırsanız, düzeltme geçmişinize kolay erişiminizi kaybedersiniz.

yani.

  • pazartesi y.css dosyasındaki x ve y sınıflarımı değiştiriyorum
  • Salı günü x sınıfını kendi dosyasına x.css olarak ayırıyorum çünkü çok büyümüş
  • çarşamba günü patronum Pazartesi günü x sınıfında neyi değiştirdiğimi görmek istiyor, bu yüzden x.css geçmişine bakar, sadece x.css salı günleri değişmeden önce geçmişi göstermez.

1
"Küçük sınıf", sınıfınızın olaylarının alıcılarına bilgi aktarmaya yönelik EventArgs'ın bir türevine benziyorsa ne olur? Böyle bir şeyi başka bir dosyaya taşıyarak kodun daha temiz veya bakımı daha kolay olur mu? Muhtemelen, böyle bir şey iç içe geçmiş bir kamu sınıfı olmalıdır, ancak bunlar da kaşlarını çatmış gibi görünüyor. Düzeltme geçmişine gelince, sınıf değişiklik günlüğünün hiçbir yerinde görünmezdi ve kod notunda nereden geldiğine dair bir yorum olmamalı mıydı?
supercat

Bunu bir very tightly relatedsınıf olarak sınıflandıracağım ve sadece küçük bir ekran alanı kapladığı ve aynı amaçla başka bir sınıf tarafından kullanılmadığı sürece bırakacağım.
gingerbreadboy

3

Bu gerçekten bir sorun mu? :)
Gerçekten küçük sınıflar, tıpkı enums gibi, başkaları ile bir araya getirilebilir. İzlenmesi gereken bir kural var: sadece ortak bir şeyleri olan sınıfları bir araya getirin.

Bir araştırma olarak - projelerimden birinde içinde 150 sınıf bulunan bir dosyam var. Dosya 10000 satır kod içeriyor. Ama otomatik olarak üretildiğinden tamamen kabul edilebilir :)


1
Ben 120 sınıf ve yarım milyon satır ile 750 alt sınıfları ile aynı bir dosya var, aynı zamanda autogenerated.the sorun: Eğer ben tıklayın, ben her şey durduğu için yeniden başlatmanız gerekir.
Behrooz

3

Bir dosyaya birden fazla ilişkili sınıf koymanın bir nedeni, API'nizi kullanan fakir piçin ithalat beyannamesi yazısını yazmak için yarım gün harcamak zorunda kalmaması ve kodu korumak zorunda olan fakir piçin yarım harcamak zorunda olmamasıdır. bir gün ithalat beyanı kaynatma plakası kaydırma. Genel kuralım, her seferinde yalnızca bir tane yerine aynı anda büyük bir alt kümesini kullanırsanız, birden fazla sınıfın aynı dosyaya ait olmasıdır.


1
Ne demek "ithalat beyannamesi" dedi? "İfadeler kullanılıyor" mu? Ama sınıflar aynı isim alanında olmayacak mı?
Joan Venge

3
@Joan: Yani gerçekten basit bir şey başarmak için 15 farklı ama ilgili modül ithal etmek zorunda. Belki özellikle C # için geçerli değildir. Gerçekten C # bilmiyorum, ama diğer dillerde oldukça can sıkıcı bir sorun.
dsimcha

Teşekkürler evet bu yüzden kafam karışmıştı.
Joan Venge

2

Bunu yapıyorum, ancak sadece sınıflar bir çocuk-ebeveyn tarzındaysa ve çocuk sınıfları SADECE ebeveyn tarafından kullanılıyorsa.


Teşekkürler, ama neden başka bir dosyaya ayırmıyorsunuz? Sadece merak.
Joan Venge

@henchman, özellikle alt nesne çok küçük olduğunda, benden çok daha etkili olduğunu söyledi. Çocuk sınıfının sadece küçük bir mantıkla mülk olması genellikle böyledir
CResults

2

Genellikle her dosya için bir sınıfa sadık kalırım. Ancak, proje genelinde kullanılan benzer yapı gruplarına istisnalar sunacağım. Örneğin:

  • EventArgsGenellikle her biri sadece 5-10 kod satırı olduğu için alt sınıfları içeren bir EventArgs.cs , ancak bunlar genellikle birkaç farklı sınıf tarafından kullanılır. Alternatif olarak, EventArgssınıfları olayları bildiren sınıfla aynı dosyaya koyabilirim .
  • Genellikle her biri yalnızca 1 satır olduğundan, proje boyunca kullanılan Temsilciler içeren bir Delegates.cs. Yine, alternatif onları açığa çıkaran / tüketen sınıfla aynı dosyaya koymaktır.
  • enumProje boyunca kullanılanlar içeren bir Enums.cs . ( enumYalnızca bir sınıf tarafından kullanılan bir varsa , genellikle privatebu sınıfa yaparım .)

2

Dosya sınıfla aynı şekilde adlandırıldığında, dosya başına bir sınıf için başka bir oy. Benim için uzun süreli bakımda yardımcı oluyor. Depoyu kolayca inceleyebilir ve projeyi veya dosyaları açmak zorunda kalmadan hangi sınıfların bir çözümün parçası olduğunu görebilirim.


2

Bunu% 99 oranında takip ediyorum. Standartlara uymak güzel, ama aynı zamanda esnekliğin de yeri olduğuna inanıyorum. Bazen işleri parçalamak için saçma bir zaman kaybı gibi görünüyor. O zamanlarda kendimi aşar ve sadece kodumu yazarım.


2

Şimdiye kadar verilen yanıtlar, insanların kuraldaki istisnaları etrafında dönüyor gibi görünüyor, bu yüzden işte benim: .NET3.5 SP1'deki DataAnnotations paketini kullanırken sınıfları ve metadata 'arkadaş' sınıflarını bir arada tutuyorum. Aksi takdirde, her zaman ayrı dosyalarda bulunurlar. Bilirsiniz, çoğu zaman. Olmadığı zamanlar hariç.


2

Bunu nadiren yapıyorum. Örneğin, sınıfla yakından ilişkili ancak kendi başına ayrılmak için çok önemsiz olan bir numaralandırma veya yapı varsa.

Veya ana sınıf için bazı uzantı yöntemleri içerecek ayrı bir sınıf.


1

One case could be:sınıflarınız ortaklaşa module / unitbazı ana sınıflara hizmet eden bir tane oluşturduğunda helper classes, diğer bilge hayır .

ASP.NET MVC 2.0 proje kaynak koduna bir göz atın . Bu kurala kesinlikle uyuyor


1

Daha küçük sınıflar oluşturma ve sınıfın sadece yapması gerekeni yaptığından emin olma fikrini seviyorum. Tek bir sorunun çözülmesine katkıda bulunan birden fazla sınıfınız varsa, bunları aynı dosyada bir araya getirmenin bir zararı yoktur.

EN İYİ UYGULAMALAR olmadığı için MS uygulamalarını takip etmem!


1

Başka kimsenin bahsetmediğini gördüğüm başka bir nokta, dosya kuralı başına bir sınıfı kullanarak geliştirdiğinizde, o sınıfın ne kullandığını kolayca görebilmenizdir.

Örneğin: bir sınıfın Linq kullandığı, diğerinin kullanmadığı iki sınıfınız olabilir.

Bu sınıflar aynı dosyadaysa, hangi sınıfın ne kullandığını koduna bakmadan söyleyemezdiniz. Dosya başına bir sınıf olduğunda, tek yapmanız gereken o sınıfta tam olarak ne kullanıldığını görmek için dosyanın üst kısmına bakmaktır. Hiç yeni bir lib'e geçiyorsanız yardımcı olur.


0

Şimdiye kadar gönderilen yanıtlarda belirtilmeyen dosya başına bir sınıfın başka bir nedeni, dosya başına bir sınıfın bir kod incelemesi sırasında bir PR'nin etkisini anlamayı kolaylaştırmasıdır. Ayrıca birleştirme çatışmalarını da azaltır.

Birisi geri bildirim için bir PR gönderdiğinde, değiştirilen dosyaların listesine bakabilir ve hemen üzerinde çalıştığım şeylerle çakışabilir. Çakışmaya bağlı olarak, kodlarına daha derinlemesine bakmak veya bir Tamam vermek isteyebilirsiniz, çünkü kendi değişikliklerimi etkilemeyeceğinden oldukça eminim.

İki kişi çok sınıflı bir dosyada çalışırken ve her ikisi de bağımlılık eklediğinde using, üstteki blokta birleştirme çakışması elde etme şansınız yüksektir . Sınıfları dosyalara ayırmak, her sınıfın ne kullandığını görebilmeniz için bağımlılıkları ayırır ve bunun gibi çakışmalar alamazsınız.

Bu kuralın istisnaları vardır (arayüz + uygulama, numaralandırmalar, ...), ancak genellikle genç geliştiricilerin ilgisiz sınıfların her türünü aynı dosyaya paketlemesine izin veren tam tersi olandan daha iyi bir başlangıç ​​noktasıdır.

Dosya başına bir sınıf, yoruma tabi olmayan açık ve net bir kuraldır.


İlgili dosyadaki sınıflar kişisel tercihlere ve yoruma tabidir (burada tüm diğer cevaplardan görebileceğiniz gibi, ne zaman kullanmanın uygun olduğu) ve bu nedenle kötü bir kuraldır.


-1

Geri ve ileri çok ilginç ve görünüşte sonuçsuz olsa da, genel izlenimim, sınıflar ve dosyalar arasında 1-1 bir eşlemenin, bazı kişiler tarafından istisnalar olsa da, çoğunluk düşüncesi olduğudur.

Yanıtlarınızın herhangi birinin sizin yaptığınıza bağlı olarak değişip değişmediğini merak ediyorum: (1) bir Windows Forms uygulaması, bir Web uygulaması, bir Kütüphane veya başka bir şey geliştirme; veya (2) Visual Studio kullanıyor veya kullanmıyor. VS kullanılırken, diğer iş parçacıklarındaki fikir birliği VS çözümlerinin / projelerinin dizin / dosya adlandırma ve yapısında yansıtılması gerektiği için dosya kuralı başına bir sınıfın VS projesi başına bir sınıf anlamına geldiği anlaşılmaktadır. Aslında benim izlenimim, fikir birliğinin proje adı = derleme adı = (iç içe) ad alanı adına sahip olması, hepsi dizin / dosya adlandırma ve yapısında yansıtılacak olmasıdır. Bunlar doğru yönergeler (veya kurallar) ise, tüm bu görünüşte dikey olan düzenleme mekanizmaları yine de senkronize kalır.


-1

Evet, okunabilirlik adına her sınıfta bir dosya olmalı !. Sadece bir projeye atladým. Bir dosyada birçok sınıf görüyorum. yeni bir adamın bunu anlamasını zorlaştırıyor. sürdürülebilirliği düşünmemeli miyiz? ne zaman bir yazılım geliştiriyoruz? geliştirme diğer geliştiriciler tarafından birçok kez devam edecektir. Eşyalarımızı düzenlemek için ad alanlarımız var, bunu yapmak için dosyalara ihtiyacımız yok !.


-5

Dosya başına bir kod öğesi, evet.

Diğer her şey bir yanlış uygulama ve açıkçası RAD mağduriyetinin bir işaretidir.

Biri uygun yazılım geliştirmeye başlar başlamaz (IoC, tasarım desenleri, DDD, TDD vb.) bu kural gerçekten, gerçekten önemlidir.

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.