पहिल्या दिवसापासून 'सीम' (Seam) तयार करा
मोठ्या प्रमाणात डेटा हाताळण्यासाठी प्लॅटफॉर्म तयार करताना तुम्हाला एक निवड करावी लागते.
दीर्घकालीन साठवणुकीसाठी तुम्हाला वेगवान डेटाबेसची गरज असते. परंतु पहिल्या दिवसापासूनच एक जटिल (complex) सिस्टम सेट करणे कठीण असते. तुम्हाला तुमच्या डेटाचे स्वरूप (patterns) अजून माहितही नसू शकते. अशा वेळी तुम्ही आधीपासून वापरत असलेला एक मानक रिलेशनल डेटाबेस (relational database) निवडणे हा सुरक्षित पर्याय ठरतो.
चूक अशी होते की, तुम्ही तुमचा कोड थेट त्या पहिल्या डेटाबेसशी जोडून घेता. जर तुमच्या ॲपचा प्रत्येक भाग थेट डेटाबेसला कॉल करत असेल, तर तुम्ही स्वतःसाठी एक सापळा तयार करता. नंतर अधिक चांगल्या डेटाबेसवर स्विच करण्यासाठी तुम्हाला मोठ्या प्रमाणावर 'रिफॅक्टरिंग' (refactor) करावे लागेल.
योग्य मार्ग म्हणजे एक 'सीम' (seam) तयार करणे.
'सीम' म्हणजे एक करार (contract) आहे. सिस्टम काय करते हे ते सांगते, पण ते कसे करते हे सांगत नाही.
- कार्यासाठी एक इंटरफेस (interface) तयार करा.
- तुमच्या सध्याच्या डेटाबेसचा वापर करून एक बेसिक ड्रायव्हर (driver) लिहा.
- तो ड्रायव्हर इंटरफेसशी जोडा.
तुमच्या ॲपचा इतर प्रत्येक भाग फक्त इंटरफेसशी संवाद साधतो. बॅकग्राउंडमध्ये कोणता डेटाबेस सुरू आहे, हे कोणालाही माहित नसते.
जेव्हा तुमचा डेटा वाढतो आणि तुम्हाला अधिक वेगवान सिस्टमची गरज भासते, तेव्हा काम सोपे असते. तुम्ही फक्त एक नवीन ड्रायव्हर लिहिता, कोडची एक ओळ बदलता आणि ते रिलीज करता. यामुळे कोणतेही डॅशबोर्ड (dashboards) बिघडत नाहीत किंवा कोणतेही पाइपलाइन (pipelines) थांबत नाहीत.
काही लोक याला 'प्रिमेच्युअर ॲब्स्ट्रॅक्शन' (premature abstraction) म्हणतात. ते म्हणतात की तुम्हाला याची अजून गरज नाही.
मी याला असहमत आहे. इंटरफेसमुळे फक्त एक अतिरिक्त फाईल तयार होते. तो टाळल्यास फक्त भविष्यातील खर्च पुढे ढकलला जातो. जेव्हा तुम्हाला शेवटी बदल करण्याची गरज पडेल, तेव्हा दबावाखाली तुम्हाला शेकडो फाईल्स दुरुस्त कराव्या लागतील. इंटरफेस म्हणजे एक स्वस्त विमा (insurance) आहे.
तुमच्या 'सीम्स' अधिक मजबूत करण्यासाठी या तीन सवयींचा वापर करा:
ड्युअल आयडेंटिफायर्स (dual identifiers) वापरा. अंतर्गत डेटाबेस जॉइन्ससाठी (joins) वेगवान इंटीजर्स (integers) वापरा. तुमच्या सिस्टमबाहेर जाणाऱ्या कोणत्याही गोष्टीसाठी UUIDs वापरा. यामुळे तुमचा डेटा सुरक्षित राहतो आणि जॉइन्स वेगवान होतात.
सामायिक शब्दसंग्रहासाठी 'एनुम्स' (Enums) वापरा. स्टेटस किंवा सिव्हिरिटीसाठी (severities) यादृच्छिक स्ट्रिंग्स (random strings) वापरू नका. एकच Enum वापरा जेणेकरून तुमच्या ॲपचा प्रत्येक भाग एकच भाषा बोलेल.
डेटासाठी 'व्हर्जन केलेले एन्व्हलप्स' (versioned envelopes) वापरा. जर तुमची सिस्टम अनेक स्रोतांकडून डेटा प्राप्त करत असेल, तर एक कडक स्कीमा (schema) वापरा. फक्त नवीन फील्ड्स जोडा. नवीन व्हर्जनशिवाय ते कधीही काढून टाकू नका किंवा त्यांचे नाव बदलू नका. यामुळे तुम्ही सिस्टममध्ये सुधारणा करत असताना जुने क्लायंट्स (clients) व्यवस्थित काम करत राहतील.
सीमा (boundary) शोधा. तिला एका कराराने (contract) नाव द्या. साध्या अंमलबजावणीने (implementation) ती पूर्ण करा.
करार हे तुमचे वचन आहे. ड्रायव्हर म्हणजे आज तुम्ही ते वचन कसे पाळता, हे आहे.
स्रोत: https://dev.to/nasrulhazim/build-the-seam-on-day-one-the-second-driver-on-day-ninety-26b
