En iyi kodlama uygulamaları her zaman kullanılmalı mı [kapalı]


20

Yazılım kodlanırken mimari, inşa edilen uygulama ile ilgili olarak daima en iyi uygulamalar mı yoksa pratik uygulamalar mı olmalı?

5 yıl yaşayabilecek ve bu 5 yıl içinde 2 geliştirmeye sahip iki sayfalık bir web uygulaması oluşturuyorsam, bağımlılık enjeksiyonunu, tasarım modellerini, görünüm modellerine sahip model-görünüm denetleyicisini vb.


53
Aşırı mühendislik en iyi uygulama değildir.
5gon12eder

18
Her durumda tüm yazılımlar için geçerli olan tek bir 'en iyi uygulama' yoktur. Özel durumunuz için geçerli olan maliyet için size en iyi getiriyi neyin verdiğini değerlendirmeniz gerekir.
whatsisname

10
Pragmatik bir programcı olun. Bu sizi en az direnç yolunda ilerletmelidir.
Jon Raynor

3
En iyi uygulama için bir tanım sağlayabilir misiniz? Birçok cevap, bunun yarattıkları bir çeşit gerçek yorum ile karıştırıldığı görülüyor.
JeffO

5
Her zaman en iyi uygulamaları kullanmak en iyi uygulamadır.
Kaz

Yanıtlar:


40

En iyi kodlama uygulamaları her zaman kullanılmalı mı?

Her zaman? Hayır, bu aptalca.

En iyi uygulamalar yönergelerdir. Çoğu insan için, çoğu durumda, bir incelikle uygulanırsa, en iyi sonuçları verecektir. Çözümleri düşünürken başladığınız yerdir. Ancak en iyi uygulamaların göz ardı edilebileceği ve göz ardı edilmesi gereken yerler olacaktır, çünkü daha iyi çözümler var.

Sorun şu ki, insanlar geleceği göremiyorlar. Ve yeni başlayanlar (ve bir grup yeni başlayanlar) kaçınılmaz olarak, kuralların kendileri için geçerli olmadığı bu özel senaryoda olduklarını düşünüyorlar. Şüphe duyduğunuzda, en iyi uygulamaları kullanın. Siz veya benden daha akıllı tonlarca mühendis arasında yıllarca süren tartışmalar ve deneyimler, onları sürekli olarak iyi sonuçlar ürettiğini buldu. Ama hiçbiri (ya da neredeyse hiçbiri) sizin de sizin probleminizi bilmiyor. Bazen kuralların bükülebileceği istisnai durumlarla karşılaşırsınız.


12
... Ancak, "en iyi uygulamayı" tanımlayın.
svidgen

4
Yeni başlayanlar için bir şeyler "doğru" yapmak isterler ve neden var olduklarını veya nasıl kullanacaklarını gerçekten anlamadan bazı en iyi uygulamaları (örneğin yazılım kalıpları) körü körüne takip etmek daha yaygındır. Belki de bu aydınlanmanın ikinci aşamasıdır , ilk aşama "Ne yaptığımı bilmiyorum".
Robert Harvey

19
@RobertHarvey - önce ne yapacağınızı öğrenirsiniz, o zaman neden bunu yaptığınızı öğrenirsiniz, o zaman neden yapmadığınızı öğrenirsiniz
HorusKol

1
@HorusKol, şimdiye kadar okuduğum en derin şeylerden biri olabilir.
Jared Smith

"İnsanlar geleceğe
bakamıyor

29

Evet. Bu apaçık ortada. Neden en iyi olanı yapmayasınız ki?

Ancak sorun bu değil. Zor kısım, en iyi uygulamanın ne olduğunu bulmaktır, çünkü tam olarak hangi gereksinimlere sahip olduğunuzu ve projenin yıllar içinde nasıl gelişebileceğini bilmeniz gerekir ve bu son derece zordur.

