Bir zamanlar sevdiğiniz programlama uygulaması hakkında fikrinizi değiştirdiniz mi? [kapalı]


99

Programlarken hepimiz kullandığımız ve güvendiğimiz uygulamalar ve kalıplar geliştiririz. Ancak, zamanla anlayışımız, olgunluğumuz ve hatta teknoloji kullanımımız değiştikçe, bir zamanlar harika olduğunu düşündüğümüz bazı uygulamaların olmadığını (veya artık geçerli olmadığını) fark ederiz.

Bir zamanlar oldukça sık kullandığım, ancak son yıllarda değiştiğim bir uygulamaya örnek, Singleton nesne modelinin kullanımıdır .

Kendi deneyimlerim ve meslektaşlarımla yaptığım uzun tartışmalar sayesinde, tekillerin her zaman arzu edilmediğini anladım - test etmeyi daha zor hale getirebilirler (alay etme gibi teknikleri engelleyerek) ve bir sistemin parçaları arasında istenmeyen bağlantı oluşturabilirler. Bunun yerine, artık tekillerin doğasını ve varlığını sistemin umursamayan veya bilmesi gereken kısımlarından gizleyen nesne fabrikaları (tipik olarak bir IoC konteyneri ile) kullanıyorum. Bunun yerine, bu tür nesnelere erişim elde etmek için bir fabrikaya (veya hizmet bulucuya) güvenirler.

Kendini geliştirme ruhuyla topluma sorularım:

  • Son zamanlarda hangi programlama kalıplarını veya uygulamaları yeniden gözden geçirdiniz ve şimdi kaçınmaya çalışıyorsunuz?
  • Onları neyle değiştirmeye karar verdiniz?

Yanıtlar:


159


//Coming out of university, we were taught to ensure we always had an abundance 
//of commenting around our code. But applying that to the real world, made it 
//clear that over-commenting not only has the potential to confuse/complicate 
//things but can make the code hard to follow. Now I spend more time on 
//improving the simplicity and readability of the code and inserting fewer yet 
//relevant comments, instead of spending that time writing overly-descriptive 
//commentaries all throughout the code.



+1. Aynı cevabı göndermek üzereydim. Birkaç hafta önce bir arşiv diskinde eski programlama ödevlerimden bazılarını buldum. Hepsi aynı görünüyordu. Yorum satırlarının kod satırlarına neredeyse 1: 1 oranı vardı.
Michael Moussa

32
Görünüşe göre yanlış yorum yapmışsın , çok değil. Kod kendi adına konuşmaz. Hayır. Gerçekten yok. Bununla ilgili iyi bir rant için en son NT Insider'ı okuyun. Yorumların gereksiz olacağını düşünüyorsanız ya yanılıyorsunuz ya da yanlış yapıyorsunuz. Üniversiteler göründüğü gibi doğru yorumları (veya hata izleme veya sürüm kontrolü ... * iç çekme *) öğretmez. Orada çok az yorum var. (ve daha az iyi olanlar)
Thomas

5
Code Complete, yorum yapma konusunda iyi ipuçlarına ve bunları yedekleyecek verilere sahiptir.
Thomas

20
Yorumlar tanımlamak için kullanılması gereken neden (çok açık değilse) kodu ne olduğu ve değil neyi kod yapar. Muhtemel bir istisna, Carmack'in 0x5f3759df sihirli numarası gibi çılgınca bir twiddling / dil saldırısıdır.
Chris Simmons

6
@Thomas: Kişisel olarak problemin, iyi yorum yapmayı öğretmenin üniversitelerin öğrencilere gösterebileceği bir şey olmadığını düşünüyorum. Okullardaki neredeyse tüm programlar tek seferlik şeylerdir; öğrenciler bir yıl önce yazdıkları koda geri dönüp bakma deneyimi yaşamıyorlar ve hiç anlamıyorlar. Ayrıca, alt düzey sınıflar gerçekten basit kodlama kavramları öğretir - bu düzeyde yorum yapmak, olanlardan dolayı neredeyse zorunlu olarak sıkıcıdır. Başka bir deyişle, birine sığ havuzda yüzmeyi öğretmeye çalışmak gibidir; hareketleri anlamaları onlar için doğru bağlam değildir.
Dan Lew

117

Tek dönüş noktaları.

Bir zamanlar her yöntem için tek bir dönüş noktası tercih ettim, çünkü bununla rutinin gerektirdiği herhangi bir temizliğin gözden kaçmamasını sağlayabiliyordum.

