Kodlama Rehberi: Yöntemler 7'den fazla ifade içermemeli midir?


78

C # için AvSol Kodlama Kılavuzuna bakıyordum ve neredeyse her şeye katılıyorum ama başka bir kural hakkında ne düşündüğünü görmek gerçekten merak ediyorum.

AV1500

Yöntemler 7 ifadeyi geçmemelidir. 7'den fazla ifade gerektiren bir yöntem çok fazla veya çok fazla sorumluluk alıyor. Ayrıca, kodun ne yaptığını anlamak için insan zihninin kesin ifadeleri analiz etmesini gerektirir. Kendini açıklayan isimlerle, çok sayıda küçük ve odaklanmış yöntemle parçalayın.

Çoğunuz bu kurala uyuyor mu? Yeni bir yöntem oluşturmaktan kurtarılacak çok az şey olsa bile (kodunuz hala KURUYOR ) okunabilirliği büyük ölçüde arttırmanın yanı sıra? Ve numaran hala 7'ye kadar mı düşük? 10'a daha fazla eğilirdim.

Her yerde bu kuralı ihlal ettiğimi söylemiyorum - aksine, yöntemlerin% 95'i küçük ve odaklanmış ancak bu kuralı asla ihlal etmemen gerektiğini söyleyerek beni gerçekten mahvettim.

Gerçekten herkesin ASLA bu kuralı ihlal etmeyeceğini düşündüğünü bilmek istiyorum (Kodlama standardında '1' - yani ASLA bunu yapmayın). Ama bence olmayan bir kod temeli bulmakta zorlanacaksınız.


48
Onlar hesaba katılır mı casebir hafif yanık ifadeleri switchde? Her halükarda, aptalca, işe yaramaz bir gereklilikten başka bir şey değil. Yazanlar programlama hakkında hiçbir şey bilmiyor.
SK-mantık

86
Kodlama standardında '1' olması gereken tek kural "tüm kodlama kurallarını bir tuz teli ile almalısınız" kuralı olmalıdır.
Mike Nakis

6
@ SK-mantık 1027 de fena değil - boş dizgiye null dizgisine eşit davranmanız gerekiyorsa, eksik verileri ele alması gereken eğlenceli bir yazma kodu olmalı.
quant_dev

25
Bu kılavuzu okurken aşağıdakilerle dolu bir kod temeli görmeyi beklerim: void DoSomething () {DoSomethingFirstSevenLines (); DoSomethingSecondSevenLines (); DoSomethingThirdSevenLines (); vb; }
römorkör

12
.NET Framework'ün çoğunu yansıtmayı deneyin ve kaç tane yöntemin 7'den az ifadeye sahip olduğunu görün ...
David Boike

Yanıtlar:


195

Bu bana bir "standart kokusu" dir. Kodlama standartlarını kendi sınırlarında görebildiğim zaman endişeleniyorum. Neredeyse her zaman bir yöntemin standart izin verdiğinden daha büyük olması gereken bir durumla karşı karşıya kalırsınız (satır uzunluğu / sayısı, değişken sayısı, çıkış noktası sayısı vb.). Standartlar daha çok kurallara benzer olmalı ve iyi karar vermek için yeterli yer bırakmalıdır. Beni yanlış anlamayın, standartlara sahip olmak iyidir, ancak “vekaleten mikro yönetim” olmamalıdır.


25
"Proxy ile mikro yönetme" için +1. Birisinin "7 artı veya eksi 2" kuralını okuduğundan şüpheleniyorum ( en.wikipedia.org/wiki/… ) ve kısa süreli bir gerçeğin saklanmasını, bildiğiniz gibi, bir kod editörü gibi uzun süreli saklama ile karıştırdı.
kabarık

25
Herhangi bir mantıklı düşünülmüş standart kodda sihirli sayıları yasaklar, değil mi? Kodlama standardının da bu standarda uygun olacağını düşünürdünüz. 7 sayısının kesinlikle "sihirli" bir niteliği var.
Adam Crossland,

2
Belgenin başlığı " GuidlinesC # 3.0 ve 4.0 için Kodlama" değilse, cevabınız daha mantıklı olacaktır .
Andy,

