ใช่ FP สามารถใช้ในแอปพลิเคชันองค์กร Clojure เป็นหนึ่งในตัวอย่างของภาษา FP ที่ประสบความสำเร็จในองค์กร: http://cognitect.com/clojure#successstories
การเป็นตัวแทนของรัฐอาจเป็นสิ่งที่ท้าทายใน FP และการเปลี่ยนกระบวนทัศน์ให้เหมาะสมกับ FP อาจเป็นความคิดที่บิดเบือน ภาษา FP บางภาษาไม่อนุญาตให้มีผลกระทบข้างเคียงอย่างสมบูรณ์ Clojure อนุญาตให้ทั้ง แต่กีดกันหรือแยกกระบวนทัศน์เหล่านั้น
ในระยะสั้นการเป็นตัวแทนรัฐอาจคล้ายกับ OO มาก มันเป็นการปรับเปลี่ยนสถานะที่แตกต่างกันมาก ตัวอย่างเช่นในสถานะ FP อาจมีการแสดงรายการและแผนที่ รายชื่อพนักงานอาจมีลักษณะดังนี้:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
มีสองวิธีที่ฉันรู้ในการจัดการการปรับเปลี่ยนสถานะใน FP หนึ่งคือสิ่งที่ต้องการเขียนโปรแกรมปฏิกิริยาการทำงาน ในกระบวนทัศน์นี้สถานะทั้งหมดจะถูกจัดการในระดับสูงสุดเท่านั้น ... เช่นมุมมอง HTML ของแอปพลิเคชันของคุณมีสถานะในมุมมอง (เช่นชื่อบุคคลที่อยู่ ฯลฯ ) ตอนนี้เมื่อคุณคลิก "update name" ฟังก์ชั่นที่เรียกว่าจัดการทุกอย่างเกี่ยวกับการปรับปรุงชื่อยกเว้นการเปลี่ยนชื่อจริง นี่อาจฟังดูแปลก ... แต่อดทนกับฉัน ชื่อที่ถูกเปลี่ยนจะถูกส่งคืนโดยฟังก์ชันและมุมมอง (หรือที่เก็บข้อมูลถาวรเป็นต้น) จะแสดงชื่อใหม่ หรือมิฉะนั้นโครงสร้างใหม่ทั้งหมดที่มีชื่อที่อัปเดตจะถูกส่งคืน ดังนั้นฟังก์ชั่นทำอะไร มันตรวจสอบชื่อและส่งกลับชื่อใหม่ถ้ามันถูกต้องข้อผิดพลาดหากไม่ได้ และอาจเป็นมุมมองใหม่หรือลิงก์การนำทางเพื่อติดตาม สำหรับบางสิ่งที่ซับซ้อนกว่าการเปลี่ยนชื่ออาจทำได้มากกว่านี้มาก
ดังนั้นสำหรับ FRP วัตถุที่ส่งคืนโดยฟังก์ชันคือสถานะใหม่และสามารถกำหนดให้กับมุมมองโดยตรงหรืออะไรก็ตามที่อยู่ในระดับสูง ในบางกรณี FRP นำสถานะทั้งหมดส่งผ่านไปยังฟังก์ชันและรับสถานะทั้งหมดกลับคืน
ด้วยกระบวนทัศน์นี้คอนเทนเนอร์หรือเฟรมเวิร์กจำเป็นต้องจัดการกับการอัพเดตของจอแสดงผลฐานข้อมูลหรืออะไรก็ตามที่ต้องการการอัพเดตจากสถานะใหม่ ดังนั้นคุณสามารถจินตนาการถึงกรอบที่ดึงแอปพลิเคชันบนหน้าจอ เมื่อผู้ใช้คลิกที่ฟังก์ชันบางอย่างจะถูกเรียกใช้และสถานะใหม่จะถูกส่งกลับ เฟรมเวิร์กจะอัพเดตหน้าจอโดยการวาดใหม่ทุกอย่างหรือวาดใหม่อย่างชาญฉลาดในส่วนของจอแสดงผล ดูhttp://blog.getprismatic.com/om-sweet-om-high-functional-frontend-engineering-with-clojurescript-and-react/
Clojure ใช้กระบวนทัศน์ที่สองที่ฉันได้เจอและนั่นคือการแยกการเปลี่ยนแปลงสถานะ แต่ไม่จำเป็นต้อง จำกัด พวกเขาในระดับสูงสุด ด้วย Clojure สถานะที่ไม่แน่นอนทั้งหมดจะต้อง "หยุด" (ยกเว้นว่าคุณกำลังใช้วัตถุ Java สำหรับสถานะ) โดยอะตอมเอเจนต์หรือการอ้างอิง วิธีการทำงานนี้คือวัตถุที่ถือหรือชี้ไปที่หรืออ้างอิง (แต่คุณต้องการเรียกมัน) โดย atom / agent / ref นั้นไม่เปลี่ยนรูป แต่ atom / agent / ref สามารถเปลี่ยนให้ชี้ไปที่วัตถุใหม่ ในกรณีนี้คุณใช้วิธีพิเศษใน atom / agent / ref ที่พูดว่า "update object ที่นี่โดยทำเช่นนั้นและทำการมอบหมาย atom / agent / ref ให้กับวัตถุใหม่"
ทำไมสิ่งนี้จึงเป็นประโยชน์คุณอาจถาม? เพราะวัตถุที่ไม่เปลี่ยนรูปอ้างอิงโดยการก่อสร้าง Clojure เหล่านี้อาจถูกส่งผ่านไปยังฟังก์ชั่นที่ทำอะไรบางอย่างและในขณะที่ฟังก์ชั่นนั้นกำลังเรียกใช้การอ้างอิงไปยังวัตถุที่มีการรับประกันว่าจะไม่เปลี่ยนแปลง นั่นคืออะตอม / เอเจนต์ / ref จะไม่ถูกส่งผ่านไปยังฟังก์ชัน แต่วัตถุที่ไม่เปลี่ยนรูปซึ่งชี้โดยพวกมันจะถูกส่งผ่าน อะตอมตัวแทนและผู้อ้างอิงมีคุณสมบัติพิเศษที่จัดการการปรับปรุงและการทำงานพร้อมกันในรูปแบบที่ปลอดภัยและเป็นส่วนหนึ่งของภาษา ดูhttp://clojure.org/state
ฉันหวังว่านี่จะช่วยได้. ฉันขอแนะนำให้อ่านเพิ่มเติมเกี่ยวกับรัฐ Clojure และ FRP เพื่อรับความเข้าใจที่ดีขึ้นสำหรับวิธีการที่พนักงานและบุคคลสามารถแสดงใน FP แม้ว่าการแสดงจริงจะคล้ายกับการเขียนโปรแกรมเชิงวัตถุ ... มันเป็นความไม่แน่นอนที่แตกต่างกันจริงๆ