Veri değerlerini programa kodlamanın avantajları var mı?


13

Ben kendi kendini yetiştirmiş, acemi bir kodlayıcıyım, bu yüzden programcıyı dilediğime özür dilerim.

Temelde verilerdeki sorgulardan raporlar oluşturmak için bir araç oluşturacak geliştiricilere sürekli olarak güncellenecek veriler sağladığım bir proje üzerinde çalışıyorum.

Anlaşılan herkes, rapor oluşturma programına veri değerlerini (şema değil, etki alanları / değerlerin kendileri) sabit olarak kodlamaları gerektiğini düşünüyor.

Örneğin, personel hakkında rapor verdiğimizi varsayalım; rapor, her bölüm için bir başlık ile kategorilere bölünecek ve daha sonra her bölüm başlığı altında iş unvanlarının alt başlıkları olacak ve daha sonra her alt başlığın altında çalışanların bir listesi olacaktır. Geliştiriciler departmanları ve iş unvanlarını kodlamak istiyorlar. Öte yandan, çalışma zamanında bu şeyleri sorgulamak, kayıtları sıralamak ve dinamik olarak hangi değerlerin bulunduğuna bağlı olarak rapor üstbilgileri oluşturmak / düşünebileceğini düşünürdüm.

Potansiyel değerler listesi zaman içinde değişeceğinden (örneğin, departmanlar oluşturulacak / yeniden adlandırılacak, yeni iş unvanları eklenecektir), kodun sürekli olarak güncellenmesi gerekecektir. Bana öyle geliyor ki, kod bakım adımlarını atlayabilir ve raporları dinamik olarak düzenleyebiliriz.

Bir geliştirici olmadığım için neyi kaçırdığımı merak ediyorum. Değerleri böyle bir araca kodlamakta ne gibi avantajlar olabilir? Bu genellikle programların tasarlanma şekli midir?



Rapor çapraz sekmeleri, yani satırlardaki değerlerin sütun olarak görünmesi gerekir mi?
Tulains Córdova

1
@Brendan - Rapordaki sabit kod değerleriniz varsa, listeyi İKİ yerde (veri kaynağı ve rapor) değiştirmeniz gerekir; oysa rapor dinamikse, raporu yalnızca bir konumda değiştirmeniz gerekir (rapor) .
kwah

1
@Brendan neden üç yer bulursunuz? Belki benim anlayış yanlış ama ben bir veritabanından veri almak için bir sql sorgusu öngörüyor, uygulama örneğin / bölüm tarafından döndürülen değerleri toplamak / gruplandırmak. Birden fazla db sorgusunun ek yüküne sahip olmak istiyorsanız, gerçekten isterseniz farklı bölümleri / rol başlıklarını seçebilirsiniz. Hiçbir noktada veriler birden fazla konumda mevcut değildir - rapor veriler tarafından yönlendirilir.
kwah

1
@Brendan Ayrıca, tek bir yerde olduğunu tanımlamanıza katılmıyorum - onu tanımladığınız şekilde, kaynak koduna dağılmış olarak birden fazla yerde.
kwah

Yanıtlar:


9

Wikipedia:

Sabit kodlama (ayrıca sabit kodlama veya kodlama), belki de yalnızca geçmişe bakıldığında, bir programın veya başka bir yürütülebilir nesnenin kaynak koduna doğrudan bir girdi veya yapılandırma verisi olarak kabul edilebilecek veya bu verileri harici kaynaklardan elde etmek veya verilen girdi ile programın kendisinde veri oluşturmak veya biçimlendirmek yerine.

Sert kodlama bir antipattern olarak kabul edilir.

Bir anti-desen olarak kabul edildiğinde, sabit kodlama, giriş verilerinin veya istenen formatın değiştiği her seferinde programın kaynak kodunun değiştirilmesini gerektirir, son kullanıcının ayrıntıyı programın dışında bir şekilde değiştirmesi daha uygun olabilir.

Bazen bundan kaçınamazsınız, ancak geçici olmalıdır.

Sert kodlama sıklıkla gereklidir. Programcılar, son kullanıcı için dinamik bir kullanıcı arabirimi çözümüne sahip olmayabilir, ancak yine de özelliği sunmalı veya programı bırakmalıdır. Bu genellikle geçicidir ancak kısa vadede kodu iletme baskısını çözer. Daha sonra, kullanıcının son kullanıcıya sonuçları veya sonucu değiştirmesi için bir yol veren parametreleri iletmesine izin vermek için yazılım kodlaması yapılır.

  • Mesajların kodlanması bir programı uluslararasılaştırmayı zorlaştırır.
  • Sabit kodlama yolları başka bir konuma adapte olmayı zorlaştırır.