+1 Aklımda kodlama standartlarını izlemenizin tek sebebi asla dogmatik olarak rasgele bir sayıya uymamak, ancak sürüm kontrolünde gereksiz bir birleştirme sorunlarına neden olmamanızdan emin olmaktır (örneğin, bir takımda çalışırken ortaya çıkan sorunlar). Genellikle daha kısa dosyalar ve daha fazla bileşen, kod değişikliklerini birleştirirken daha az sorun yaşamanız anlamına gelir.
Spoike

3
Bu dokümanı indirdim ve incelemeye başladım. 1.6'da şunu belirtiyor: “Belge, projelerin bu kılavuzlara uyması gerektiğini belirtmiyor, ne de bu yönergelerin diğerlerinden daha önemli olduğunu söylemiyor. Ancak, projelerin hangi kılavuzların önemli olduğuna, bir projenin hangi sapmalara karar vereceğini belirlemeye teşvik ediyoruz. kullanım, şüphe duyulması durumunda danışman olan kim ve kaynak kodu için ne tür bir düzen kullanılması gerektiği. Bir 1 "Asla atlamamanız ve tüm çözümlere uygulanabilir olmanız gereken ilkeler" anlamına gelse de, onu değiştirmeyi seçebilirsiniz.
chrish

83

Eşyaları küçük yöntemlere ayırmak genellikle iyi bir fikirdir. Fakat önemli olan şeyleri mantıklı bir yerlere bölmektir.

Eğer ayrılmak mantıklı değilse, ayrılmayın. Bu genellikle bazı prosedürler veya GUI kodları için geçerlidir.

Steve McConnell , Code Complete'de kısa yöntemleri kullanırken her zaman daha üretken olmadığınızı belirtti . Mantıklı gelmediğinde bölünürseniz, hiçbir fayda için koda karmaşıklık eklersiniz.

Her zaman kurallarda olduğu gibi, kısıtlamaların neden mevcut olduğunu hatırlamak iyidir, böylece ne zaman geçerli olmadığını öğrenebilirsiniz. Kodun çoğunda yöntemler kısa olacaktır, ya da muhtemelen DRY ya da endişelerin ayrılması ile ilgili bir probleminiz var . Fakat durum böyle değilse, sorun değil.


1
Mükemmel cevap. Son iki satır, özellikle noktaya eve götürmek.
Xonatron

6
Bence en önemli kural, alt metotların ortogonal olup olmadığını kontrol etmektir. Eğer bağımsızlarsa, herhangi bir sırayla çağrılabilir ve sınıfın değişmezine saygı duyabilir ve daha sonra onları ayrı tutmak daha iyidir. Metotlar sıkı sıkıya bağlıysa, sınıf değişmezlerini kırın ve / veya belirli bir sıra ile çağırılmaları gerekiyorsa, belki de onları bir arada tutmak daha iyidir.
hugomg

4
Kod tamamlandı, iyi şeylerle dolu. Her programcı her gün öğle yemeğinde bir parça yemelidir.
deadalnix

29

Bir kural olarak kabul edilmelidir.

"En fazla 80 (100,120) metin sütunu", "yöntem başına bir çıkış noktası", "en fazla 2 iç içe geçme düzeyi" gibi şeyler kod kokusu göstergeleri için eşik dediğim şeydir. Bazen onları ihlal ediyorsanız, kodun kötü olduğu anlamına gelmez. Onları sürekli olarak ihlal ettiğinizi tespit ederseniz, kodda bir şeyler kokar ve duraklatmak ve yaklaşımınızı yeniden düşünmek isteyebilirsiniz.

Bana göre, en önemli kriterler "Bu kod anlaşılabilir mi?", "Tekrarlı mı?", "Mantıksal yerlerde mi bozuluyor?", "Gevşek bir şekilde bağlandı mı?" Birkaç tane var, ancak temel düşüncenin Donald Knuth'un tavsiyesini hatırlayarak özetlenebileceğini düşünüyorum: "Programlar insanlar tarafından okunmak içindir ve sadece bilgisayarların çalışması için tesadüf eseridir."


