OOP tasarımlarınız için nasıl iyi uygulamalar edindiniz? [kapalı]


12

OOP tasarımları oluşturmakta zorlandığımı fark ettim. Bu özellik X sınıfına doğru ayarlanıp ayarlanmadığına karar vermek için çok zaman harcadım.

Örneğin, bu birkaç gün süren bir gönderidir: /codereview/8041/how-to-improve-my-factory-design

Koduma ikna olmadım. Bu yüzden tasarımlarımı geliştirmek, oluşturmak için daha az zaman harcamak istiyorum.

İyi tasarımlar oluşturmayı nasıl öğrendiniz? Bana önerebileceğiniz bazı kitaplar?


Şu anki seviyen nedir? Sanırım tasarım kalıplarını biliyor musunuz?
ACNB

Aslında, bazılarını PluralSight kursunda okumaya başladım: pluralsight-training.net/microsoft/Courses/…
Zon

1
Yazılım tasarımında en etkili kitaplardan biri '' Tasarım Kalıpları: Yeniden Kullanılabilir Nesneye Dayalı Yazılımın Öğeleri '' dir. Şimdi biraz tarihli olmasına rağmen hala okumaya değer. Ayrıca [ en.wikipedia.org/wiki/Software_design_patternülür(wikipedia makalelerini) okumaya başlayabilirsiniz . Bu yazılım tasarım kalıpları, yalnızca yaygın sorunlar için iyi bir çözüm sunmakla kalmaz, aynı zamanda şu anda profesyonel terminolojinin bir parçasıdır.
ACNB

1. yazma - 2. inceleme (P.SE gibi literatür ve siteleri okuma dahil) - 3. refactor - 4. tekrar
HorusKol

Deneyimin yerini tutamaz, bu tür bilgiler için kısa yol yoktur

Yanıtlar:


14

Sistem tasarlamak sadece yaparak daha iyi yapabileceğiniz şeylerden biridir. Tabii ki, iyi tasarım hakkında okumak için biraz yardımcı olur - tavsiye edilen genel nesne yönelimli tasarım kitabı Dörtlü Tasarım Desenleri Çetesi : Yeniden Kullanılabilir Nesne Odaklı Yazılım Öğeleri'dir . Farklı sistem türleri ve farklı alanlar için tasarım desenleri ve ilkeleri hakkında başka kitaplar da vardır.

Diğer insanları dahil etmek de en iyisidir. Bir tasarım oluşturduktan sonra, çözdüğünüz sorunları ve tasarımları eleştirel bir inceleme için diğer insanlara sunun. Geri bildirimlerini dinleyin ve onlarla neden kararlar verdiğinize odaklanan bir iletişim kutusu açın. Çözümü uygularken tasarımınızla ilgili başka sorunlar da yaşarsınız. Bunları not edin ve onlardan öğrenin. Uygulamayı tasarım ve gereksinimlere karşı da gözden geçirmek için diğer insanlarla birlikte çalışmak ve yaptığınız şeyleri neden yaptığınızla ilgili eleştirel bir tartışma yapmak da iyi bir fikir olabilir.

Tipik olarak diğer insanlarla yüz yüze oturup en iyiyi bulsam da, burada Programcılar'da özel tasarım soruları sorulabilir. Kod incelemeleri ve uygulama soruları için Stack Exchange siteleri de vardır .


4

Sorduğunuz kod görünümü sorusunun görünümünden, aşırıya kaçma aşamasındasınız. İyi tasarımın önemini bilen insanlar arasında oldukça yaygın bir sorun olduğunu düşünüyorum.

Aslında, aldığınız herhangi bir beceri ile doğal ve muhtemelen gerekli bir adımdır. Bir şey öğrenmeye başladığınızda, bir beceri bilgisinde ne kadar ilerlerseniz ve ne kadar çok uygularsanız, sonuçlarınız o kadar iyi olur ve doğrudan ustalığa yönelmişsiniz gibi görünür. Sorun şu ki, yeni hedefiniz sonuçlarınızın kalitesi değil, yeteneğiniz hakkında ne kadar bilgi biriktirdiğinizdir.

Bir becerinin gerçek ustalığı, onu ne zaman kullanılacağı ve ne zaman kullanılamayacağını anlamayı içerir. Bu beceriyi gereğinden fazla kullanmak muhtemelen bu anlayışı geliştirmenin tek yoludur. Elbette, bunu okuyabilirsiniz, ancak okumak deneyimin yerini tutmaz.

Bir kere, tasarım kalıpları hakkında okumak IMHO için kötü bir başlangıç. SOLID ve GRASP gibi OO tasarım ilkelerini okumak daha iyidir. Onları tanıdıktan sonra, ortak tasarım kalıplarının incelenmesi iyi bir fikirdir, çünkü bu ilkelerin somut deyimler oluşturmak için nasıl uygulanabileceğini göreceksiniz.

Bir dil kullanımında kalıplar ortaya çıktığında, dilin aslında bir özelliği olmadığı iddia edilir. Bu ifade çok radikal olsa da, içinde çok fazla gerçek var. Bu nedenle, tavsiye etmek istediğiniz kavramları daha iyi anlamak ve yeni kavramlar hakkında bilgi edinmek için diğer dillere bakıp oyun oynamanızı öneririm. Kısa bir liste Squeak, Ruby ve Lisp olacaktır.
Listeye gelince, benim kişisel tavsiyem, bana tasarım hakkında çok şey öğreten Bilgisayar Programlarının Yapı ve Yorumlanmasıdır, bana karmaşık soyutlamalardan ve yukarıdan aşağıya bir şekilde.

İşte önerim:

  1. kod yaz (ve neyin kötü olduğunu anlamaya çalış)
  2. kodu okuyun (ve neyin iyi olduğunu anlamaya çalışın)
  3. diğer insanlarla bilgi alışverişi. fikirlerinizi test edin.

Bu mükemmel bir tavsiye! Kevin ile benim tartışmada görülebileceği gibi, benim tasarım deseni bilgisini uygulayarak üzerinde noktasında tamamen değilim burada
TheSilverBullet

3

Diğerlerinin de belirttiği gibi, sadece pratik ve deneyim ile iyi olacaksınız. Gerçekten alabileceğiniz bir kısayol yok.

Eşyalarınıza tekrar bakmanız ve yazdıklarınızı beğenmemeniz, sizi mesleğimizdeki diğer birçok insanla karşılaştırıldığında zaten eğrinin önüne koyuyor. Kendinizi geliştirmeye çalışırken, geri kalanımız 20 parametreli 500 satırlık bir işlev yazacak, hepsi referans olarak iletilen ve 15 tanesi [içeri / dışarı] olduklarını düşünüyoruz ve bu insanlar bomba olduklarını düşünüyor çünkü işe yaramazlar.

Yazılım tasarımı söz konusu olduğunda, siyah ve beyaz değil, tasarım iyi veya kötü. Ne kadar deneyime sahip olursanız olun, eski kodunuzun bazılarına geri dönecek ve "Bunu yazdığımda ne içiyordum?" Diye düşüneceksiniz. Anahtar, şeylerin sürekli değerlendirilmesi ve iyi kodu iyi ve kötü kodu neyin kötü kıldığını değerlendirmek için sıklıkla düşünce alıştırmalarından geçmektir.

Son olarak, hiçbir şey uygulamanın yerini almasa da, her zaman blogları / kitapları / bu siteyi okumaya devam etmek her zaman iyi bir fikirdir, çünkü diğer insanlar düşünmediğiniz farklı bakış açılarına işaret edecektir.

Başlamak için şu kitapları tavsiye ederim:

  • Çevik İlkeler, Desenler ve Uygulamalar C # - Ben bu kitap aracılığıyla kendimi 3/4. Yazarın öne sürdüğü ana noktalardan biri ve buna% 100 katılıyorum, uygulamak için bir tasarım deseni arayarak bir sorunu çözmeye başlamayın. Alternatifleri bundan daha karmaşık hale gelirse, işleri olabildiğince basit tutun ve kodu bir desene dönüştürün.
  • Head First Tasarım Desenleri - Bu kitabı okumadım ve IMO'da birçok Head First serisi özellikle bu alana yeni gelenler için hedefleniyor. Bu yüzden daha basit tarafta olma eğilimindedirler, ancak bu kitap hakkında başkalarından birçok iyi yanıt duydum / okudum

1
+1: "İşleri olabildiğince basit tutun" ... "Kodu bir desene dönüştürün ..."
kevin cline

1

Ön tasarım asla arka tasarım kadar iyi değildir. Sadece test edin, kodlayın ve yeniden düzenleyin. İşler çirkin olduğunda ve nasıl temizleneceğinden emin değilseniz, bazı tasarım desenlerinin yardımcı olup olmayacağına bakın. Bir süre pratik yapın ve yakında diğer geliştiriciler böyle temiz tasarımları nasıl bulduğunuzu soracaklar.

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.