কোডড বনাম অবজেক্টম্যাপার

ছবি https://unsplash.com/photos/_rNVw54xZZg দ্বারা

রিমোট সার্ভিস থেকে একটি সুইফ্ট মডেল অবজেক্টে আনতে জেএসএন ম্যাপ করার উপায় হিসাবে আমি সম্প্রতি সুইফটের নতুন কোডেবল প্রোটোকলটি নিয়ে পরীক্ষা করছি।

কিছুটা ব্যাকগ্রাউন্ডের জন্য, কোডিট স্পষ্টভাবে আইটেমগুলিকে বাহ্যিক উপস্থাপনায় এবং তাদের বাইরে রূপান্তরিত করার অনুমতি দেওয়ার উপায় হিসাবে সুইফট 4-এ যুক্ত করা হয়েছিল। কোডেবল নিজেই ডিকোডেবল এবং এনকোডেবলের একটি টাইপালিয়াস।

এই পোস্টের জন্য আমি ডিকোডেবল অংশটিতে ফোকাস করব, কারণ এটি আমি আগ্রহী এমন একটি দূরবর্তী জেএসওএন উপস্থাপনার রূপান্তর।

তুলনা

আমি আগে অবজেক্টম্যাপারটি ব্যাপকভাবে ব্যবহার করেছি তবে কোডেবল এখন সুইফটে নির্মিত হওয়ায় আমি এই দুটিয়ের তুলনা করতে চাই। আমি যে বৈশিষ্ট্যগুলি তুলনা করতে চাই তা হ'ল:

  • বৈধতা ️
  • কাস্টম ট্রান্সফর্মেশন (কাস্টম প্রকারের মধ্যে ম্যাপিং, উদাঃ একটি জেএসএন স্ট্রিংটিকে একটি রেজেজেমে ম্যাপিং)
  • পরিচালনায় ত্রুটি

আমি যে তথ্যটি বিশ্লেষণ করতে যাচ্ছি তা হ'ল বিবিসি স্পোর্ট অ্যাপ্লিকেশনটির জন্য আমরা দূরবর্তীভাবে আনতে পারি config

এটি মোটামুটি সরল JSON কাঠামো তবে এটিতে বেশ কয়েকটি নিয়মিত প্রকাশ পেয়েছে যে আমি এনএসআরগুলারএক্সপ্রেসে ম্যাপ করতে চাই, একটি স্ট্রিং নয় it

ObjectMapper

অবজেক্টম্যাপার সহ এই জেএসওএন মডেলটি মানচিত্রের জন্য প্রয়োজনীয় স্ট্রাক্টগুলি নিম্নরূপ।

স্টাটসগুলি সমস্ত ইমটুটেবল ম্যাপেবল প্রোটোকলের সাথে সামঞ্জস্য করে, যার অর্থ তাদের জন্য এমন একটি কনস্ট্রাক্টর দরকার যা মানচিত্র অবজেক্ট নেয় এবং ম্যাপিং ব্যর্থ হলে একটি ত্রুটি নিক্ষেপ করে।

ভ্যালিডেশন

বৈধতা সম্পাদন করতে আপনি বিকল্পগুলি ব্যবহার করতে পারেন। এই উদাহরণে আমরা সিদ্ধান্ত নিয়েছি যে এই ইমেল ঠিকানাগুলি ছাড়াই অ্যাপ্লিকেশনটি কাজ করতে পারে তাই ইমেলগুলি alচ্ছিক। মানচিত্র.মূল্যগুলি ("ইমেল") যদি ত্রুটি ছুঁড়ে থাকে তবে কীগুলি উপস্থিত না থাকলে বা এটি সঠিক ধরণের কাস্ট করা যায় না। আমরা চেষ্টা ব্যবহার করে? সেই ত্রুটিটি ক্যাপচার করতে এবং কোনও ত্রুটি থাকলে কেবল এটিকে শূন্য মান হিসাবে রূপান্তর করতে।

যদি আমরা সিদ্ধান্ত নিই যে কোনও নির্দিষ্ট সম্পত্তি আবশ্যক তবে আমরা এটিকে alচ্ছিক হিসাবে চিহ্নিত করব না এবং ত্রুটিটি প্রচারের অনুমতি দেব।

সামগ্রিকভাবে বৈধতা ইমটুটেবলম্যাপেবল ব্যবহার করে খুব সোজা এগিয়ে