7
"80/100/120" sütun sınırı, kodu okuyabilmemiz içindir. Terminallerin çoğu 80 sütunda açılır ve yazarı, her okuyucunun kodu okumak istediği zaman terminallerini yeniden boyutlandırmasını sağlamak için 80 sütuna sarması daha az çaba gösterir. Diğer sınırların aksine, N sütunu sınırı kodun anlamını etkilemez, tamamen stilistik bir kuraldır; "4 boşluklu sekmeleri kullan" veya "kendi satırlarındaki işlevler için açılış parantezleri koy" ile aynı kategoride.
Dietrich Epp

4
Verilen, anlamsal bir yönden çok estetik bir görünümdür. Ancak, bu benim son cümlenin geçerli olduğu yer. Satırı bölmek için "hoş" bir yere sahip olmayan 80 sütun kuralını aşan Java ifadeleri bulmak nadir değildir. Bu, okunabilirliği ve kodun anlaşılmasını etkiler. Aynı zamanda Demeter Yasası
seggy

7
21. yüzyılda, benim IDE "dinamik kelime sarma" denilen bu özelliğe sahiptir.
György Andrasek

9
@ GyörgyAndrasek: Ama herkes IDE'nizi her zaman kullanmıyor: kodunu GitHub'ta, terminal içinde less, içinde vimve içinde emacs; ve otomatik sarma en iyi ihtimalle tehlikeli görünüyor. Kodlama standartları sizin yararınıza değil, takım halinde çalışan kişilerin yararınadır.
Dietrich Epp

2
@ DietietEpp Şahsen her zaman 80. sütuna sarılmış zor bir okuma kodum var. Geçenlerde standart Eclipse formatlayıcısının kullanıldığı bir Java projesi üzerinde çalışmak zorunda kaldım. Ve bir yöntemin içinde iki hatta üç çizgiden geçen çizgileri takip etmek çok zordu (bunun için diğer biçimlendirici ayarlarını da suçluyorum). Alt satırda ben 80 biraz modası geçmiş olduğunu düşünüyorum. Kişisel olarak 120'lik bir limit kullanıyorum, editörlerin bunu zorlayacak şekilde ayarlamış olmaları, 120 sütun genişliğinde bir konsolu var ve Github gerçekte 125 sütun gösteriyor. Ve bence çok daha okunaklı.
dürtmek

18

Yöntemlerimdeki ifadelerin sayısını gerçekten saymak için hiç zaman ayırmadım, ancak tek ve açık bir amacı net bir şekilde yerine getiren yöntemler yazmaya gayret ediyorum. Kodunuz temiz, okunaklı olduğu ve DRY ve Tek Sorumluluk ilkelerini takip ettiği sürece muhtemelen işinizi yaptınız. Yedi ifadeli limiti uygulamak için bir yöntemi keyfi olarak bölmenin kodunuzu daha az okunabilir / sürdürülebilir hale getirebileceğini düşünüyorum.


1
Okunabilirlik için +1. Bir yöntemin 20, 30 veya hatta 50 satır uzunluğunda olması önemli değildir. Eğer DRY ve SRP hedeflerinizse, yöntemlerin longish tarafında biraz görünüp görünmediği önemli değildir ... ancak çoğu zaman kodunuzu daha kolay okuduğunuzda yöntemlerinizi kısaltırsınız. doğal olarak olacak.
S.Robins

11

Yaklaşık

Bu tür kurallar tam anlamıyla alınmamalıdır. " Yöntemler kısa olmalı " diyebilirdi . Bununla birlikte, bazı insanlar bunu "1 sayfadan az" ve diğerleri "en fazla 2 satır" olarak yorumlayacaklardır.

Size kaba bir fikir vermek için "7 ifade" dediklerini sanıyorum ("7 hakkında" demeleri gerektiğini düşündüğüm halde). Arada bir 9'a ihtiyacınız varsa, terlemeyin. Ancak, 20'ye vurursanız, bu kural için doğru oyunda olmadığınızı bileceksiniz.


Bu daha sonra oldukça açık bir yaklaşım yapar. "Hiçbir zaman atlamamanız ve tüm durumlar için uygulanabilir olmanız gereken kurallar" başlığı altında işaretlenmiştir.
brian,