O zamandan beri, çok daha küçük rutinlere geçtim - bu yüzden temizlemeyi gözden kaçırma olasılığı azaldı ve aslında temizleme ihtiyacı azaldı - ve erken dönüşlerin kodun görünen karmaşıklığını (iç içe geçme düzeyi) azalttığını gördüm . Tek bir dönüş noktasının yapaylıkları - "sonuç" değişkenlerini etrafta tutmak, bayrak değişkenlerini tutmak, henüz yapılmamış durumlar için koşul cümleleri - kodu gerçekte olduğundan çok daha karmaşık görünmesini sağlar, okumayı ve sürdürmeyi zorlaştırır. Erken çıkışlar ve daha küçük yöntemler, gitmenin yoludur.


3
Autoptr, scoped_ptr, CComPtr vb. Gibi kendilerini otomatik olarak temizleyen veri türleriyle birleştirildiğinde kabul ediyorum
i_am_jorf

3
Kod temizleme {} nihayet {} bunun için denemektir
banjollity

@banjollity: sonunda desteklemeyen diller hariç {}. Ve onu destekleyen dillerde bile, sonunda {} uygulamasının HER ZAMAN çalıştırılacağının garanti edilmediğini unutmayın.
Chris K

1
@banjollity, Chris: C ++ 'da, temizleme, yıkıcı içindir ve aşırı durumlar haricinde (exit (), yığın çözülürken bir yıkıcı, gücünüzü kesen sincaplar) çalışacağı garanti edilir.
David Thornley

4
Kabul. İç İçe Koşullu yerine Koruma Cümleleri ftw!
Jonik

111
  • İlk denemede her şeyi mükemmel bir şekilde kodlamaya çalışmak.
  • Kodlamadan önce mükemmel OO modeli oluşturmaya çalışmak.
  • Her şeyi esneklik ve gelecekteki iyileştirmeler için tasarlamak.

Tek kelimeyle aşırı mühendislik .


6
Bekle, her zaman ilk denemede doğru anlarım. :)
i_am_jorf

18
Gerçek para, ilk seferinde ince bir şekilde yanlış yapmak ve onu vahşi doğaya bırakmaktır. Daha sonra, insanlar gimped versiyona alıştıklarında, kibirli bir şovmenlik ile saldırın ve ekstra zafer kazanmak için hatayı / verimsizliği düzeltin! ;)
Eric

7
@jeffamaphone - Hayır, sadece Jon Skeet ilk seferinde doğru anlıyor.
Jordan Parmer

"Aşırı mühendislik" kelimesini seviyorum
Neilvert Noval

@jeffamaphone - Ben de her zaman ilk denemede doğru anlarım. Ama daha fazla girişim ihtiyacım olanı veriyor :)
umbr

78

Macar gösterimi (hem Formlar hem de Sistemler). Her şeyin önekini kullanırdım. strSomeString veya txtFoo. Şimdi someString ve textBoxFoo kullanıyorum. Yeni birinin gelip alması çok daha okunaklı ve daha kolaydır. Ek bir bonus olarak, onu tutarlı tutmak önemsizdir - kontrolü camelCase ve kullanışlı / açıklayıcı bir ad ekleyin. Forms Hungarian'ın her zaman tutarlı olmama dezavantajı vardır ve Systems Hungarian size pek bir kazanç sağlamaz. Tüm değişkenlerinizi bir araya getirmek, özellikle modern IDE'lerde o kadar kullanışlı değildir.


Python veya JavaScript gibi dinamik olarak yazılmış dillerde ne olacak? Yine de bu dillerde Macar gösterimini kullanmayı yararlı buluyorum, böylece değişkenlere bakarken ne tür bir değişken bekleyeceğimi biliyorum (eğer beklenecek bir tür varsa - tabii ki, dinamik olarak yazılmış bir dili ele almak aptalca olurdu tam olarak statik olarak yazılan dil gibi).
Dan Lew

4
Bunun dışında benzer bir şey yapıyorum: fooTextBox ve string'ler umarım görünür: numberOfEntries => int, isGreat => bool, vb.
rball

Macar gösterimlerinden kurtulmak için +1. Rball'a katılıyorum; fooTextBox, fooService, fooString gerçekten gerekli olduğunda.
blu

3
@ wuub: Doğru isimlendirmeyle herhangi bir şeyin önüne eklemeniz gerekmediğini iddia ediyorum.
Kenny Mann

4
Bu arada bahsettiğiniz gerçek Macar değil.
Antony Carthy

67

"Mükemmel" mimari