আপনি লক্ষ্য করেছেন যে এই কল মানচিত্রে একটি অতিরিক্ত যুক্তি রয়েছে passed

কাস্টম রূপান্তর

অবজেক্টম্যাপার বাক্সের বাইরে কাস্টম রূপান্তরকে সমর্থন করে এবং এটি খুব সোজা এগিয়ে।

এখানে আমরা কেবল ট্রান্সফর্ম টাইপ প্রোটোকল এবং সম্পর্কিত ট্রান্সফর্মফ্র্যামজেএসএন পদ্ধতি প্রয়োগ করছি। এটি স্ট্রিংয়ে কাস্ট করে এবং তারপরে নিরাপদে চেষ্টা করার চেষ্টা করে? স্ট্রিংটিকে একটি এনএসআরগুলারএক্সপ্রেসে রূপান্তর করতে।

এই ট্রান্সফর্মারটি আবার যে কোনও জায়গায় use পুনরায় ব্যবহারের জন্য উপলব্ধ

শিল্প খাত

ত্রুটিটি পরিচালনা করার পরীক্ষা করার জন্য আমি অনুপস্থিত আউটপুট কী সহ একটি JSON ফাইল ব্যবহার করব।

অবজেক্টম্যাপারের মাধ্যমে এটি চালানোর সময় আমরা একটি দুর্দান্ত সহায়ক ত্রুটি বার্তা পাই।

ম্যাপিংয়ের সময় একটি ত্রুটি পেয়েছে।
- কারণ: 'স্ট্রিং' এ কাস্ট করা যাবে না
- অবস্থান: config.init (মানচিত্র :): 30
- কী: আউটপুট
- কারেন্টভ্যালু: শূন্য

এটি আমাদের সমস্যাটি কোথায় তাড়াতাড়ি খুঁজে বের করার জন্য আমাদের প্রয়োজনীয় সমস্ত কিছু বলে দেয়। আমি আলাফায়ারঅবজেক্টম্যাপার ইন্টিগ্রেশন ব্যবহার করার সময় খুঁজে পেয়েছি ত্রুটিগুলি দমন করা যায় যা আদর্শের চেয়ে কম।

Codable

বাক্সের বাইরে সমতুল্য কোডিং বাস্তবায়ন নিম্নরূপ

কোডিংকি প্রোটোকলটি ব্যবহার করে কীগুলি এনাম হিসাবে সংজ্ঞায়িত করা হয়েছে তবে এটি অবজেক্টম্যাপারের সাথে খুব মিল।

কোডেবল ব্যবহার করে সত্যিই একটি দুর্দান্ত বৈশিষ্ট্য রয়েছে যাতে প্রবন্ধের সাথে সম্পত্তির সমতুল্য হ'ল যদি প্রারম্ভিকরটি আপনার জন্য তৈরি করা যায় এবং আমরা যে ধরণের ম্যাপিং করছি সেগুলি নিজেই ডিকোডেবল এর একটি উদাহরণ উপরে কোডেডকনফিগ। যেহেতু এর সমস্ত সম্পত্তি হ'ল সেগুলি নিজেই ডিকোডেবল, আমাদের কোনও আরম্ভকারী লেখার দরকার নেই!

ভ্যালিডেশন

এটি অবজেক্টম্যাপারের মতোই কাজ করে

কোনও ত্রুটি ম্যাপিংয়ের ক্ষেত্রে যদি প্রাথমিক সাইটটি একটি ত্রুটি ছুড়ে দেয়, যা কল সাইটে পরিচালনা করা যায়। আবার, কীভাবে সেরা ত্রুটিগুলি পরিচালনা করা যায় তা স্থির করতে এখানে বিকল্পগুলির ভাল ব্যবহার করুন।

কাস্টম রূপান্তর

আপনি উপরের কোডটিতে লক্ষ্য করবেন, আমরা যখন আমাদের এনএসআরগুলারএক্সপ্রেসনের ধরণের মানচিত্র তৈরি করার চেষ্টা করছি তখন এটি কিছুটা কম পরিষ্কার হয়ে যায়। আমাদের হঠাৎ করে আরম্ভকারী আরম্ভটি (ডিকোডার থেকে: ডিকোডার থেকে) প্রয়োগ করতে হবে এবং ডিকোডার থেকে নিজেকে কেইডিকোডিংস কনটেইনার নিতে হবে

আপনি আরও বিশদ চাইলে ইতিমধ্যে এটি সম্পর্কে একটি দুর্দান্ত রচনাআপ রয়েছে, যা আমি এখানে যেতে চাই না।

কোডটি এখন লিখতে বেশ ভার্জোজ হয়ে যায় এবং আমরা রূপান্তর কোডটি পুনরাবৃত্তি করছি। এটি এই ক্ষেত্রে কেবল একটি অতিরিক্ত লাইন তবে আমি প্রায়শই এমন সময় আসি যেখানে আমি আরও জটিল রূপান্তরগুলি লিখতে চাই যা আমি অবজেক্টম্যাপারের সাথে আমার মতো আলাদা করতে চাই is

সুতরাং আমি কাস্টম রূপান্তরগুলির জন্য সমর্থন যোগ করার জন্য একটি ছোট লাইব্রেরি তৈরি করেছি এটি কোকোপডগুলির মাধ্যমে পাওয়া যায় বা আপনি উত্সটি অনুলিপি করতে পারেন কারণ এটি কেবল দু'টি ফাইল।

আপনি যে ধরণের মালিক নন সেটিতে আপনি একটি এক্সটেনশন যুক্ত করার কথা ভাবতে পারেন তবে সুইফট বিবর্তনে কেন এটি সম্ভব নয় তার একটি ভাল ব্যাখ্যা রয়েছে।

কোডেবল এক্সটেনশান লাইব্রেরি ব্যবহার করে আমরা এখন অবজেক্টম্যাপারের সাথে খুব সাদৃশ্য দেখতে আমাদের কোডটি সহজতর করতে পারি

এবং রেজেক্সকোডেবল ট্রান্সফর্মারও আমাদের আগের অবজেক্টম্যাপারের সাথে খুব মিল ছিল

লাইব্রেরিটি কন্টেইনার.ডেকোড () তে ইন্টারফেসটিও সহজ করে তোলে তাই টাইপটি আর অনুমান করা হওয়ার কারণে আর পাস করার প্রয়োজন হয় না।

শিল্প খাত

আমি আগের মতো ত্রুটি হ্যান্ডিংয়ের তুলনা করতে একই JSON ফাইলটি ব্যবহার করছি। ত্রুটিটি দেখে মনে হচ্ছে

। KeyNotFound (config_spike.CodableRewriter (_4D474241C6D85B5C48988D77CA644850) .output মধ্যে CodingKeys, Swift.DecodingError.Context (codingPath: [config_spike.CodableConfig (_4D474241C6D85B5C48988D77CA644850 মধ্যে CodingKeys) .rewriter।], DebugDescription: আউটপুট "কী আউটপুট (\ সঙ্গে যুক্ত কোনো মান নেই" \ ")।", অন্তর্নিহিত ত্রুটি: শূন্য))

ত্রুটিটি দেখতে ততটা সুন্দর দেখাচ্ছে না তবে ইস্যুটি ডিবাগ করার জন্য এটি সবই পেয়েছে।

উপসংহার

দুটি পদ্ধতির মধ্যে পার্থক্যের চেয়ে অনেক বেশি মিল রয়েছে। যদি রূপান্তরগুলি গুরুত্বপূর্ণ হয় তবে অবজেক্টম্যাপারটি বক্সের বাইরে কাজ করে। যাইহোক, স্যুইচিংয়ের অন্যতম প্রধান অনুপ্রেরণাকারী অ্যাপল অন্য লাইব্রেরি না নিয়েই যে মানকটিকে তৈরি করেছেন তার দিকে চলে যাচ্ছে।

যদি রূপান্তরগুলি গুরুত্বপূর্ণ হয়, বেশ কয়েকটি প্রোটোকল যুক্ত করে, আপনি কোডিংয়ের সাথে একই আচরণ পেতে পারেন

আমাদের সমস্ত নতুন বৈশিষ্ট্য এগিয়ে যাওয়ার জন্য আমরা এখনই কোডিংয়ে চলে যাওয়ার সিদ্ধান্ত নিয়েছি। আমি নিশ্চিত যে এই তালিকাটি বাদ দিয়েছি এমন কিছু বৈশিষ্ট্য রয়েছে তবে আমি আমাদের জন্য সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলি বেছে নিয়েছি ones