Oddiy ma'lumotlar tuzilmalari uchun alohida sinflarni yaratish Objective-C da overkill

I am creating simple web-service client inobjective-cand found that creating separate class fyokieach kind of web-service's response could be overkill. Perhaps this becauseobjective-chas two files - H&M.

Bu erda web-xizmatidan olingan javoblar:

{"name": "John", status: "OK"}

yoki

{"total": "5500", status: "OK"}

yokimore complex

{"location": {"x": "140", "y": "90", "z": "0"}, 
 "color": "red", status: "OK"}

I want to create separate class fyokieach response, e.g. NameResponse, TotalResponse, LocationInfoResponse and subclass them from Response class.

Men Java-ning ba'zi sinflarni yaratish uchun juda ixcham bo'lishiga aminman, lekinobjective-chaqida ishonch hosil qilmayman.

UPDATE 1 One reason to use classes over NSDictionary is that code is more safe and better defined, e.g.:

Menimcha

response.name

yaxshiroqdir

json valueForKey: "name"

Emasmi?

Marhamat, javobingizda qanday qilib javob berasiz va bu holda har bir javob uchun bir sinf javob beradimi?

2

3 javoblar

Nom qiymati to'plam uchun, lug'at ob'ekti qulay bo'lishi mumkin. ObjC ishingiz Apple platformasida bo'lsa, NSDictionary ni ko'rib chiqing.

Aslida, JSON sintaksik tahlilchilaringiz maxsus sinflarni talab qilishini bilmayman. JSON Kakoa sinflarida juda toza bo'lib, xaritalarni NSDictionary, NSArray uchun massivlar uchun, NSString va NSNumber skalar uchun.

3
qo'shib qo'ydi
Yo'q, menimcha, bu rivojlanayotgan sxema uchun yanada barqaror. Bundan tashqari, yanada oddiyroq ajralish kodi mavjud.
qo'shib qo'ydi muallif Seva Alekseyev, manba
Sizningcha, NSDictionary bilan to'g'ridan-to'g'ri dinamik tarzda barcha kerakli xususiyatlarni tortib, ma'lumotni sinflarga o'ralishdan ko'ra engilroq va engilroq deb hisoblaysizmi?
qo'shib qo'ydi muallif Vladimir, manba

Ma'lumotlar modelingiz aniq belgilangan bo'lishi hech qachon ortiqcha emas. Va rasmiy ma'lumot turlari - bu eng yaxshi xususiyatdir - ular amalga oshirilgan!

Agar veb-xizmat javoblari ilovangiz qatlamlari o'rtasida uzatilsa, sinflardan foydalaning. Agar ulardan foydalanish miqdori etarlicha kichik bo'lsa, NSDictionary qabul qilinishi mumkin.

3
qo'shib qo'ydi
Ma'lumotlar modeli aniq ko'rsatilgan holda deyarli xizmatning keyingi versiyalari bilan mos kelmasligi kafolatlanadi.
qo'shib qo'ydi muallif Seva Alekseyev, manba
To'g'ri. Aynan shuning uchun O'X ni kelajakda protokolga kelmasligi ehtimoldan xoli emas va kelajakda to'satdan ro'y beradi ... Oops! Savol matnida "oddiy" - bu sovg'a.
qo'shib qo'ydi muallif Seva Alekseyev, manba
@SevaAlekseyev, "Oddiy", bu to'g'ri va noto'g'ri. Men aslida 1 yoki 2 xususiyatlarga ega oddiy javoblar bilan boshladim, lekin manzil ma'lumotlari bilan uchinchi javob kabi murakkabroq tarkibiy qismlar bor.
qo'shib qo'ydi muallif Vladimir, manba
@Seva Versiya va muvofiqligi - bu qiyin masala, bu OXning so'rashi kerak bo'lgan sohaning tashqarisidan tashqarida bo'lishi va xizmatni boshlash uchun xizmatni rejalashtirishda hal qilinishi kerak. Qanday tuzilmalar aniq WS mijoziga javob bermasa, na muvofiqlik va na mos kelmaydi. ( qanday dan farqli o'laroq, uncha katta bo'lmagan/noaniq qadriyatlar qanday ishlov berilishi, javob qanday javob berishi va hokazo)
qo'shib qo'ydi muallif millimoose, manba
@Seva Men OP ning xizmatni nazorat ostiga olganligini va faqatgina bitta mijozni iste'mol qilishni talab qilyapman deb taxmin qilmoqdaman, u keng iste'mol qilish uchun mo'ljallangan veb-API-lardan ko'ra kamroq kelajakda himoyalanishni talab qiladigan foydalanish usuli hisoblanadi.
qo'shib qo'ydi muallif millimoose, manba
JSONni saqlash uchun ObjC lug'atlaridan foydalanish bilan bog'liq asosiy muammo - ularni o'rnatish va ulardan ma'lumot olish uchun zarur bo'lgan to'liq sintaksik. ObjC kabi dinamik til nafaqat dinamik DDL-larning yanada oqilona ishlashini xohlaydi.
qo'shib qo'ydi muallif Perception, manba

Objective-C sinflari og'ir emas, subclassing ishlash muammosi emas. Siz abstrakt sinf yaratishingiz va bazaviy maydonlarni u erga qo'yishingiz mumkin. So'ngra joylarni qo'shish uchun kerak bo'lgandek subclass, bu yo'l davomida mantiqiy ma'noga ega.

O'zingizning ehtiyojlaringizga qarab, jsonni NSArray/NSDictionary tiliga tarjima qilish juda yaxshi ishlaydi. Keyin siz yo'llarni yurish va ildiz to'plamingizdan maxsus qadriyatlarni olish uchun valueForKeyPath: dan foydalanishingiz mumkin. Men bu yechimni og'ir kompozitsiyalarni ishlatadigan murakkab kolleksiyalarda oqlangan deb bilaman. Yo'l tugmachalarini yaratish uchun #define yoki const dan foydalaning, shuning uchun ular o'zgartirish oson va tugmalaringizni vaqtni tekshirishni olasiz.

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/instm/NSObject/valueForKeyPath:

3
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb