काम की बारीकियों से, मुझे एक ही समय में कई (5-10) प्रोजेक्ट्स का संचालन करना पड़ता है, और अक्सर एक महत्वपूर्ण ठहराव, एक महीने या उससे अधिक के बाद प्रोजेक्ट कोडिंग पर लौट आते हैं। इस सुविधा के लिए कोड के संगठन की आवश्यकता होती है जो आपको परियोजना की वास्तुकला को जल्दी से याद करने की अनुमति देगा।
इसके अलावा, समय और संसाधनों को बचाने के लिए, मैं अपने आवेदन के मैकओएस और आईओएस संस्करणों के लिए सामान्य कक्षाओं का उपयोग करता हूं।
उन लोगों के लिए जो मेरे अनुभव की विशेषताओं में रुचि रखते हैं - मैं बिल्ली के लिए पूछता हूं।
इस प्रक्रिया में मैंने जिन कई परियोजनाओं का अध्ययन किया, उनमें मैंने कक्षाओं के आयोजन में अत्यधिक जटिलता देखी। फ़ाइलों के अत्यधिक विखंडन से कोड की वैश्विक संरचना को समझने में भ्रम होता है। कक्षाओं के विभाजन के लिए जुनून कोड के अलग-अलग हिस्सों की कार्यक्षमता की समझ को जटिल करता है।
परिणामस्वरूप, मैं परियोजना संगठन के निम्नलिखित सिद्धांतों पर बस गया:
1. मैंने परियोजना में उपवर्गों को मना कर दिया, केवल आवश्यक लोगों को छोड़कर - UIViewController, UITableViewCell
2. बाहरी सर्वर के साथ सभी इंटरैक्शन को एक अलग वर्ग में रखा गया है (मैं आपको बताऊंगा कि इसे दूसरे भाग में कैसे व्यवस्थित किया जाए, मेरे पास यह मल्टी-प्लेटफॉर्म क्लास है)
3. UIViewControllers के सभी उपवर्गों को सही नामों के साथ नाम दिया गया है (MyViewConfroller1 गलत नाम है, संदेश बटन के साथ जुड़े MessageViewController सही नाम है)
4. TableViewCells के सभी उपवर्ग ViewControllers के बगल में स्थित हैं और सही तरीके से नामित किए गए हैं (MyTableViewCell गलत है, MessageTableViewCell सही है)
5. संसाधनों में, मैं सभी चित्रों के साथ फ़ोल्डर बनाता हूं और इन फ़ोल्डरों को क्लास फाइल (मैसेजइमेज फ़ोल्डर) के बगल में रखता हूं।
ऐसा संगठन वांछित फ़ाइल और एक्सकोड के बाईं ओर से परिणामी कोड को जल्दी से प्राप्त करने में मदद करता है।
MacOS और IOS के लिए एक परियोजना में कोड का संयोजन विकास / सुधार की गति में एक महत्वपूर्ण लाभ देता है। सामान्य कक्षाओं में परिवर्तन (सुधार) दोनों प्रणालियों के लिए तुरंत लागू किया जाता है। दोनों परियोजनाओं के लिए समान चित्रों का उपयोग करना संभव है। हालांकि, ऐसे संगठन की अपनी विशेषताएं हैं:
1. लक्ष्य बनाते समय, तुरंत AppDelegate उपसर्ग प्रदान करें। बिल्कुल सही - IOSAppDelegate MacOSAppDelegate
2. Xcode में विभाजित पैनलों में कोड प्रदर्शित करने के साथ एक बग है, इसलिए दोनों परियोजनाओं में समान उपवर्गों को UIViewController और NSViewController के रूप में नाम देना अवांछनीय है। MessageIOSViewController और MessagesMacOSViewController क्रमशः अच्छे नाम हैं।
सामान्य श्रेणी में एक उत्कृष्ट नाम ServerIteractionClasses उदाहरण के साथ एक अलग निर्देशिका में सामान्य श्रेणी में रखा गया है।
चूंकि सर्वर के साथ सभी इंटरैक्शन का तात्पर्य अक्सर एक सभ्य अपेक्षा से होता है, इसलिए व्यू कंट्रोलर से सर्वर के साथ कोई भी बातचीत निम्नानुसार होती है:
1. कक्षा का एक उदाहरण बनाना
ClientController *clientController = [[ClientController alloc] init]; clientController.sender = self;
यह कहां भेजा जा रहा है
@property (strong) id sender;
आवश्यक कार्य प्रारंभ करें
[clientController startPasswordRecoveryForEmail:email];
जहाँ
-(void) updateUIwithMessage:(NSString *)message andProgressPercent:(NSNumber *)percent; { if (self.sender && [self.sender respondsToSelector:@selector(updateUIWithData:)]) { [sender performSelector:@selector(updateUIWithData:) withObject:[NSArray arrayWithObjects:message,percent,nil]]; } } -(void) startPasswordRecoveryForEmail:(NSString *)email; { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) {
इसके अलावा, इंटरफ़ेस में सभी परिवर्तन केवल संबंधित दृश्य नियंत्रक में कॉलबैक द्वारा किए जाते हैं (इंटरफ़ेस के लिए मुख्य थ्रेड पर जाना न भूलें):
#pragma mark - ClientControllerDelegate -(void)updateUIWithData:(NSArray *)data; { //NSLog(@"ClientControllerDelegate:>>>>>>>%@",data); NSString *message = [data objectAtIndex:0]; NSNumber *progressNumber = nil; if (data.count == 2) progressNumber = [data objectAtIndex:1]; if ([message isEqualToString:@"didSendBodyData"] || [message isEqualToString:@"didSendBodyData"] || [message isEqualToString:@"didReceiveData"]) { dispatch_async(dispatch_get_main_queue(), ^(void) { self.progressDownloading.progress = progressNumber.floatValue; self.progressDownloading.hidden = NO; }); } else { dispatch_async(dispatch_get_main_queue(), ^(void) { self.progressDownloading.hidden = YES; }); } BOOL isDidFailWithError = ([message rangeOfString:@"didFailWithError"].location != NSNotFound); if (isDidFailWithError) { NSArray *allBlocks = [message componentsSeparatedByString:@":"]; NSString *errorMessageReceived = @""; if (allBlocks.count > 1) errorMessageReceived = [allBlocks objectAtIndex:1]; dispatch_async(dispatch_get_main_queue(), ^(void) { [self showErrorMessage:errorMessageReceived]; }); }
तकनीक आपको कॉलबैक से डेटा स्थानांतरित करने की अनुमति देती है, जो एक बृहदान्त्र द्वारा अलग होती है।
यह विकल्प आपको आईओएस के साथ मैकोस में आवश्यक कोड को जल्दी से स्थानांतरित करने की अनुमति देता है (आईओएस और मैकोस संस्करणों में इंटरफ़ेस तत्वों को पहचानने के लिए मत भूलना)।
यदि आप लेख पसंद करते हैं, तो मैं उत्तरी भाग के संगठन के बारे में जारी रखूंगा।