Hardcoding uygulamasının tek avantajı hızlı kod dağıtımı gibi görünmektedir.


5
Tamam, ama "tek avantaj" genellikle çok önemlidir. Programlamadaki tasarım kararları genellikle gelecekteki prova ve hızlı teslimat arasındaki ödünleşimle ilgilidir ve bu nedenle sabit kodlama mükemmel kabul edilebilir bir seçim olabilir. Bazen değil sert kodlama kötü bir tasarım seçimdir.

-1 Bunun yararlı bir cevap olduğunu düşünmüyorum. Esasen 'değerleri kaynak koduna uygunsuz bir şekilde gömmek' uygunsuz diyor. Bence OP kaynak kodlara bir şeylerin ne zaman ait olabileceğine dair bilgi istiyor ve bu nedenle Wikipedia tanımınızın dışında kalıyor.
Nathan Cooper

Sabit kodlama işleminizin hayati bir parçası olmalı ve mikro servisler çağında bir anti-desen modası geçmiş olarak kabul edilirken, Açısal Tur Kahramanları öğreticisi, doğrudan kodlayan veya hatta zorunlu kılan büyük bir yazılım evinin yüksek profilli bir örneğidir. bir ara adım. Dahası, dinamik verilere geçtiğinizde, belki de bir ortam değişkeni tarafından kontrol edilen, hatta kodun kendisinde bir boole geçişi tarafından kontrol edilen bazı sabit kodlu verileri bir geri dönüş olarak tutmalısınız, böylece hatalar ve güvenlik sorunları düzgün bir şekilde izole edilebilir. hat.
Google Arama'da neler var

24

Gerçekten mi? Olası Geçerli Kullanım Durumları Yok mu?

Ben kabul ederken sabit kodlama genellikle olduğu anti-desen veya çok kötü en azından kod koku , mantıklı durumlarda bol şunlardır:

  • basitlik ( YAGNI ),
  • girdi aslında sabittir ve asla değişmez (yani doğal veya iş sabitini veya yaklaşık bir değeri temsil eder. örneğin 0, PI, ...),
  • gömülü yazılım (bellek ve ayırma kısıtlamaları akla geliyor),
  • güvenli yazılım (bu değerler mevcut değildir ve / veya kod çözme veya tersine mühendislik, örneğin kriptografik belirteçler ve tuzlar),
  • oluşturulan kod (önişlemciniz veya üreteciniz yapılandırılabilir, ancak sabit kodlu değerlerle kod çıkarır),
  • ve muhtemelen birkaç tane daha.

Hala bir Anti-Desen mi? Yani olan Aşırı Mühendislik ! Bu Yazılımınızın Yaşam Beklentisi ile ilgili !!

Tüm harika nedenler olduğunu söylemiyorum, ve genellikle sabit kodlanmış değerlere saparım. Ancak bazıları geçerli nedenlerle kolayca geçebilir.

Ve basitlik / YAGNI ile ilgili ilkini önemsiz olduğunu düşünerek denetlemeyin : muhtemelen dar bir kullanım durumu için bir işi çok iyi yapan basit bir komut dosyası için çılgın bir ayrıştırıcı ve değer denetleyicisi uygulamak için hiçbir neden yoktur.

Dengeyi bulmak zor. Bazen bir yazılımın büyüdüğü ve başladığı basit komut dosyasından daha uzun süreceğini öngörmezsiniz. Çoğu zaman, bunun tersi de geçerlidir: bir şeylere aşırı mühendislik yaparız ve bir proje Pragmatik Programcı'yı okuyabileceğinizden daha hızlı rafa alınır. Erken bir prototipin gerekmediğinden daha fazla zaman ve çaba harcadınız.

Bu, Anti-Patterns ile ortalama şeyler: spektrumun her iki ucunda da bulunurlar ve görünümleri, kodunuzu gözden geçiren kişinin hassasiyetine bağlıdır.


Bu komik, çünkü bunu kendim çizdim ve değerleri dinamik olarak ele almak benim için daha kolay ve daha hızlı ve daha temizdi. Python'da yaptım, oysa son ürünün Java ile kodlanacağına inanıyorum - eğer bu bir fark yaratırsa. Gelen her bir sütunun birden fazla yerde izlenmesi gerektiğinden, değerlerde sabit kodlama yaptığımda aşırı tasarlanmış hissettim.
Tom

