Veriye dayalı programlama nedir?


93

Bir müşteriye önermek için kodladığımız bir lojistik uygulaması için ayrıntılı bir mühendislik planı yazmak için işte görevlendirildim. Bunun veri odaklı bir uygulama olduğu söylendi. Bir uygulamanın "veri odaklı" olması ne anlama geliyor? Tersi ne? Bunun için gerçekten net bir cevap alamıyorum, ancak web'de arama yaparken birçok insanın kendi örneklerini gönderdiğini görebiliyorum. Herhangi bir yardım çok takdir edilecektir.


2
Hemen hemen tüm gerçek dünya programlamaları veri tabanlıdır.
Martin Spamer

16
Klasik Unix Programlama Sanatı bu konuyla ilgili güzel bir tartışmaya sahiptir: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html . Anahtar alıntı: "veri tabanlı programlama, veri sadece bazı nesnenin bir hal değildir, ama aslında programın kontrolü akışını tanımlayan OO temel kaygısı kapsülleme, veri tabanlı programlamada temel kaygısı olduğu yere. Yazma olabildiğince az sabit kod . "
FMc

2
FMc'nin cevabı benim için en ikna edici açıklamadır ve bir cevap olmalı, ancak detaylandırılmalıdır.
Mads Skjern

Yanıtlar:


96

Veriye dayalı programlama, verinin program mantığını değil, programın akışını kontrol ettiği bir programlama modelidir. Program mantığının bazı genel akış biçimi veya durum değişiklikleri olduğu programa farklı veri setleri sunarak akışı kontrol ettiğiniz bir modeldir.

Örneğin, dört duruma sahip bir programınız varsa: YUKARI - AŞAĞI - DUR - BAŞLAT

Bu programı, durumları temsil eden girdi (veriler) sunarak kontrol edebilirsiniz:

  • set1: DOWN - STOP - START - STOP - UP - STOP
  • set2: YUKARI - AŞAĞI - YUKARI - AŞAĞI

Program kodu aynı kalır, ancak veri kümesi (dinamik bir girdi türünde değildir, ancak bilgisayara statik olarak verilir) akışı kontrol eder.


3
Programlama kısmı "genel akış biçimini veya durum değişikliklerini" yazıyor / tanımlıyor, değil mi? Ama herhangi bir dilde böyle bir "makine" yazabilirim ve bunda olağandışı bir şey yok, bu yüzden cevabınızdan gerçekten hiçbir şey anlamıyorum. Belki de veriye dayalı programlama, dilin kendisinin veya bir kitaplığın bu tür makineleri yazmayı çok kolaylaştırdığı veya teşvik ettiği zamandır. Ya da belki tanım, dil / kitaplığın makineleri bildirimsel bir şekilde, yani prosedürel değil, tanımlayalım olmasıdır.
Mads Skjern

2
On en.wikipedia.org/wiki/Data-driven_programming , bunlar örnek olarak AWK kullanın. AWK'da iki şey sağlanır; verilerle ne yapılacağını tanımlayan bir ifade ve verilerin kendisi. Ne olacağını tanımlayan ifade nedir: 1) programlama veya 2) veri. Veri olarak kabul edilirse, programlama AWK'nın makinesinin kendisidir ve elbette AWK örneğinde statiktir. Ancak diğer bağlamlarda, örneğin makinenin kendisini geleneksel bir yöntemle yazıyorsanız, bu tek başına programlama kısmıdır.
Mads Skjern

Öyleyse ... daha güçlü veri sürücüsü programlama örneklerinin tamamlandığını varsayarsak, bu, önceden oluşturulmuş bazı varsayımlar ve araçlara sahip bir motorda basitçe bir dahil etme ifadesi haline gelmez mi?
ZirconCode

55

Veriye dayalı programlamanın ne olduğuna dair birkaç fikir olsa da, bir veri yapısı ve bir işlev kullanarak bir örnek vermeme izin verin.

Veriye dayalı olmayan örnek:

data_lloyd = {'name': 'Lloyd', 'lives': 'Alcoy }
data_jason = {'name': 'Jason', 'lives': 'London' }
go = function(x) 
    if x.name == 'Lloyd' 
    then 
        print("Alcoy, Spain") 
    else 
        print("London, UK") 
end

Veriye dayalı örnek:

data_lloyd = {'name': 'Lloyd', 'lives': function(){ print("Alcoy, Spain") }
data_jason = {'name': 'Jason', 'lives': function(){ print("London, UK") }
go = function(x)
    x.lives()
end

İlk örnekte, bir sonucu veya diğerini gösterme kararı kod mantığındadır. Son örnekte çıktı, işleve aktarılan veriler tarafından belirlenir ve bu nedenle çıktının veriler tarafından 'sürüldüğünü' söyleriz.


3
Bunun basit bir örnek olduğunu biliyorum, ancak veriye dayalı olmayan örnek, özensiz kodlama örneğine benziyor. Veri odaklı sadece iyi kodlama uygulamaları anlamına mı geliyor? Öyleyse, neden herhangi biri veriye dayalı olmayan bir yaklaşımı benimsemek istesin?
Jin

4
Üzgünüm, ancak ilk örnek işlevsel programlamaya benziyor (burada veri ve davranışın ayrıştırıldığı) ve ikinci örnek nesne yönelimli gibi görünüyor (veri ve davranışın birleştiği yer).
Vakey

47

"Bunun veri odaklı bir uygulama olduğu söylendi" - bunu size kim söylediyse sormanız gerekir.

Burada makul bir cevap okumak istemezsiniz ve sonra projenizden sorumlu kişinin kastettiği şeyin hiç de bu olmadığını anlarsınız. İfade, projeniz için kesinlikle geçerli olacak net bir anlama sahip olamayacak kadar belirsizdir.


8
Richie ne demek istediğini anlıyorum ve bu iyi bir nokta. Bununla birlikte, "veriye dayalı programlama" nın, yazılım geliştirme endüstrisi tarafından somut olarak tanınan bir tür terim olup olmadığını merak ediyordum. Patronuma tekrar danışmadan, buradan sadece görünen değeri ile herhangi bir cevap almayacağım. -Teşekkürler :)
jtbradle

5
Elbette - burada sormakta haklıydın. Ama bence cevabın evrensel olarak kabul edilmiş bir tanım olmaması.
RichieHindle

UX'inizi meta verilerden oluşturduğunuzda buna ne denir? İş akışınız harici bir konfigürasyon tarafından kontrol edildiğinde buna ne denir? Bu Veriye Dayalı Mimari ve Olay Odaklı Mimari mi? Veriye Dayalı Programlama, modellerinizin oluşturulduğu WSDL ve GraphQL'e daha benzer olabilir mi, ancak yine de uygun gördüğünüz halde bunlara karşı kod yazıyorsunuz?
Corey Alix

15

Veriye dayalı geliştirme, programın mantığında kodu değil, veri yapısını düzenleyerek değişiklik yapabilen bir şeydir.

Veriye dayalı programlama hakkında daha fazla bilgiyi http://www.faqs.org/docs/artu/ch09s01.html adresinde bulabilirsiniz.

Prosedürel Programlama

var data = { 
            {do:'add',arg:{1,2}},
            {do:'subtract',arg:{3,2}},
            {do:'multiply',arg:{5,7}},
            };

foreach(var item in data){  
    switch(item.do){
        case 'add':
            console.log(item.arg[0] + item.arg[1]);
        break;
        case 'subtract':
            console.log(item.arg[0] - item.arg[1]);
        break;
        case 'multiply':
            console.log(item.arg[0] * item.arg[1]);
        break;
    }
}

Veriye Dayalı Programlama

var data = { 
            {do:'+',arg:{1,2}},
            {do:'-',arg:{3,2}},
            {do:'*',arg:{5,7}},
            };

foreach(var item in data){      
    console.log(eval (item.arg[0] + item.do + item.arg[1]);
}

8

Veriye dayalı uygulama:

(1) her belirli veri seti için önceden belirlenmiş bir karar vermek için farklı veri setlerini kabul eden ve sonucu ortaya çıkaran bir dizi kural

(2) sonuca göre tetiklenen önceden belirlenmiş birkaç süreç.

Mükemmel örnek ifttt.com'dur

Uygulamanın kurallardan başka hiçbir şeyi yoktur. Onu yararlı kılan, içinden akacak verilerdir.


4

Bu makale, terimin ne anlama geldiğini en açık şekilde açıklıyor:

Tabloya Dayalı ve Veriye Dayalı Programlama nedir? http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

Veri / Tablo-Güdümlü programlama, tekrar eden programlama yapılarını verilere ve bir dönüştürme modeline çarpanlara ayırma tekniğidir. Bu yeni veriler, bu şekilde kullanıldıklarında, sadık kişiler tarafından genellikle meta-veri olarak adlandırılır .


1

İş yerinde bu soruya yardımcı olabilecek kimse yok mu? Daha büyük bir örnek olmadan ne çalıştığınızı hayal etmek çok zor. Ama anladığım kadarıyla, öncelikle bilgi girdikleri bir program olacak. Bu, müşterinin yönetmesi gereken bilgileri alabilecek ve düzenleyebilecek.

İyi şanslar!!


1

Verilen tavsiyenin kötü olmadığını düşünüyorum, ancak Veriye Dayalı Tasarımın, etki alanı nesnelerinizin temeli olarak mevcut veya verilen veri yapılarını kullanmak etrafında döndüğünü hep düşünmüşümdür.

Örneğin, klasik satış görevlisi yönetim programı aşağıdaki tipte tablo yapısına sahip olabilir:

  • Satis elemani
  • Bölge
  • Müşteriler
  • Ürün:% s

Dolayısıyla uygulamanız, "satış yapmak" gibi şeyler yapan düz bir API almak yerine, bu veri yapılarını yönetmeye odaklanır.

Diğer cevapların önerdiği gibi sadece benim fikrim;)

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.