การเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลคืออะไร?


93

ฉันได้รับมอบหมายให้ทำงานเขียนแผนวิศวกรรมโดยละเอียดสำหรับแอปพลิเคชันโลจิสติกส์ที่เรากำลังเขียนโค้ดเพื่อเสนอให้กับลูกค้า ฉันได้รับแจ้งว่าเป็นแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูล การที่แอปพลิเคชัน "ขับเคลื่อนด้วยข้อมูล" หมายความว่าอย่างไร อะไรคือสิ่งที่ตรงกันข้าม? ดูเหมือนว่าฉันจะไม่ได้รับคำตอบที่ชัดเจนสำหรับเรื่องนี้แม้ว่าในขณะที่ค้นหาเว็บฉันก็เห็นหลายคนโพสต์ตัวอย่างของพวกเขาเอง ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.


2
การเขียนโปรแกรมในโลกแห่งความเป็นจริงเกือบทั้งหมดนั้นขับเคลื่อนด้วยข้อมูล
Martin Spamer

16
คลาสสิกศิลปะของการเขียนโปรแกรมระบบปฏิบัติการยูนิกซ์มีการสนทนาที่ดีของหัวข้อนี้: homepage.cs.uri.edu/~thenry/resources/unix_art/ch09s01.html คำพูดสำคัญ: "ในการเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลข้อมูลไม่ได้เป็นเพียงสถานะของออบเจ็กต์บางอย่าง แต่เป็นตัวกำหนดการควบคุมโฟลว์ของโปรแกรมโดยที่ข้อกังวลหลักใน OO คือการห่อหุ้มข้อกังวลหลักในการเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลคือการเขียน รหัสคงที่น้อยที่สุดเท่าที่จะทำได้ "
FMc

2
คำตอบของ FMc เป็นคำอธิบายที่น่าเชื่อถือที่สุดสำหรับฉันและควรเป็นคำตอบ แต่อธิบายอย่างละเอียด
Mads Skjern

คำตอบ:


96

Data driven progamming เป็นรูปแบบการเขียนโปรแกรมที่ตัวข้อมูลควบคุมการไหลของโปรแกรมไม่ใช่ตรรกะของโปรแกรม เป็นแบบจำลองที่คุณควบคุมโฟลว์โดยเสนอชุดข้อมูลที่แตกต่างกันให้กับโปรแกรมโดยที่ตรรกะของโปรแกรมเป็นรูปแบบทั่วไปของโฟลว์หรือการเปลี่ยนแปลงสถานะ

ตัวอย่างเช่นหากคุณมีโปรแกรมที่มีสี่สถานะ: ขึ้น - ลง - หยุด - เริ่ม

คุณสามารถควบคุมโปรแกรมนี้ได้โดยเสนออินพุต (ข้อมูล) ที่แสดงถึงสถานะ:

  • set1: ลง - หยุด - เริ่ม - หยุด - ขึ้น - หยุด
  • set2: ขึ้น - ลง - ขึ้น - ลง

รหัสโปรแกรมยังคงเหมือนเดิม แต่ชุดข้อมูล (ซึ่งไม่ใช่ประเภทอินพุตแบบไดนามิก แต่กำหนดให้กับคอมพิวเตอร์แบบคงที่) ควบคุมโฟลว์


3
ส่วนการเขียนโปรแกรมคือการเขียน / กำหนด "รูปแบบทั่วไปของการไหลหรือการเปลี่ยนแปลงสถานะ" ฉันพูดถูกไหม แต่ฉันสามารถเขียน "เครื่องจักร" ในภาษาใดก็ได้และไม่มีอะไรผิดปกติเกี่ยวกับเรื่องนี้ดังนั้นฉันจึงไม่ได้รับอะไรจากคำตอบของคุณ บางทีการเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลก็คือเมื่อภาษาเองหรือไลบรารีกระตุ้นหรือทำให้ง่ายต่อการเขียนเครื่องดังกล่าว หรือบางทีคำจำกัดความก็คือภาษา / ไลบรารีให้เรากำหนดเครื่องด้วยวิธีการประกาศเช่นไม่ใช่ขั้นตอน
Mads Skjern