Ben ile geldi birkaç yıl önce mimarlık. Kendimi teknik olarak yapabildiğim kadar ittim, böylece% 100 gevşek bir şekilde bağlı katmanlar, kapsamlı delege kullanımı ve hafif nesneler vardı. Teknik bir cennetti.

Ve berbattı. Mimarinin teknik saflığı, geliştirici ekibimi sonuçlar üzerinde mükemmelliği hedefleyerek yavaşlattı ve neredeyse tam bir başarısızlık elde ettim.

Artık çok daha basit, teknik olarak mükemmel olmayan bir mimariye sahibiz ve teslimat oranımız fırladı.


57

Caffine kullanımı. Bir zamanlar beni uyanık tuttu ve kodun parmaklarımdan ateşli bir akışkanlıkla uçtuğu muhteşem bir programlama havasında tuttu. Şimdi hiçbir şey yapmıyor ve eğer sahip olmazsam başım ağrıyor.


55
Daha fazla kahve içmen gerekiyor. Bu işe yaramazsa, sigara içmeye başlayın.
MusiGenesis

7
Brad: Python'a sahipken bunlara
Peter

Güzel Noel Hikayesi referansı! :-)
Steve Echols

2
Alışkanlığı bıraktım ve sonra birkaç kez tekrar edindim (Bu şimdi benim üçüncü döngüm). Soğuk sabahları sıcak bir fincan kahve ile kodlamak gibisi yoktur!
Matthew Iselin

15
"Görünüşe göre amfetaminleri bırakmak için yanlış haftayı seçtim."
ShreevatsaR

50

Kodu yorumlamak. Eskiden kodun değerli olduğunu ve kendi hazırladığınız o güzel taşları silemeyeceğinizi düşünürdüm. Ekli bir TODO veya NOT olmadıkça karşılaştığım herhangi bir yorumlanmış kodu şimdi siliyorum çünkü onu içinde bırakmak çok tehlikeli. oradaydı: yakın zamanda yorum yaptılar mı? bu bir geliştirme ortamı değişikliği mi? neden bu ilgisiz bloğu yapıyor?

Cidden kodu yorumlamamayı ve bunun yerine silmeyi düşünün. İhtiyacınız olursa, hala kaynak kontrolünde. YAGNI gerçi.


6
Yeniden düzenleme sırasında eski kodu yorumluyorum, ancak yalnızca değiştirme kodunun çalıştığını doğrulayana kadar. Yeni versiyon tamamen işlevsel hale geldiğinde, eski yorum satırlarını siliyorum.
muusbolla

Doğrusu - kodu da yorumluyorum, ama sadece birkaç gün için. Geri gelirsem ve kaçırdığım bir şey olduğunu fark edersem, yeni kod üzerinde çalışılmadan önce silinir.
Colin Mackay

4
Yorumlanan kodu bir kez kontrol et diyorum, SONRA silin. Çeşitli farklı kod bitlerini test ettiğiniz birçok kez vardır ve bozuk kodu kontrol etmek istemezsiniz ...
DisgruntledGoat

Sürüm kontrolünün arkadaşınız olduğundan bahsetmiyorum bile.
David Thornley

+1 Yeniden düzenlediği veya yeniden yazdığı tüm kodlara yorum yapmakta ısrar eden bir programcı ile çalıştım . Bu beni çılgına çevirirdi çünkü bazen üzerinde çalıştığım şeyi bulmak için 1k + satırlık saçmalıklar arasında gezinmem gerekirdi.
Evan Plaice

46

# Bölge direktiflerinin aşırı kullanımı / kötüye kullanılması. Bu sadece küçük bir şey, ancak C # 'da daha önce sınıflarımı düzenlemek için her yerde # bölge yönergelerini kullanırdım. Örneğin, bir bölgedeki tüm sınıf özelliklerini birlikte gruplardım.

Şimdi eski koda bakıyorum ve çoğunlukla onlardan rahatsız oluyorum. Bunun çoğu zaman işleri daha net hale getirdiğini sanmıyorum ve bazen sizi yavaşlatıyorlar. Bu yüzden şimdi fikrimi değiştirdim ve iyi düzenlenmiş sınıfların çoğunlukla bölge yönergeleri olmadan daha temiz olduğunu hissediyorum .


31
Bölgelerden nefret ediyorum. Ekibimdeki insanlar bunları anlamsızca kullanıyor. Ben onlara "kötü kod saklayıcılar" diyorum.
rball

9
Kesinlikle bir kod kokusu.
Frank Schwieterman