Bununla birlikte, iyi bir kural: Bir grup tasarım deseninin adlarını almak ve sadece düşünmeden onları bir araya getirmek en iyi uygulama DEĞİLDİR.

Bunun dışında sorunuz gerçekten cevaplanamıyor. Belirli bir durum için "en iyi uygulama" nın tam olarak ne olduğunu bulmak, bir yazılım mühendisi olmanın ne olduğudur. Daha iyi cevaplar almak için daraltmanız gerekecek.


6
Cevabınız, sadece üçüncü paragrafınız nedeniyle benden aşağı oy verdi .
Robert Harvey

4
Üçüncüsü için bir oylama yapacağım, ancak bunun en iyi uygulama olması nedeniyle. <Grin & Duck>
Blrfl

5
Benim oyum dört paragrafın tümü için de eşit olarak geçerlidir.
Quuxplusone

4
"en iyi uygulamalar", İngilizce yazılım mühendisliği tartışmasında deyimsel bir ifadedir ve bu cevabın onu ifade ettiği anlamdan farklı bir şey ifade eder, bu da "belirli bir soruna olası en iyi çözüm" gibi bir şeydir. Örneğin, "kaynak kontrolünü kullan", kaynak kontrolünün çözümün bir parçası olmadığı bir sorun olup olmadığına bakılmaksızın, yani gerçekten her zaman en iyi olup olmadığına bakılmaksızın "en iyi uygulama" olarak tanımlanır . Bu, dilin korkunç bir kötüye kullanımı olabilir, ancak sıkıştığımız şey budur.
Steve Jessop

1
@SteveJessop Bunun farkındayım. Bununla birlikte, birçok "en iyi uygulama" vardır ve bazen çatışırlar. Anahtar bağlam ve kapsamdır. Her zaman durumunuzu özel kılan bir şey vardır. Durumunuz için hangi "en iyi uygulama" nın en uygun olduğunu ancak gereksinimlerinizin tam olarak ne olduğunu ve kısıtlamalarınızın neler olduğunu anlayarak anlayabilirsiniz. Süper bir örnek: Kaynak kontrolünü kullanmak, kaynak kontrolünü kullanırsanız birisinin yeryüzünü havaya uçurmakla tehdit ETMEMESİ GEREKEN en iyi uygulamadır. Bu, en iyi uygulama olarak kabul edilecek şeyi değiştiren ek bir bağlam olacaktır.
sara

11

En iyi uygulama, yazılımınızın özellikler, sürdürülebilirlik, performans vb. İçin işlevsel ve işlevsel olmayan gereksinimlerini en etkili şekilde karşılayan uygulamadır. Ama eğer olmazsa, pragmatizm kazanır.

Şu anda çalıştığım yerde, ürünümüz için sıfırdan yeni bir web kullanıcı arayüzü oluşturuyoruz. Hiçbir şekilde RESTful olmayacak; yalnızca POST kullanır. Çok katmanlı değildir, herhangi bir mikro hizmet kullanmaz ve NoSQL veritabanı kullanmaz. Enterprise Java gibi bir mimarisi yoktur.

Başka bir deyişle, hiç kalça değil.

Ancak , açısal benzeri veri bağlama, mobil ve masaüstü gibi farklı cihaz türlerine otomatik ölçeklendirme, tüm ağır kaldırma işlemlerini yapmak için Telerik'in Kendo kullanıcı arayüzüyle entegrasyon ve tamamen şifreli ve güvenli özellikli son teknoloji ürünü bir HTML5 çerçevesi içeriyor. veri kanalı.

Hepsinden iyisi, 30 günde, bir Enterprise mimarisinde Java geliştiricileri ordusunu elde etmek için bir yıl sürecek bir başarı olacak. Kod ES6 / dakikadır; şimdiye kadar gördüğüm en temiz kodlardan bazıları.


Sanırım cevabınız benimkinde yapmaya çalıştığım noktayı gösteriyor ... En azından öyle düşünüyorum. +1 ... hala ayrıntı eksikliği nedeniyle bu soruyu VTC yapmama rağmen!
svidgen