1
@brian - belki de rehber yazarlar yanlışlıkla "kabaca" kelimesini ihmal ettiler ya da belki çılgın diktatör tipleri oldular. Demek istediğim, OP'nin bunu bir basketbol sahası numarası olarak alması gerektiğidir. Derleyici veya tercümanın uygulayamadığı herhangi bir kural sadece bir öneridir.
Nathan Long,

"Derleyici veya tercümanın uygulayacağı herhangi bir kural sadece bir öneridir" Mutlaka doğru değil. Özel yeniden yazma ya da fxcop kurallarına bakmadım ve bu özel kuralı gerçekten uygularlarsa, ama sizi bütün stil kurallarına göre doğrulamaya zorlayan şirketler var. Şirketi, katı Microsoft kodlama kurallarını yerine getirebilecek kod yazmaya zorlayan insanlarla tanıştım.
brian

Yaklaşık olduğunu ve bir tuz tuzu tarafından alınması gerektiğine katılıyorum, bir kod standardı paragrafının keyfi bir sayı getirmesi kaçınılmaz olarak karışıklığa neden olacaktır. Çoğu zaman standartlar bağlam dışına çıkarılacak ve “insanlar” bu keyfi yaklaşımı bir dogma olarak izleyecektir.
Spoike

10

7 kesinlikle hiçbir önemi olmayan tamamen keyfi bir sayıdır.

Döngüsel karmaşıklık ifade sayısından daha büyük bir konudur. Tek bir yöntemde (korkunç olduğunu düşündüğüm) 100'lerin ifadesini içeren bir kod gördüm, ancak 1'in döngüsel karmaşıklığı vardı ve gerçekten sadece 1 şey yaptı. Çok fazla adım atıldı. Bunu daha küçük yöntemlere bölmeyi tartıştık, ancak bu yöntemlere yalnızca bu yöntemle çağrılabilirdi.

Bu oldukça aşırı bir durum olsa da, önemli olan nokta DRY kodunu ve düşük döngüsel karmaşıklığı korumanız gerektiğidir. Bu, bir yöntemdeki satır sayısından daha önemlidir.

Örneğin bir switch / case ifadesi alın. Eğer 7'den fazla olası değeriniz varsa, değerlendirmeyi birden fazla yönteme ayırmanız mı gerekiyor? Tabii ki hayır, bu aptalca olurdu.

Yapay olarak kodu sadece 7'nin altındaki ifadelerin sayısını korumak için daha fazla yönteme bölmek, yalnızca kodunuzu daha da kötüleştirir.

Yönerge olmalı Her yöntem 1 şey yapmalı ve kodunuzu KURMALIDIR.


1
+1: Keyfi sınırlar yalnızca keyfi olarak kullanışlıdır. Bir yöntem, tek bir soyutlama seviyesinde tek bir tutarlı işlem içermelidir. Böyle bir atomik birimin parçalanması, kodu daha karmaşık hale getirir, bu da kodu kavramayı zorlaştırır.
Allon Guralnek

DRY aşırı derecelendirilmiştir. Oldukça sık sık, sıkıca bağlanmamış olması gereken bir şeyin iki yönünü sıkıca bağlamak anlamına gelir.
Brad Thomas,

4

Şey, biraz değişir. Veritabanlarına erişen çok sayıda kod yazıyorum. İstisna işleme için kazan plakası kodu, birçok durumda uzun süren yedi ifadeden daha fazladır. En iyi rehberin, işlevin bir amacı olduğundan emin olmak olduğunu söyleyebilirim.


8
Kazan kodunu kendi yöntemine göre özetleyemez misin?
erjiang,

Bunun Java değil C # olduğunu farkettim ama bu tür şeyleri düşünüyorum. stackoverflow.com/questions/321418/…
Jaydee

@erjang: yapabilirsin. Java'da çok çirkin, çünkü her sorguyu anonim bir sınıfa koymanız gerekiyor ama yine de yapmaya değer. C # çok çirkin değil ve kesinlikle yapmaya değer.
kevin cline

Şahsen, daha fazla okunabilir olması için birkaç fazladan fazla satır satırı kodu buldum. Ama belki de sadece benim.
Jaydee