@Tom: Bir yapılandırma arama kitaplığını uygulamanın (veya yeniden kullanılmasının) sabit kodlanmış bir değer kullanmaktan daha kolay ve hızlı olduğunu mu söylüyorsunuz? Senin için iyi. Ayrıca, son cümlenizin aşırı mühendislik tanımına nasıl uyduğunu görmüyorum. Açıkça dağınık hissedecek ve açık kodlanmış ve çoğaltılmışsa daha da kötü (soru sorunuzun noktası değildi, muhtemelen yanlış anladım, ama bana değerin yerinde kodlanmadığı anlamına geliyormuş gibi geldi) her seferinde, ancak programın tek bir noktasında).
haylem

Her neyse, sadece geçerli olacağı durumlara dikkat çekiyorum. Ayrıca son cümlemde tartışmalı olacağını da belirtiyorum. Herkesin ve takımların farklı beceri seviyelerine sahip insanları olmasını memnun edemezsiniz.
haylem

1
@Tom, kendini çok kısa satma. Kesinlikle bir şeye bağlısınız. Sabit kodlamanın aksine Bölüm ve İş Unvanı alanlarına bakarak verileri düzenlemek için hızlı bir algoritma yazmak daha kolay ve daha az zaman alır Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']. Yeni bir Departman ya da Unvanın sunulması durumunda sabit kodlanmış dizinin korunması da çok daha zor olacaktır.
Chris G

1
Sabit kod için hala hassas olan daha karmaşık şeylere sahip olabilirsiniz. Birkaç yıl önce yazdığım aklıma gelenlerden biri, bir dizi değerin olası permütasyonlarıydı. Rastgele geçerli bir yön bulmam gerekiyordu, rastgele bir permütasyon seçip sonra ilk geçerli sonucu almak en etkili çözümdü ve O (N ^ 3) döngü verimliliğinde olduğu için önemliydi.
Loren Pechtel

4

Değerleri sabit kodlamanın uygun olduğu zamanlar vardır. Örneğin, algoritmik amaçlar için belirli değerler olması gereken bit maskeleri için 0 veya bir veya çeşitli n ^ 2-1 değerleri gibi bazı sayılar vardır. Bu tür değerleri yapılandırılabilir için izin vermenin bir değeri yoktur ve yalnızca sorun olasılığını açar. Başka bir deyişle, bir değeri değiştirmek yalnızca bir şeyleri kırarsa, muhtemelen kodlanmış olmalıdır.

Verdiğiniz örnekte, sabit kodlamanın nerede yararlı olacağını görmüyorum. Bahsettiğiniz her şey, başlıklar da dahil olmak üzere veritabanında zaten olmalıdır. Sunumu yönlendiren şeyler (sıralama düzeni gibi) bile yoksa eklenebilir.


Teşekkürler. Sıralama düzeni vardı bir endişe vardı. Ancak, bizim durumumuzda önemli değil ve hatta veritabanında başka bir tablo olarak eklenebileceğini düşünmedim.
Tom

1
Tüm bu DB yönetmenin bir seçenek olduğunu unutmayın. Yapılandırma dosyalarını veya diğer çözümleri de kullanabilirsiniz, ancak sabit kodlamanın kötü bir seçim olduğu görülmektedir. DB seçeneği genellikle kullanılır, çünkü seçeneklerin kullanıcılar tarafından yönetilmesine izin vermek için bir arayüz oluşturmak kolaydır. Gibi araçlar da vardır bu özellikle bu amaç için tasarlanmıştır.
JimmyJames

-1

Aksi halde kodlanmış olabilecek değerlerin son kullanıcılar tarafından yapılandırılabilmesini sağlayan sağlam bir çözüm uygulamak, bu değerlerin sağlam bir şekilde doğrulanmasını gerektirir. Boş bir ip mi koydular? Sayı olması gereken yerde sayısal olmayan bir şey mi yerleştirdiler? SQL enjeksiyonu yapıyorlar mı? Vb.

Sert kodlama bu risklerin çoğunu önler.

Bu, sabit kodlamanın her zaman, hatta sıklıkla iyi bir fikir olduğu anlamına gelmez. Bu dikkate alınması gereken faktörlerden sadece biridir.

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.