Benim tür projem gibi geliyor! Modadan çok yorulmak gelişimde ortaya çıkıyor.
Matt Lacey

RE Telerik: Widget'larının bazılarında bir uyarı kelimesi olan DateTimePicker, Açısal taraftan tarihleri ​​değiştirmek isterseniz Angular ile birlikte kullanıldığında korkunçtur .
Dan Pantry

@DanPantry: Bunu aklımda tutacağım.
Robert Harvey

3

Hayır . En iyi uygulamalar, genellikle zamanın% 99'unu yapmak için en iyi şey olarak kabul edilen şeylerdir, ancak bu her zaman her durum için geçerli oldukları anlamına gelmez.

Bir geliştirici olarak işiniz bu en iyi uygulamaları bilmek ve kullanmaktır, ancak bunları ne zaman bir kenara bırakmanın güvenli olduğunu da bilmektir.

Bunun kendi kendini tanıtması gerekmiyordu, ancak yakın zamanda Salesforce.com platformundaki bu olaylardan birini ayrıntılı olarak anlatan çalışmamla ilgili bir blog yazısı yazdım . Altın kurallardan biri "Bir döngünün içinde asla sorgulama" dır, ancak son zamanlarda, platformda 7 yıl çalıştığımda ilk kez bu kurala uymamak için mükemmel geçerli bir nedenim vardı.

Amaç platformun belirli bir yürütme bağlamında gerçekleştirebileceğiniz sorgu sayısı sınırlamaları olmasıdır, ancak bu durumda yığın alanı tükenmesini önlemek ve bir sorgu içinde iyi olacağını biliyordum bir döngü içinde sorgulamak zorunda kaldı sınırı.

Bu yüzden nadirdir, ancak en iyi uygulamaların bir senaryo ile ilgili olmadığı zamanlar vardır, bu yüzden uymazlarsa onları zorlamayın.


2

"En iyi uygulamalar" ile birisinin bir kitapta yazdığı kuralların bir listesini kastettiğini düşünüyorum. Tabii ki kelimeyi tam anlamıyla kastediyorsanız, elbette her zaman mümkün olan en iyi kodu yazmalısınız.

Evrensel olarak kabul edilen tek bir “en iyi uygulama” seti olmadığını belirtmem gerekir mi? Bir uzman tarafından teşvik edilen herhangi bir kural için, neredeyse her zaman farklı bir şey söyleyen eşit kimlik bilgilerine sahip başka bir uzman bulabilirsiniz.

Ama mesele: Kısa cevap: genellikle, ama her zaman değil.

Her alanın "en iyi uygulamaları" ve "ders kitabı çözümleri" vardır. Bunlar, uzun yıllar boyunca birçok insanın birikmiş deneyimini ve bilgeliğini temsil eder ve göz ardı edilmemelidir. FAKAT! Her zaman özel koşullar, saçaklar, vb. Vardır. Herhangi bir alanda gerçekten yetenekli kişi, kurallara ne zaman uyulacağını ve ne zaman kırılacağını bilir.

Genel olarak söyleyebilirim: Ders kitabı kurallarına uyarak başlayın. Ders kitabı kurallarını uygularken sorun çıkarır - gereksiz karmaşıklık, düşük performans, her neyse - o zaman bu kuralı kırmanın daha iyi bir fikir olup olmayacağını düşünün.

Kuralları görmezden gelir ve anın hevesinin sizi götürdüğü yere giderseniz, kodunuz muhtemelen karışık bir karışıklık olacaktır. Ne kadar akıllı olursanız olun, dünyadaki ilk programcı değilsiniz. Başkalarının deneyimlerinden öğrenmek mantıklıdır. Günlük yaşamımızda bu yüzden ebeveynlerimiz, öğretmenlerimiz ve vaizlerimiz var: bu yüzden yapmanın aptalca bir hata olduğunu öğrenmek için her aptal hatayı kendimiz tekrarlamak zorunda değiliz.