3
Bölgelerden nefret ediyorum. Şu anda, işlevin neredeyse 500 satır olduğu bir kodu koruyorum ve bunu yönetmek için akıllı geliştirici, 10 ila 15 bölgeye kod parçaları koydu.
SolutionYogi

6
@Solution Yogi: Sizin durumunuzda bölgelerin gerçek sorun olduğunu sanmıyorum :-)
Ed S.

9
Bence, idareli kullanılırsa bölgeler daha iyi olabilir.
Gregory Higley

39

Genel olarak şelale gelişimi ve özel olarak, bir şekilde kanonik olması beklenen eksiksiz ve kapsamlı işlevsel ve tasarım şartnamelerinin yazılması ve ardından bunların doğru ve kabul edilebilir bir şekilde uygulanmasının beklenmesi uygulaması. Onun Scrum ile değiştirildiğini gördüm ve ondan kurtulduğumu söylüyorum. Basit gerçek şu ki, müşteri ihtiyaçlarının ve arzularının değişen doğası, herhangi bir sabit spesifikasyonu etkili bir şekilde yararsız hale getiriyor; soruna gerçekten doğru bir şekilde yaklaşmanın tek yolu, yinelemeli bir yaklaşımdır. Elbette, Scrum sihirli bir değnek değildir; Birçok kez kötüye kullanıldığını ve kötüye kullanıldığını gördüm. Ama şelaleden daha iyi.


3
Bunu müşterime söyleyin ... Bazı işe yaramaz "Ben kristal küreye sahip bir programcıyım, bu nedenle düşük seviye tasarımımın 6 ay içinde nasıl görüneceğini tam olarak biliyorum" şartname belgesini yazmanın ortasındayım :)
Igor Brejc

36

Asla çökmez.

Çok iyi bir fikir gibi görünüyor, değil mi? Kullanıcılar çökecek programları sevmezler, öyleyse çökmeyen programlar yazalım ve kullanıcılar programı beğenmeli, değil mi? Ben böyle başladım.

Bugünlerde, işe yaramazsa, çalışıyormuş gibi davranmaması gerektiğini düşünmeye daha meyilliyim. İyi bir hata mesajıyla mümkün olan en kısa sürede başarısız olun. Bunu yapmazsanız, programınız birkaç talimat sonra daha da sert çökecektir, ancak bazı tanımlanmamış boş işaretçi hatasıyla hata ayıklamanız bir saat sürecek.

En sevdiğim "çökme" kalıbı şudur:

public User readUserFromDb(int id){
    User u = null;
    try {
        ResultSet rs = connection.execute("SELECT * FROM user WHERE id = " + id);
        if (rs.moveNext()){
            u = new User();
            u.setFirstName(rs.get("fname"));
            u.setSurname(rs.get("sname"));
            // etc
        }
    } catch (Exception e) {
        log.info(e);
    }
    if (u == null){
        u = new User();
        u.setFirstName("error communicating with database");
        u.setSurname("error communicating with database");
        // etc
    }
    u.setId(id);
    return u;
}

Şimdi, kullanıcılarınızdan hata mesajını kopyalayıp yapıştırmalarını ve size göndermelerini istemek yerine, günlük girişini bulmaya çalışırken günlüklere dalmanız gerekecek. (Ve geçersiz bir kullanıcı kimliği girdiklerinden, günlük girişi olmayacak.)


Sorunu oluşturan günlükleriniz karşısında kullanıcının size gerçek hata mesajını verme olasılığı nedir? (Bu özel durumda çok düşük, ancak kullanıcılar hata mesajlarından neredeyse hiç alıntı yapmıyorlar!) Bunları okuyorlar mı?
Arafangion

1
Rastgele bir kullanıcının size hata mesajı gönderme şansının düşük olduğunu kabul ediyorum, ancak şans sıfır değil (önemsiz örnek: bazen kendi uygulamanızı kullanıyorsunuz) ve bazı kullanıcılar zamanla neyi kopyalayıp / yapıştıracaklarını tam olarak öğreniyor. Sana (yapmanız gerekir) log olmamalı demiyorum, ancak uygulama koptuğunda, bu edilmektedir kırık. Bir hata mesajı göstermek, kullanıcının ilk adının "veritabanı ile iletişim hatası" (veya daha da kötüsü nullveya boş dize) olduğunu iddia etmekten çok daha iyidir ve kullanıcıya karşı çok daha dürüsttür .
gustafc


Teşekkürler, düzelttim. (Orada biraz daha sakin olmasına rağmen: İstisnaları ve diğer "çökmeleri" önlemek için tüm bu sorunlar ve yine de kayıtsız şartsız çöktü.)
gustafc

