मैं एक ऐसे समाधान को बनाने की कोशिश कर रहा हूं जिसमें निम्न-स्तरीय लाइब्रेरी है जो यह जान लेगी कि कुछ आदेशों को कॉल करते समय डेटा को सहेजने और लोड करने की आवश्यकता है, लेकिन बचत और लोड फ़ंक्शंस के कार्यान्वयन को प्लेटफ़ॉर्म- विशिष्ट परियोजना जो निचले स्तर की लाइब्रेरी का संदर्भ देती है।कार्यात्मक प्रोग्रामिंग और निर्भरता उलटा: सार भंडारण कैसे करें?
type User = { UserID: UserID
Situations: SituationID list }
type Situation = { SituationID: SituationID }
और मुझे क्या करना चाहते हैं परिभाषित करने और इस तरह के रूप में कार्य करता फोन करने में सक्षम हो गया है:
do saveUser()
let user = loadUser (UserID 57)
वहाँ है इस परिभाषित करने के लिए किसी भी तरह से
मैं जैसे कुछ मॉडल, है स्पष्ट रूप से कार्यात्मक मुहावरे में, अधिमानतः म्यूटेबल राज्य से परहेज करते हुए (जो वैसे भी आवश्यक नहीं होना चाहिए)?
एक तरह से यह कुछ इस तरह लग सकता है ऐसा करने के लिए:
type IStorage = {
saveUser: User->unit;
loadUser: UserID->User }
module Storage =
// initialize save/load functions to "not yet implemented"
let mutable storage = {
saveUser = failwith "nyi";
loadUser = failwith "nyi" }
// ....elsewhere:
do Storage.storage = { a real implementation of IStorage }
do Storage.storage.saveUser()
let user = Storage.storage.loadUser (UserID 57)
और वहाँ इस में बदलाव कर रहे हैं, लेकिन सभी लोगों को मैं के बारे में सोच सकते हैं अप्रारंभीकृत राज्य के कुछ प्रकार शामिल है। (Xamarin में, वहाँ भी DependencyService है, लेकिन वह अपने आप में एक निर्भरता मैं से बचने के लिए चाहते हैं।)
वहाँ किसी भी तरह से कोड एक भंडारण समारोह है, जो अभी तक लागू नहीं किया गया कॉल लिखते हैं, और उसके बाद लागू करने के लिए है यह, परिवर्तनीय राज्य का उपयोग किए बिना?
(नोट: इस सवाल का भंडारण खुद के बारे में नहीं है - कि सिर्फ उदाहरण मैं उपयोग कर रहा हूँ है यह कैसे अनावश्यक परिवर्तनशील राज्य का उपयोग किए बिना कार्यों सुई बारे में है।।)