2
ในen.wikipedia.org/wiki/Data-driven_programmingพวกเขาใช้ AWK เป็นตัวอย่าง ใน AWK จะมีสองสิ่งคือนิพจน์ที่กำหนดสิ่งที่ต้องทำกับข้อมูลและตัวข้อมูลเอง นิพจน์ที่กำหนดสิ่งที่จะเกิดขึ้นถือว่าเป็นอะไร: 1) การเขียนโปรแกรมหรือ 2) ข้อมูล หากถือว่าเป็นข้อมูลแสดงว่าการเขียนโปรแกรมเป็นเครื่องของ AWK เองซึ่งแน่นอนในตัวอย่างของ AWK นั้นเป็นแบบคงที่ แต่ในบริบทอื่น ๆ เช่นหากเขียนเครื่องด้วยวิธีการดั้งเดิมบางอย่างนั่นคือส่วนของการเขียนโปรแกรม
Mads Skjern

ดังนั้น ... สมมติว่าตัวอย่างการเขียนโปรแกรมไดรฟ์ข้อมูลที่มีประสิทธิภาพมากขึ้นกำลังดำเนินไปอย่างสมบูรณ์สิ่งนี้ไม่เพียงกลายเป็นคำสั่งรวมในเครื่องยนต์ที่มีสมมติฐานและเครื่องมือที่สร้างไว้ล่วงหน้าหรือไม่?
ZirconCode

55

แม้ว่าจะมีแนวคิดมากกว่าสองสามข้อเกี่ยวกับการเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูล แต่ขออนุญาตยกตัวอย่างโดยใช้โครงสร้างข้อมูลและฟังก์ชัน

ตัวอย่างที่ไม่ขับเคลื่อนด้วยข้อมูล:

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

ตัวอย่างที่ขับเคลื่อนด้วยข้อมูล:

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

ในตัวอย่างแรกการตัดสินใจแสดงผลลัพธ์อย่างใดอย่างหนึ่งอยู่ในตรรกะของรหัส ในตัวอย่างสุดท้ายผลลัพธ์จะถูกกำหนดโดยข้อมูลที่ส่งผ่านไปยังฟังก์ชันและด้วยเหตุนี้เราจึงกล่าวว่าเอาต์พุตถูก 'ขับเคลื่อน' โดยข้อมูล


3
ฉันรู้ว่านี่เป็นตัวอย่างง่ายๆ แต่ตัวอย่างที่ไม่ใช่ข้อมูลเป็นเพียงตัวอย่างของการเข้ารหัสที่ไม่เป็นระเบียบ การขับเคลื่อนด้วยข้อมูลหมายถึงแนวทางปฏิบัติในการเขียนโค้ดที่ดีหรือไม่ ถ้าเป็นเช่นนั้นทำไมทุกคนจึงต้องการใช้แนวทางที่ไม่ขับเคลื่อนด้วยข้อมูล
จิน

4
ฉันขอโทษ แต่ตัวอย่างแรกดูเหมือนการเขียนโปรแกรมเชิงฟังก์ชัน (โดยที่ข้อมูลและพฤติกรรมถูกแยกออก) และตัวอย่างที่สองดูเหมือนเชิงวัตถุ (โดยที่ข้อมูลและพฤติกรรมอยู่คู่กัน)
Vakey

47

"ฉันได้รับแจ้งว่าเป็นแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูล" คุณต้องถามใครก็ได้ที่บอกคุณ

คุณไม่ต้องการอ่านคำตอบที่เป็นไปได้ที่นี่แล้วพบว่าไม่ใช่สิ่งที่ผู้รับผิดชอบโครงการของคุณหมายถึง วลีนี้คลุมเครือเกินไปที่จะมีความหมายที่ชัดเจนซึ่งจะนำไปใช้กับโครงการของคุณได้อย่างแน่นอน


8
ฉันเข้าใจว่าคุณหมายถึงอะไรริชชี่และนั่นเป็นประเด็นที่ดี อย่างไรก็ตามฉันสงสัยว่า "การเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูล" เป็นคำศัพท์ที่อุตสาหกรรมการพัฒนาซอฟต์แวร์รู้จักกันทั่วไปหรือไม่ ฉันจะไม่รับคำตอบใด ๆ จากที่นี่เพียงแค่ตามมูลค่าที่นี่โดยไม่ได้ตรวจสอบกลับกับหัวหน้า - ขอบคุณ :)
jtbradle

5
ได้สิคุณถามถูกที่นี่ แต่ฉันคิดว่าคำตอบคือไม่มีคำจำกัดความที่เป็นที่ยอมรับในระดับสากล
RichieHindle