33

Tasarım kalıplarını her tanıdığımda uygulamanın mantıklı olduğunu düşündüm .

Çalıştığım dil çok daha zarif veya daha kolay çözümlere izin verirken, aslında yabancı programlama dillerinden stilleri kopyaladığımı bilmiyordum.

Birden çok (çok) farklı dil kullanmak gözlerimi açtı ve bana ait olmayan sorunlara başkalarının çözümlerini yanlış uygulamak zorunda olmadığımı fark etmemi sağladı. Ruby gibi bir dilde uygulanan fabrika modelini gördüğümde şimdi titriyorum .


2
Lütfen yakut konusundaki bilgisizliğimi bağışlayın, ama neden fabrika kalıbını onunla birlikte kullanmayalım?
Mike Chamberlain

Burada bir rubyist değil, ancak fabrika bir uygulamaya bağlı olmaktan kaçınmak içindir, ancak Ruby dinamiktir ve Anything ile alay edebilir veya taklit edebilirsiniz. Yani gerçekten bir uygulamaya bağlı değilsiniz.
Stéphane

27

Saplantılı test. Eskiden önce test geliştirmenin kuduz bir savunucusuydum. Bazı projeler için bu çok mantıklı geliyor, ancak her bir işlevsellik parçası için birim testleri yazma doktrinine kölece bağlı kalmanın birçok proje için sadece olanaksız değil, aynı zamanda zararlı olduğunu da fark ettim.

Gerçekten, herhangi bir şeye kölece bağlı kalmak zararlı olabilir.


22
Midye için oldukça iyi sonuç veriyor.
MusiGenesis

Test kapsamı, fayda ile orantılı olmalıdır. Yaptığınız her şey gerçekten bir fayda sağlamalıdır. % 100 kapsama size o kadar çok şey vermeyecek. yaşam desteği / füze fırlatma senaryosunda olmayan bir biçimde 80 veya 90'dan fark.
Spence

Testten farklı olarak birim testine +1 güvenir.
Preet Sangha

25

Bu küçük bir şey, ama: Küme parantezlerinin nereye gittiğini önemsemek (aynı satırda mı yoksa sonraki satırda mı?), Önerilen maksimum kod satır uzunlukları, değişkenler için adlandırma kuralları ve stilin diğer öğeleri. Herkesin bunu benden daha çok önemsediğini fark ettim, bu yüzden bugünlerde çalıştığım her kimse ile devam ediyorum.

Düzenleme: Bu varlığın istisnası, elbette, en çok önemseyen (veya bir grubun stilini belirleyecek konumda olan) olduğumda. Bu durumda ne istersem onu ​​yaparım!

(Bunun tutarlı bir stile sahip olmamakla aynı şey olmadığını unutmayın. Bir kod tabanında tutarlı bir stilin okunabilirlik için çok önemli olduğunu düşünüyorum.)


5
Birisi buna olumsuz oy verdi, ancak bunun pratik bir bakış açısı olduğunu düşünüyorum. En iyi kod stili nedir? Önemli değil. Aynı dosyada yukarı ve aşağı bakın ve kopyalayın.
Frank Schwieterman

12
En iyi kod stili, o mağaza için standart ne olursa olsun.
David Thornley

Bu yüzden Visual Studio'daki otomatik format seçeneklerini seviyorum. Diğer geliştiricilerin kodu nasıl yazdıkları önemli değil, ben sadece hızlı bir format yapıyorum ve tam olarak nasıl sevdiğimi ... çoğu zaman.
corymathews

5
@cory: Bu, sürüm kontrol yazılımınızın yeni yeniden biçimlendirdiğiniz dosyanın sürümleri arasındaki farkı size gösterme yeteneğini bozmaz mı?
Steve Melnikoff

Bu yüzden python öğrenmekten hoşlanıyorum ... sekme duraklarımın ne ayarlandığına dair endişelenmem gerektiğini ve stilleri desteklemediğimi düşünmek. Bu biraz zorlayıcı.
Chris K

24

Belki de o zamandan beri fikrimi değiştirdiğim en önemli "programlama uygulaması", kodumun herkesten daha iyi olduğu fikridir. Bu, programcılar için yaygındır (özellikle yeni başlayanlar).


20

Fayda kitaplıkları. Bir gün onları başka bir yerde kullanabileceğim teorisi ile çeşitli yardımcı yöntemler ve sınıflar içeren bir derlemeyi taşıyordum.

Gerçekte, çok sayıda kötü organize edilmiş işlevsellik parçalarına sahip dev bir ad alanı yarattım.