Ancak, zamanın% 100'lük bir kitabından bir kurallar listesini slav bir şekilde izlerseniz, genellikle kare bir çiviyi yuvarlak bir deliğe çekiçlerken bulacaksınız. Kural kitabını yazan kişiler sizinki gibi bir durumla karşılaşmamış olabilirler. Ve sahip olsalar bile, yeterince nadir olsalar bile görmezden gelebilirler. Zamanın% 80'inde çalışan bir kural mükemmel bir kuraldır - zamanın% 100'ünde değil, zamanın% 80'inde çalıştığını anladığınız sürece.

Veritabanı tasarımına, veritabanı tasarımcılarına uymasını tavsiye ettiğim birçok kural içeren bir kitap yazdım. (Başlığı vermekten kaçınacağım, bu yüzden öz-tanıtımda utanmadan kayıyor gibi görünmüyorum.) Kesinlikle benimki gibi bir kitap okumak ve ondan mümkün olan her şeyi öğrenmek için bir veritabanı tasarlamak isteyen herkesi teşvik ediyorum. . Ama KURSUNDA listelediğim kuralları çiğnemeniz gereken zamanlar var.

Bir keresinde, o zaman önderlik ettiğim bir geliştirici ekibi için bir programlama standartları belgesi yazdım. Ve son kural şu ​​şekilde gitti: "Yukarıdaki kurallardan birini kırmak için iyi bir nedeniniz varsa, devam edin, AMA kodunuza kuralı neden bozduğunuzu açıklayan bir yorum eklemelisiniz. iyi bir nedenden ötürü, kuralı izleyin. Yorumu yazmak kuralı izlemekten daha sorunluysa, kuralı izleyin. " Birinin nedenini açıklamak zahmetine değecek bir kuralı çiğnediğini gördük.


1

By en iyi uygulamalar , sana ve belirli bir görevi yapmanın literal iyi yolu değil bir çeşit "yazılım kalitesini artırmaya yardımcı olabilir yazılım geliştirme topluluğu zamanla öğrendiğini gayri kurallar" anlamına tahmin ediyorum.

Evet, yapmamak için bir nedeniniz olana kadar. Ciddi bir önem vermeniz ve mevcut görevin şartlarına ve sınırlamalarına başvurmanız iyi bir neden olmalıdır. Bu, uygulamayı tamamen anladığınız ve uygulayabileceğiniz anlamına gelir. Bu düşünceye girmeyelim, eğer onu anlamadıysanız, o zaman en iyi düşünme türü olmamalıdır. Tanıma bakın.

Her zaman en iyi olanı yapmayacaksın. Patron sana, "Bu saçmalýđý gönder yoksa kovuldun!" Gönderirsiniz ve muhtemelen başka bir iş ararsınız, ancak yine de gönderirsiniz. Bazen kendinizi yeterince iyi bir şey yaparken bulabilirsiniz. Tabii ki, bunu alışkanlık haline getirmek istemiyorsunuz, ancak bazen vagonları yuvarlatmanız gerekiyor ve atların kör olması konusunda endişelenemiyorsunuz.



1

Bazı şeyler önemlidir, bazıları değil.

Dil ve stil seçiminizi eldeki probleme göre uyarlamalısınız.

Örneğin, kural dışı durum işleme için bir "En İyi Uygulama" her zaman istisnaları yakalamak ve bunları günlüğe kaydetmek olabilir, ancak bir birim testi oluştururken, en iyi uygulama genellikle birim test çerçevesinin bunları doğru bir şekilde raporlayabilmelerini sağlamaktır.