@Jaydee Bağlantılı soru ortak ama garip bir uygulama gösteriyor: Bir istisna ve günlüğe kaydetme. Bir sonraki seviyede, aynısını yapabilirsiniz ... bu şekilde, günlükte tek bir istisna belirir. Atma yöntemini bildirmek daha iyi olurdu ve 3 satır kurtardın. Her iki kapatan yardımcı yöntemini yazın psve rsbir tane daha kaydedin. Veya List<Row> readDb(String sql, Object... args)tüm işi yapan bir yöntem yazın (yalnızca belleğe uyan sonuç kümeleri için çalışır, ancak çok fazla veri alınması genellikle işin yine de DB'de yapılması gerektiği anlamına gelir).
maaartinus

4

Her şey bir takas. Önerilen yaklaşımla ilgili sorun - her yöntemin kısa olması için çeşitli yöntem ve sınıflara yeniden yansıtma - farklı nedenlerle rağmen, uç noktalarına alındığında okunamayan kodlara yol açmasıdır.

foo()7 şey yapan bir yöntem düşünün . 7 şeyin çok fazla olduğunu iddia edebilirsiniz. Belki de çoğu zaman haklısın. Öte yandan, bu 7 şey yakından ilişkili olabilir; mantık düzgün akabilir ve nesir gibi okuyabilir; Gerçekten ihtiyaç duyduğunuzda bunu anlamakta hiç zorlanmayabilirsiniz. Daha da kötüsü, 7 kaynağın büyük bir kaynak ağacına dağılmasını sağlamaktır, böylece size bakarsanız, foo()7 farklı yere bakmadan ne yaptığı hakkında hiçbir fikriniz yoktur.

Birçok insan kafasında böyle kurallar elde eder ve sonuç OO spagetti olarak düşündüğüm şeydir. Her şey, her yerde meydana gelen küçük atomik mikro işlemlerle, kendi küçük yönteminde veya sınıfında kutulanmış, düzenli. Ancak böyle bir kod tabanına yeni gelmek ve ne yaptığını bilmek mümkün değil. Sen kayboldun.


4

bu kötü bir rehber değil. Yeterince iyi bir şekilde gruplandırılıp birbirleriyle ilişkilendirildiği sürece, asla ayrılma yöntemlerini ve sınıflarını (çok fazla şey bulamadım).

İşin püf noktası dikey olarak ÇIKARMAMAK (Bir yöntemi bir noktada sıkıştır ve yenisini başlat). Birim testinde olduğu gibi hile, böyle bir kuralı baştan beri aklınızda tutmaktır, böylece daha iyi tasarlarsınız, başka bir yönteme 3 veya 4 ifadeyi başka bir yönteme bırakmak gerekir; kodunuzun ortasındaki bu 3 veya 4 ifadeler.

Bu tür bir bölünme, keyfi ve yalnızca bir kez kullanılsa bile, daha sonra yeni bir kod netliği nedeniyle daha iyi yeniden alevlenmelere neden olabilir, bu daha küçük sınıflar için de geçerlidir.

Birim testi yapacağınız gibi düşünün. Gerçekten sonra birim testini eklemeye çalışırsanız, zor ve bazen imkansız görünür, ancak baştan tasarlarsanız, aslında tüm kodunuzu daha iyi hale getirir.

Özet? "7'den az ifade kullan" tasarımının "7'den fazla ifade kullandım" kodunun kokusunu karşılaştırması durumunda, kod kokusunu ortadan kaldırmayı tercih ederim.


4

Vaov! Yöntemlerinizin çok küçük olması gerektiğini söyleyen basit bir kılavuz üzerinde bu kadar yoğun bir tartışma bulmayı beklemiyordum. Her zaman kurallarının açık olmasını isteyen geliştiriciler oldukları için, 7'yi seçtim çünkü bu iyi bir eşik gibi geldi.

Bazılarınız belgenin başında feragatnameyi zaten verdiniz. Ancak açık olmak gerekirse, bu belge daha iyi kod yazmanıza ve daha iyi sistemler tasarlamanıza yardımcı olan bir kılavuzlar koleksiyonunu temsil eder. Bir kılavuz bir seviye 1 olarak işaretlenmiş olsa bile, hiçbir şeyin kural olması gerektiğini asla söylemedim.

Ayrıca hiçbir zaman uzman olduğunu iddia etmedim. Ancak bu meslekte 15 yıldır, 4 yıllık C ++ deneyimim ve 11 yıllık C # deneyimim var. Aslen Industrial Strength C ++ 'a dayanıyordu, ancak o zamandan beri toplumdan gelen girdilerle hassaslaştırıyorum.

Ne olursa olsun, yükseltmeye çalıştığım nokta kendin için düşünmeye devam etmen gerektiği. 7 ifadenin kılavuzunun faydalı olmadığını düşünüyorsanız, daha uzun sürmekten daha iyidir. Heck, arada bir bu kılavuzu bile ihlal ediyorum. Sadece bilinçli bir şekilde ihlal ediyorum ve sonuçlarını kabul ediyorum.


3
İçeri girmeniz iyi oldu ve bence makul bir tartışma yaptınız. Bu, “kurallarının daima açık olmasını isteyen geliştiricilerdir” gerekçesine katılıyorum: her zaman aptallara hitap edemezsiniz ve denememelisiniz. Kuralların açık bir şekilde yapılması, bunları yanlış yapmadığı sürece iyidir: şimdi artık bir kılavuz değil, keyfi bir kuraldır. Görüştüğünüz gibi rastgele sayılar vermek, vurulmak ve haklı gösterilmenin kesin bir yoludur.
Konrad Rudolph

3

Birincisi: bu bir kuraldır, kural değil. Buna rehber denir, lütfen ona böyle davranın. Bu, kendi kararınızın da gerekli olduğu anlamına gelir (her zaman olduğu gibi)

Bunun dışında, bu kısıtlamaya uymayan çok sayıda iyi kod örneği düşünebilirim. Sadece bir rehber olmasına rağmen, fakir bir.


2

Üstümdeki ifadeye katılıyorum. Bu sadece bir kılavuzdur ve mükemmel bir dünyada her şey, her programda tekrar kullanılan nesneler ve dünya da güzel bir yer olacaktır. Her zaman doğru değildir ve bazen bu çok fazla ek yüke veya boşa kaynaklara yol açacaktır. Bunu da aklında tutmalısın.


6
“Üstümdeki ifadeye katılıyorum” Stackexchange sitelerinde bu tür cümleler kullanmaktan kaçının. Cevapların kaydedilme sırasının mutlaka görüntülendikleri sıraya göre değil.
luiscubal

Biliyorum, çok geç olmadan düşünmedim. Ama hala beynimin osuruğunu işaret ettiğin için seni + 1'leyeceğim.
Falcon165,

2

Karışıma istisna kullanımı eklediğinizde oldukça saçma.

"Deneyin, yakalayın, nihayet" den sonra, yöntem başına dört cümle ile kalırsınız!

Ayrıca, 20 ayrı alan formu için "validateForm" metodunu göz önünde bulundurun, tüm bireysel onaylamaları ayrı metotlarla yapsanız bile, çağırmak için 20 alan doğrulama metoduna sahipsiniz. Bu kılavuzlara göre "validateTopOfScreen", "validateMiddleOfScreen" ve "validateBottomOfScreen" gibi bazı anlamsız bölmelere sahip olursunuz.


Bence try/ catch/ finallyC # 'da ifadeler olmadığını söylemek oldukça güvenli . Ecma-334 § 12.3.3.15 ve çevre bölümlere bakınız. (kısaltılmış) " formun bir try-catch-finally ifadesi : try -block catch (...) catch-block-n sonunda nihayet-blok "
bir CVn

Daha önce de söylediğim gibi, tekrar tekrar yapmanız gereken bir karar. Bununla birlikte, sizin özel örneğiniz, nesne yönelimli tasarımı doğru yapmamaya bir örnek olabilir. Doğrulamayı kendileri yapan ekranınızı çoklu kontrollere bölmek isteyebilirsiniz.
Dennis Doomen,

@Dennis - true, çok uzun zamandır HTML formları yapıyorum!
James Anderson

@James Ve bu özel kılavuzun amacı budur. Alternatif, potansiyel olarak daha iyi çözümler bulmaya çalışıyorum.
Dennis Doomen,

2

Soru, "kuralları" "kurallar" ile birleştirmektir. Kurallara uyulması amaçlanmıştır - kurallar, ne yaptığınızı ve gerçekten daha iyi bir şekilde yapılıp yapılmadığını düşünmenize neden olacak tavsiyelerdir.

Bence ortalama olarak, çoğu programlama muhtemelen yönergeleri izleyerek daha da gelişmiştir ancak yönergeleri dogmatik olarak izlemenin çözülenden daha fazla soruna neden olacağı durumlar her zaman olacaktır. Bu yüzden kural değil, kural olarak sunulurlar.

Önceki bir cevaplayıcı, rehberin yazarlarının asla dogmatik olarak kullanılmalarını istemediklerini ve bu etkiyi belgelerine dahil ettiklerini göstermiştir.


0

Yukarıdaki yorumların haberi ile aynı fikirdeyim. 7 benim için sağlıksız ve yakut olan bazı dillerde faydalı olabilir, ancak C #, Java, C ++ gibi diller için bu "7 satırlı" kuraldan şüpheliyim. Size bir örnek vereyim. Mevcut uygulamanın 22 metin alanı var ve sunucu tarafında doğrulama yapıyorum. Yönteme validateInput () adı verilir ve tercihim, checkEmailFormat () gibi karmaşık bir şeyi doğrulamadığım sürece, tüm alanları tek bir yöntemde doğrulamaktır. Yani temelde validateInput yöntem kodum, zaman zaman karmaşık doğrulamaya çağıran 108 satırdır.

Şimdi, her bir alanı doğrulamak için 25 yöntem çağırdığımı düşünün. Eğer yeni bir geliştirici gelirse ana yöntemden içeri girip çıkması gerekecek ve sırayla birkaç tane arayabilecek olan 25 yöntemi atlayacaktır. Büyük projelerde kaybolmak zorunda.

Kodumu netleştirmek için gerçekten yaptığım şey, temelde bu 4 satırın ne yaptığını söyleyen temiz yorumlar sağlamaktır.

validateInput (UserObj kullanıcısı) {

// İlk adı doğrula ....... ......

// soyadını doğrula ...... ......

// e-postayı doğrulayın ..... // e-posta biçimini kontrol etmek için çok karmaşık düzenli ifade checkEmailFormat (); .... .....

ve bunun gibi.. }


1
Ayrıca James Andersons'un sorusuna verdiğim yanıtı görün. Özel bir durumda, bu doğrulama yönteminin aynı anda birkaç ilke ve yönergeyi ihlal edip etmediğini merak ediyorum.
Dennis Doomen,

0

Kötü kural İstisnaların ele alınması, veritabanı alanlarının belirlenmesi, doğrulanması, çoğu yöntem yedi ifadenin altında nasıl olabilir? Satır içi lambda işlevlerini asla yapmamalı mıyız?

Kod satırları rastgele bir karmaşıklık sayısıdır. Eklenti yöntemleri ile gibi kodlar oluşturabilirim

                Parallel.ForEach(regions, region => {   Console.Write(region.Resorts.Where(x => x.name == "Four Seasons").OrderBy(x => x.RegionId).ThenBy(x => x.ResortId).ThenBy(x => x.name).ToList());   });

Yine tek bir yöntemle çok fazla şey yapmanın harika bir örneği. Neredeyse her karşı argümanda insanlar, Tek Bir Sorumluluk İlkesini ihlal ediyorlar (bir yöntem bağlamında).
Dennis Doomen

-1

Tüm genç programcılar bu ilkeye uymaya zorlanmalıdır. Bu, onları daha fazla satır kodu eklemek yerine, meşgul oldukları şeyin yapısı hakkında düşünmeye zorlar.

Şu anda 550 ifadeli kod yöntemine birçok if ifadesi ve devam edip geri dönüşlü bir yöntem arıyorum. Bu saçmalık. Programcı sadece ne yaptığını düşünmeye zorlanmış olsaydı ...

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.