Şimdi, onları yarattığım projede bırakıyorum. Muhtemelen ihtiyacım olmayacak ve eğer yaparsam, onları her zaman daha sonra yeniden kullanılabilir bir şeye yeniden düzenleyebilirim. Bazen onları ortak bir derlemeye olası çıkarma için // YAPILACAKLAR ile işaretleyeceğim.


12
İyi bir alıntı var (şu anda orijinali bulamıyorum) bu "aynı sorunu 3 kez çözmeniz gerekene kadar genel bir rutin oluşturmayı düşünmeyin bile.
DaveR

9
"Üç grev ve refactor" - Refactoring Martin Fowler tarafından. Üçün Kuralı , s. 58.
Nick Dandoulakis

20

Kodladığımdan fazlasını tasarlıyorum. Bir süre sonra analiz felci olur.


44
Ara sıra "Eğer çok fazla düşündüğünüzü fark ederseniz, durun ve yapın. Eğer çok fazla şey yaptığınızı fark ederseniz, durun ve düşünün."
Neil N

Bu güzel, ama ne kadarı çok fazla?
Hamish Grubijan

UML'ye (Yararsız Modelleme Dili) çok fazla bağımlılık. Bu arada kullanımları vardır. Ama birinin sınıf diyagramları çizmeye başladığını ve "diyagramlardan kod üretmenin ne kadar harika olacağını" öğütlediğini gördüğümde koşu ayakkabılarımı bağlarım. Ayrıca Visual Studio, tüm bunları otomatik olarak yapan ve crack üzerindeki nesne gezgini gibi çalışan yerleşik bir etkileşimli sınıf diyagramı oluşturucusuna sahiptir.
Evan Plaice

15

İş mantığını gerçekleştirmek için bir DataSet kullanımı. Bu, kodu veritabanına çok sıkı bir şekilde bağlar, ayrıca DataSet genellikle SQL'den oluşturulur ve bu da işleri daha da kırılgan hale getirir. SQL veya Veritabanı değişirse, DataSet'in dokunduğu her şeye damlama eğilimi gösterir.

Bir nesne yapıcısı içinde herhangi bir iş mantığını gerçekleştirmek. Kalıtım ve aşırı yüklenmiş kurucular yaratma yeteneği, bakımı zorlaştırma eğilimindedir.


15

Kısaltılmış değişken / yöntem / tablo / ... İsimler

Bunu her zaman yapıyordum, adların uzunluğu konusunda zorunlu sınırlamalar olmadan dillerde çalışırken bile (muhtemelen 255 veya benzeri bir şeydi). Yan etkilerden biri, (standart olmayan) kısaltmaları açıklayan kod boyunca dağılmış çok sayıda yorumdu. Ve tabii isimler herhangi bir nedenle değiştirildiyse ...

Şimdi, şeylere gerçekten oldukları gibi, iyi açıklayıcı isimlerle hitap etmeyi tercih ederim. yalnızca standart kısaltmalar dahil . Yararsız yorumlar eklemeye gerek yok ve kod çok daha okunaklı ve anlaşılır.


Evet, bu tür bildirimleri sevmelisiniz: void Foo (x1, y, x2, y2, p, r, j) ... WTF ?!
Ed S.

Veya daha kötüsü (ve evet, bunu gerçekten gördüm), Foo(int arg0, String arg1, float arg2)vb.
Mac

14

Kurumsal Kitaplık gibi mevcut Veri Erişimi bileşenlerini özel bir yardımcı yöntem katmanıyla sarma.

  • Kimsenin hayatını kolaylaştırmaz
  • İçinde hatalar olabilecek daha fazla kodu
  • Birçok kişi EntLib veri erişim bileşenlerini nasıl kullanacağını bilir. Yerel ekip dışında hiç kimse şirket içi veri erişim çözümünün nasıl kullanılacağını bilmiyor

14

Nesne tabanlı programlamayı ilk olarak 1984'te Smalltalk hakkında okurken duydum, ancak 1992'de cfront C ++ derleyicisini kullanana kadar bir oo diline erişimim yoktu. Nihayet 1995'te Smalltalk'ı kullanmaya başladım. Oo'yu merakla bekledim. teknoloji ve yazılım geliştirmeyi kurtaracağı fikrini satın aldı.