เรียกว่าอะไรเมื่อคุณสร้าง UX จากข้อมูลเมตา เรียกว่าอะไรเมื่อเวิร์กโฟลว์ของคุณถูกควบคุมโดยการกำหนดค่าภายนอก สถาปัตยกรรมที่ขับเคลื่อนด้วยข้อมูลและสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์หรือไม่ การเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลจะคล้ายกับ WSDL และ GraphQL มากขึ้นหรือไม่ที่โมเดลของคุณถูกสร้างขึ้น แต่คุณยังคงเขียนโค้ดเทียบเคียงตามที่เห็นสมควร
Corey Alix

15

การพัฒนาที่ขับเคลื่อนด้วยข้อมูลเป็นสิ่งที่เราสามารถเปลี่ยนแปลงตรรกะของโปรแกรมได้โดยการแก้ไขไม่ใช่โค้ด แต่เป็นโครงสร้างข้อมูล

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับการเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูลได้ที่http://www.faqs.org/docs/artu/ch09s01.html

การเขียนโปรแกรมขั้นตอน

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;
    }
}

การเขียนโปรแกรมที่ขับเคลื่อนด้วยข้อมูล

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

แอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูลคือ:

(1) ชุดของกฎที่ยอมรับชุดข้อมูลที่แตกต่างกันเพื่อทำการตัดสินใจที่กำหนดไว้ล่วงหน้าสำหรับชุดข้อมูลแต่ละชุดและให้ผลลัพธ์เป็นผลลัพธ์

(2) กระบวนการที่กำหนดไว้ล่วงหน้าสองสามขั้นตอนซึ่งถูกเรียกใช้ตามผลลัพธ์

ตัวอย่างที่สมบูรณ์แบบคือ ifttt.com

แอปพลิเคชันไม่มีอะไรนอกจากกฎเกณฑ์ สิ่งที่ทำให้เกิดประโยชน์คือข้อมูลที่จะไหลผ่าน


4

บทความนี้อธิบายอย่างชัดเจนที่สุดว่าฉันเข้าใจคำว่าหมายถึงอะไร:

Table-Driven และ Data-Driven Programming คืออะไร http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=31

การเขียนโปรแกรมข้อมูล / ตารางเป็นเทคนิคในการแยกโครงสร้างการเขียนโปรแกรมซ้ำ ๆ ลงในข้อมูลและรูปแบบการแปลง ข้อมูลใหม่นี้มักเรียกโดยผู้บริสุทธิ์ว่า ข้อมูลเมตาเมื่อใช้ในรูปแบบนี้


1

ไม่มีใครในที่ทำงานที่สามารถช่วยคุณได้ในคำถามนี้? เป็นเรื่องยากมากที่จะเห็นภาพสิ่งที่คุณกำลังทำงานโดยปราศจากตัวอย่างที่ดีกว่า แต่จากสิ่งที่ฉันรวบรวมมันจะเป็นโปรแกรมที่พวกเขาป้อนข้อมูลเป็นหลัก ที่จะสามารถดึงและแก้ไขข้อมูลที่ลูกค้าต้องการในการจัดการ

โชคดีที่สุด !!


1

ฉันคิดว่าคำแนะนำที่ให้มานั้นไม่เลว แต่ฉันคิดเสมอว่าการออกแบบที่ขับเคลื่อนด้วยข้อมูลจะวนเวียนอยู่กับการใช้โครงสร้างข้อมูลที่มีอยู่หรือกำหนดให้เป็นรากฐานสำหรับออบเจ็กต์โดเมนของคุณ

ตัวอย่างเช่นโปรแกรมจัดการพนักงานขายแบบคลาสสิกอาจมีโครงสร้างตารางประเภทต่อไปนี้:

  • พนักงานขาย
  • ภูมิภาค
  • ลูกค้า
  • ผลิตภัณฑ์

ดังนั้นแอปพลิเคชันของคุณจะมุ่งเน้นไปที่การจัดการโครงสร้างข้อมูลเหล่านี้แทนที่จะใช้ API แบบตรงซึ่งทำสิ่งต่างๆเช่น - "ขาย" เป็นต้น ...

แค่ความคิดเห็นของฉันตามที่คำตอบอื่น ๆ แนะนำ;)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.