รูปแบบ UI ในภาษาที่ใช้งานได้


11

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

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

1) ว่าฉันต้องการแนบกิจกรรมบางอย่างกับวัตถุ DOM บางอย่าง นี่ไม่ใช่เรื่องยากที่จะทำในลักษณะที่ใช้งานได้เป็นส่วนใหญ่: เมื่อคุณสร้างโหนดคุณจะแนบแผนที่แฮชกับตัวจัดการเหตุการณ์ต่าง ๆ แต่ให้พิจารณากรณีที่คุณใช้การมอบหมายกิจกรรม จากนั้นเมื่อคุณสร้างโหนดใหม่คุณอาจแนบตัวจัดการเหตุการณ์กับโหนดพาเรนต์ที่อาจมีอยู่แล้ว ดังนั้นคุณจะต้องเปลี่ยนแฮชที่เกี่ยวข้องกับโหนดที่มีอยู่แล้ว

2) สมมติว่าฉันกำลังออกแบบโมดูลเติมข้อความอัตโนมัติสำหรับฟิลด์อินพุต ทุกครั้งที่ผู้ใช้กดปุ่มฉันสามารถโทรหาเซิร์ฟเวอร์เพื่อรับคำแนะนำ มันง่ายมาก แต่ตอนนี้สมมติว่าฉันต้องการปรับให้เหมาะสมเล็กน้อย ถ้าฉันรู้ว่าผลที่ตรงกันทั้งหมดfooมีจุดในการถามอีกครั้งเพื่อให้ได้ผลลัพธ์ที่ตรงกันทั้งหมดไม่มีfoobar; ฉันสามารถกรองอดีต ดังนั้นฉันต้องสร้างแคชบางประเภท แคชนี้จะได้รับการอัปเดตทุกครั้งที่ผู้ใช้แทรกคำใหม่ซึ่งไม่ใช่คำที่ป้อนไว้ก่อนหน้านี้ อีกครั้ง: ฉันจะสร้างแบบจำลองแคชได้อย่างไร วิธีที่สมเหตุสมผลที่สุดดูเหมือนจะเป็นคำการแมปแฮชกับผลลัพธ์ แต่ควรจะไม่แน่นอน

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


4
ค้นหา "ฟังก์ชั่นการเขียนโปรแกรมปฏิกิริยา"
dan_waterworth

นี่ไม่ใช่สิ่งเดียวกัน แต่ด้วยเท็มเพลต XSLT (ไม่มีผลข้างเคียง) ที่ตรงกับเหตุการณ์ DOM ที่เริ่มต้นโดยผู้ใช้เราพบปัญหาคล้ายกันใน Saxon-CE วิธีที่ฉันชอบที่จะเห็นมันคือผู้ใช้กำลังกระตุ้นให้เกิดการเปลี่ยนแปลงในสถานะไม่ใช่ XSLT ดังนั้นมันจึงเป็นแบบโอเค กุญแจสำคัญคือเพื่อให้แน่ใจว่ารหัสที่จัดการการโต้ตอบกับผู้ใช้และการเปลี่ยนแปลงในสถานะที่ตามมาจะแยกจากส่วนที่เหลือ
pgfearo

@pgfearo คุณมีคำแนะนำเกี่ยวกับวิธีการจัดระเบียบรหัสเพื่อให้การโต้ตอบกับผู้ใช้ถูกแยกออกจากส่วนที่เหลือเพียงพอหรือไม่?
Andrea

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

3
@Old Pro: นี่ไม่ถูกต้องทั้งหมด ในขณะที่การเขียนโปรแกรมการทำงานคุณกำหนดการคำนวณโดยใช้ฟังก์ชั่นการใช้งานแทนผลข้างเคียงในที่สุดคุณต้องบันทึกผลลัพธ์ของการคำนวณที่ไหนสักแห่ง จุดสนใจของ FP คือการ จำกัด การใช้ของรัฐให้น้อยที่สุดในขณะที่ในการเขียนโปรแกรมจำเป็นต้องเปลี่ยนสถานะเพิ่มขึ้น (โดยผลข้างเคียง) เป็นเครื่องมือพื้นฐานสำหรับการกำหนดการคำนวณ
Giorgio

คำตอบ:


3

ตามที่ระบุไว้ในการแสดงความคิดเห็นที่คุณควรมองขึ้น "การเขียนโปรแกรมปฏิกิริยาฟังก์ชั่น" และคุณก็ควรอ่านบางส่วนของการโพสต์ที่http://prog21.dadgum.com/archives.html โดยเฉพาะอย่างยิ่งคุณควรอ่าน " อย่าหลงรักเทคโนโลยีของคุณ ", " เขียนโค้ดเหมือนที่คุณเพิ่งเรียนรู้วิธีการโปรแกรม ", " ฟังก์ชั่นการเขียนโปรแกรมใช้งานไม่ได้ (และสิ่งที่ต้องทำเกี่ยวกับมัน) " และอาจ อีกสองสามคน

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

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