Şimdi, oo'yu bazı avantajları olan bir teknik olarak görüyorum, ancak bu araç kutusunda sadece bir araç. İşimin çoğunu Python'da yapıyorum ve genellikle sınıf üyesi olmayan bağımsız işlevler yazıyorum ve genellikle geçmişte bir sınıf oluşturduğum yerlerde veri gruplarını tuple veya listelerde topluyorum. Veri yapısı karmaşık olduğunda veya verilerle ilişkili davranışa ihtiyacım olduğunda hala sınıflar oluşturuyorum, ancak buna direnme eğilimindeyim.

Aslında doğru anlarsam Java nesnelerini kullanabilmesine rağmen, zaman bulduğumda Clojure'da bazı işler yapmakla ilgileniyorum. Oo'nun öldüğünü söylemeye hazır değilim, ama şahsen eskiden hayran olduğum kişi değilim.


13

C # 'da kullanarak _notation özel üyeler için . Şimdi bunun çirkin olduğunu düşünüyorum.

Daha sonra this.notationözel üyeler için değiştirdim , ancak onu kullanırken tutarsız olduğumu fark ettim, bu yüzden onu da bıraktım.


29
Hala _notation kullanıyorum ve bunun harika olduğunu düşünüyorum.
Arnis Lapsa

3
_ Notasyondan nefret ediyorum; ThisNotation'ı genel üyeler için ve thisNotation'ı özel üyeler için kullanıyorum.
Callum Rogers

Ben de nefret ediyorum.
Kafamı

4
Katılmıyorum. İsimleri yönetmeyi çok daha kolay hale getiriyor. Özellikler veya genel / dahili üyeler için PascalCase, bir özellik aracılığıyla açığa çıkan üyeler için _UnderscorePascalCase ve yöntemler / yapıcılar ve özel üyelerdeki parametre adları için camelCase kullanın. 'This' anahtar sözcüğü yalnızca geçerli sınıfın referansını sınıfın dışına iletmeniz gerektiğinde veya sınıf içinde otomatik olarak oluşturulan bir üyeye (ad, kontroller, vb. Gibi) erişmeniz gerektiğinde gereklidir.
Evan Plaice

@Evan: Son bölüm hariç anlattıklarını aynen yapıyorum. Yöntemleri ve özellikleri çağırırken thisveya Me(sırasıyla C # & VB.NET) kullanma eğilimindeyim . IMO, özellikle bu kapsamda dört veya daha fazla nesne olduğunda kodumu daha sonra okumayı ve anlamayı kolaylaştırır.
Alex Essilfie

11

Uygulamadan önce üniversitenin tavsiye ettiği tasarım yöntemini kullanmayı bıraktım. Kaotik ve karmaşık bir sistemde çalışmak beni tavrımı değiştirmeye zorladı.

Elbette hala kod araştırması yapıyorum, özellikle daha önce hiç dokunmadığım koda dokunmak üzereyken, ama normalde bir şeyi önce yapmak için mümkün olduğunca küçük uygulamalara odaklanmaya çalışıyorum. Bu birincil hedeftir. Ardından mantığı kademeli olarak iyileştirin ve tasarımın kendi kendine görünmesine izin verin. Programlama yinelemeli bir süreçtir ve çevik bir yaklaşımla ve birçok yeniden düzenleme ile çok iyi çalışır.

Kod, neye benzeyeceğini düşündüğünüz ilk şeye hiç bakmayacaktır. Her seferinde oluyor :)


10

Kontrat bazında tasarım konusunda çok iyiydim. Bu, tüm işlevlerimin başına çok sayıda hata denetimi koymak anlamına geliyordu. Endişelerin ayrılması açısından sözleşmeler hala önemlidir, ancak kodumun ne yapmaması gerektiğini uygulamaya çalışmak yerine, ne yaptığını doğrulamak için birim testleri kullanmaya çalışıyorum.


Böyle programlamam öğretildi. Tabii ki, bana bir HS matematik öğretmeni tarafından öğretiliyordu, bu yüzden tüm işlevlerinin kendi kendini doğrulamasını istemesi mantıklı geliyor sanırım.
Alex

10

Daha özlü olduğu için birçok yöntemde / sınıfta statikleri kullanırdım. Testler yazmaya başladığımda bu pratik çok hızlı değişti.


10

Kontrol Edilen İstisnalar

Kağıt üzerinde harika bir fikir - sözleşmeyi açıkça tanımlar, hataya yer yoktur veya bazı istisna durumlarını kontrol etmeyi unutur. İlk duyduğumda satıldım.

Elbette pratikte çok karışık bir hal aldı. Bugün, mirası gizleyen Spring JDBC gibi kitaplıklara sahip olma noktasına kadar, istisnaları ana özelliklerinden biri olarak kontrol etti.


9