Öte yandan, "KURU" kuralını göz önünde bulundurun. Kendini tekrar etmeyen kodlar için çabalamak, sadece bariz nedenlerden dolayı değil, aynı zamanda daha fazla kod yazdığınızda daha iyi bir kodlayıcı olmanız nedeniyle - kodlama / düşünme becerilerinizi esnetmenin harika bir yoludur. yazma ve kopyalama / yapıştırma becerileriniz yerine ve bazı mantıklı kurallara uymanız durumunda uzun vadede genellikle kodunuzu (daha iyi bir kod atmayı beklediğinizde bile) tekrar ziyaret etmeyi daha iyi hissedeceksiniz.

Özetle, esnek olun ama sadece okunamayan önemsiz kodu kodlamayın, çünkü bunun bir atma kodu olduğunu düşünüyorsunuz.


1

Farklı bir açıdan bakmaya çalışacağım.

Günümüzün modern çerçeveleri, mvc, bağımlılık enjeksiyonu, katmanlı mimari vb. İle temel bir proje kurmayı çok kolaylaştırıyor. El yapımı bir çözüm gerektiren bir şeye çarpana kadar, oluşturulan bir tabanla başlayın ve sizin için sağlanan araçları kullanın. O zaman bu en iyi uygulamalardan köşeleri kesebilirsiniz.

2 sayfa web uygulaması için Spring Boot gibi bir şey kullanmak, sonra kendi sunucu uygulamalarınızı, jdbc sorgularınızı ve diğer şeyleri yuvarlamak zor değildir.


1

Deneyimlerime göre zorunlu olduğunu düşündüğüm en iyi tek uygulama var:

Basit Tut, Aptal (KISS)

Başka bir deyişle: Hangi araçları, API'leri, mimarileri vb. Seçerseniz seçin - basit tutarsanız, gelecekte çalışmak, daha az hataya sahip olmak, hızlı, bellek verimli olmak ve istediğiniz her şeyi yapmak daha olasıdır.

İnsanların bahsettiği diğer tüm şeyler: İlkeler, kalıplar, uygulamalar, vb. - Seçebileceğim bir araç paleti olarak, üzerinde çalıştığım projeye en uygun olanları seçiyorum. Hepsi problemleri çözmek için teknikler ve fikirler sunar. İşin püf noktası, öncelikle bu sorunlarınız olup olmadığını anlamaktır.


0

En iyi "En İyi Uygulamalar" her zaman kılavuzdaki öğelerin ne zaman uygunsuz olduğunu belirlemek için zekanızı ve deneyiminizi kullanmanız gereken bir bölüm içerir. Ayrıca, bu tür istisnaları inceleme, onaylama ve belgeleme ve bunları "en iyi" uygulamaların bir parçası haline getirme hakkında bir bölüm içerebilir.


0

Yazılım kodlanırken mimari, inşa edilen uygulama ile ilgili olarak daima en iyi uygulamalar mı yoksa pratik uygulamalar mı olmalı?

Teoride evet.

Gerçek Dünyada, [hala] evet, bunu yapabileceğiniz sürece .

Tabii ki, "Hayır" anlamına gelir.

Zaman ve para baskıları sizi her zaman "hızlı ve kirli" bir çözüm yolundan aşağı itmeye çalışacaktır, çünkü müşteriye "daha iyi" bir değer sunar. Bunun nasıl uygulandığı müşterinin veya muhasebecilerinin ilgisini çekmez. Eğer iki günde [kötü] ya da üç ayda mükemmel bir iş yapabilirseniz, sizden hangisini isteyeceklerini düşünüyorsunuz?

En iyi uygulama ve "kaçmak" zorunda olduğunuz şey arasındaki boşluğa "Teknik Borç" denir; "geri ödeme", yani geri dönüp işleri daha sonra geliştirmek için bir planınız olduğu sürece mükemmel kabul edilebilir. Yine, her zaman (hiç?) Bütçenizi elde ettiğiniz bir şey değil.

Bir taktik, içinde "hızlı" düzeltmesi olan erken bir Beta sürümü yayınlamak, ancak "tam" sürümden önce gerekli mimari iyileştirmelere öncelik verilmesini sağlamaktır. Yine, her zaman (hiç?) Yapacak bir şey değil.

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.