Değerli her şeyin yalnızca belirli bir dilde kodlandığı. Benim durumumda C'nin şimdiye kadarki en iyi dil olduğuna inandım ve başka bir dilde hiçbir şeyi kodlamak için hiçbir nedenim olmadı ... asla.

O zamandan beri birçok farklı dili ve sundukları faydaları / işlevleri takdir etmeye başladım. Küçük bir şeyi kodlamak istersem - hızlı bir şekilde - Python kullanırdım. Büyük bir proje üzerinde çalışmak istersem C ++ veya C # ile kod yazardım. Bir beyin tümörü geliştirmek istersem Perl'de kod yazardım .


8

Biraz yeniden düzenleme yapmam gerektiğinde, hemen başlamanın ve yeni tasarımı uygulamaya geçirmenin, bağlantıları işe yarayana kadar düzeltmenin daha hızlı ve daha temiz olduğunu düşündüm. Sonra, yeni tasarıma doğru yavaş ama güvenilir bir şekilde ilerlemek için bir dizi küçük yeniden düzenleme yapmanın daha iyi olduğunu fark ettim.


bunun beni kaç kez ısırdığını hatırlayabilirim ....
Preet Sangha

8

Belki de kodlama uygulamalarımda ve diğerlerinde değişen en büyük şey, uygulamalardaki davranışların ve işlevselliğin temeli olarak internetten indirilen dış sınıfların ve kitaplıkların kabul edilmesidir. Üniversiteye gittiğimde okulda, kendi kodumuzla işleri nasıl daha iyi hale getirebileceğimizi anlamaya ve sorunlarımızı çözmek için dile güvenmeye teşvik edildik. Kullanıcı arayüzünün ve hizmet / veri tüketiminin tüm yönlerindeki gelişmelerle, bu artık gerçekçi bir kavram değil.

Bir dilde asla değişmeyecek bazı şeyler vardır ve bu kodu daha basit bir işlemle ve yazmam gereken daha az satır kodla saran bir kitaplığa sahip olmak bir nimettir. Bir veritabanına bağlanmak her zaman aynı olacaktır. DOM içinde bir öğe seçmek değişmeyecektir. Sunucu tarafı komut dosyası aracılığıyla bir e-posta göndermek asla değişmez. Bu defalarca yazmak zorunda kalmak, uygulamadaki temel mantığımı geliştirmek için kullanabileceğim zamanı boşa harcıyor.


7

Tüm sınıf üyeleri başlatılıyor.

Her sınıf üyesini bir şeyle, genellikle NULL ile açıkça başlatırdım. Bunun farkına vardım:

  • normalde her değişkenin okunmadan önce iki kez başlatıldığı anlamına gelir
  • aptalca çünkü çoğu dilde değişkenleri otomatik olarak NULL olarak başlatır.
  • aslında çoğu dilde hafif bir performans vuruşunu zorlar
  • daha büyük projelerde kodu şişirebilir

4
Bazen tüm sınıf üyelerini BAŞLATMAMANIN sonuçları sizi gerçekten bir $$ içinde ısırabilir.
muusbolla

Klonlayarak yeni örnekler oluşturan prototip tabanlı bir dil kullanmadığınız sürece. Tüm üyeleri başlatmak sizi gerçekten çok fazla sorundan kurtarabilir.
Wojciech Bederski

6

Ben de sizin gibi, uygulamalarımın çeşitli bileşenleri arasındaki eşleşmeyi azaltmak için IoC modellerini benimsedim. Her bir bileşeni olabildiğince bağımsız tutabildiğim sürece, bakımı ve parça değiştirmeyi çok daha basit hale getiriyor. Ayrıca, veritabanı yönetimi işlerini basitleştirmek için NHibernate gibi daha fazla nesne ilişkisel çerçeveler kullanıyorum.

Özetle, yazılımı daha hızlı ve verimli bir şekilde oluşturmaya yardımcı olmak için "mini" çerçeveler kullanıyorum. Bu mini çerçeveler çok fazla zaman kazandırır ve doğru yapılırsa, bir uygulamanın bakımını son derece basit hale getirebilir. Kazanmak için Tak Çalıştır!


-1 IoC ve çerçevelerin çoğalmasına katlanamıyorum. İyi, IoC ve çerçeveleri ayırmak = gereksiz karmaşıklık
Paul Hollingsworth

Ayrıştırmayı nasıl övebilir ve yine de IoC ve diğer çerçevelerden nefret edebilirsiniz? Başlangıçta birçok IoC çerçevesi ve tasarım modeli bunu yapar.
ajawad987
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.