সুইফটে রিপোজিটরি ডিজাইনের প্যাটার্ন

আপনার মডেলগুলি জিজ্ঞাসা করার একটি পরিষ্কার উপায়

এটি কোন সমস্যার সমাধান করে?

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

দৃশ্যের স্কেচিং।

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

এটি কিছুটা মজাদার মনে হতে পারে তবে এটি ম্যাকাকে নেটওয়ার্কিং অ্যাবস্ট্রাকশন স্তর হিসাবে ব্যবহার করে এটি কেবলমাত্র আরএক্সসুইফ্ট, তবে কী ঘটছে তা বোঝার জন্য এটি আসলে কোনও বিষয় নয়। আপনি কীভাবে আপনার ডেটা পুনরুদ্ধার করবেন তা সম্পূর্ণ আপনার উপর নির্ভর করে।

কোড এই টুকরা না

  1. সার্ভারের কাছে একটি অনুরোধ
  2. নিবন্ধের অবজেক্টগুলির একটি অ্যারেতে জেএসএনকে ফেরত মানচিত্রগুলি
  3. সমস্ত কাজ শেষ হয়ে গেলে ক্লোজারটি ডেকে আনা হয়।

আমাদের কেন স্টোরের দরকার?

ঠিক এই মুহূর্তে আমরা না। আপনি যদি কেবলমাত্র আপনার পুরো কোড বেসে একবার এপিআই কল করেন, একটি সংগ্রহস্থল যুক্ত করা ওভারকিল হতে পারে (বা কেউ কেউ ওভার ইঞ্জিনিয়ারিং বলতে পারে)।

ঠিক আছে ... তবে কখন কোনও সংগ্রহস্থল অবজেক্ট ব্যবহার করা সুবিধাজনক?
আসুন বলি যে আপনার কোডবেস বাড়তে শুরু করে এবং বারবার নিবন্ধগুলি আনার জন্য আপনার কোডটি লিখতে হবে। আপনি বলতে পারেন যে "কোডটি অনুলিপি করুন এবং যেখানেই আপনার সমস্ত নিবন্ধ আনতে হবে সেখানে এটি আটকান।"

কোনও ক্ষতি হয় নি, কেউ মারা যায়নি। রাইট?

এই মুহুর্তে আপনার মস্তিষ্কে একটি বড় লাল অ্যালার্ম ঝলকানো শুরু করা উচিত।

হ্যালো ভাণ্ডার

একটি সংগ্রহস্থল হ'ল একটি অবজেক্ট যা আপনার মডেলগুলিকে এক জায়গায় জিজ্ঞাসা করার জন্য সমস্ত কোডকে আবদ্ধ করে, তাই আপনি চাইলে যদি আপনার একক পয়েন্টের প্রবেশ থাকে যেমন উদাঃ want সমস্ত নিবন্ধ পেতে।

আসুন একটি ভাণ্ডার তৈরি করুন যা নিবন্ধগুলি পেতে একটি সর্বজনীন এপিআই সরবরাহ করে।

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

সমস্ত নিবন্ধ মিথস্ক্রিয়া পরিচালনা করুন

আমরা আমাদের মডেল অবজেক্টের সাথে ইন্টারঅ্যাক্ট করতে আরও পদ্ধতি যুক্ত করতে সংগ্রহস্থলটি ব্যবহার করতে পারি। আপনার মডেলটিতে আপনি বেশিরভাগ সময় সিআরইউডি (তৈরি, পড়ুন, আপডেট করুন, মুছুন) পরিচালনা করতে চান want ঠিক আছে, কেবল সংগ্রহস্থলগুলিতে এই ক্রিয়াকলাপগুলির জন্য যুক্তি যুক্ত করুন।

বার বার একই কোডটির পুনরাবৃত্তি না করে আপনার কোড জুড়ে এটি একটি দুর্দান্ত API তৈরি করে।

অনুশীলনে, একটি সংগ্রহস্থলের ব্যবহার দেখতে এইরকম দেখাবে।

বেশ সুন্দর এবং পাঠযোগ্য, তাই না? কিন্তু এটা আরও ভাল, অপেক্ষা.

পাওয়ার আপ: প্রোটোকল

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

আচ্ছা আপনি যদি এমন কোনও প্রোটোকল তৈরি করেন যা পদ্ধতির নাম তালিকাভুক্ত করে, আপনি অনলাইন এপিআই এবং ডেটা অফলাইনে পাওয়ার জন্য একটি বাস্তবায়ন তৈরি করতে পারেন।

এটি এর মতো দেখতে পারে।

একটি প্রোটোকল কেবল বলেছে 'আপনি যদি আমার সাথে সম্মতি দেন তবে আপনার এই পদ্ধতিগুলির স্বাক্ষর থাকা দরকার, তবে আমি প্রকৃত বাস্তবায়নের বিষয়ে যত্ন করি না!'

সুতরাং এটি দুর্দান্ত, আপনি একটি ওয়েবআর্টিকাল রিপোসিটোরি এবং একটি স্থানীয়আর্টিকাল রিপোসিটোরি তৈরি করতে পারেন। প্রোটোকলে তালিকাভুক্ত সমস্ত পদ্ধতিতে তাদের উভয়েরই উপস্থিতি রয়েছে তবে আপনি 2 সম্পূর্ণ ভিন্ন বাস্তবায়ন লিখতে পারেন।

পাওয়ার আপ: ইউনিট টেস্টিং

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

যদি আপনি নির্ভরতা ইনজেকশন সহ এটি একসাথে ব্যবহার করেন তবে এটি একটি নির্দিষ্ট অবজেক্টের পরীক্ষা করা সত্যিই সহজ করে তোলে।

একটি উদাহরণ

ধরা যাক আপনার কাছে একটি ভিউ মডেল রয়েছে এবং ভিউ মডেলটি কোনও সংগ্রহস্থলের মাধ্যমে তার ডেটা পায়।

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

ভাগ্যক্রমে এটি সমাধান করা সত্যই সহজ।

হ্যালো, নির্ভরতা ইনজেকশন।

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

তবে আপনি ভাবছেন, ভাল কি ধরণের সম্পর্কে? একটি ওয়েবআর্টিক্যালরোপোসিটোরি কোনও মকআর্টিকাল রিপোসিটিরি নয়, তাই সংকলকটি কি অভিযোগ করবে না? ঠিক আছে, আপনি যদি প্রোটোকলটি কোনও প্রকার হিসাবে ব্যবহার করেন তবে তা নয়। এইভাবে আমরা সংকলককে জানাতে দেব, যতক্ষণ না এটি আর্টিকেল রিপোসিটরি প্রোটোকলের সাথে মেনে চলে (যা ওয়েব এবং মকআর্টিকাল রিপোসিটোরি উভয়ই করে) সবকিছু মঞ্জুরি দেয়।

চূড়ান্ত কোডটি এর মতো দেখাবে।

এবং আপনার ইউনিট পরীক্ষায় আপনি এটি এর মতো বদলে ফেলতে পারেন।

আপনার ভান্ডারগুলি কী ডেটা ফেরত দেয় তার পুরো নিয়ন্ত্রণ এখন আপনার।

সুপার পাওয়ার আপ: জেনারিকস

জেনেরিক ব্যবহার করে আপনি এটিকে আরও এগিয়ে নিতে পারেন। আপনি যদি এটির বিষয়ে চিন্তা করেন তবে বেশিরভাগ সংগ্রহস্থলের সর্বদা একই ক্রিয়াকলাপ থাকে

  1. সমস্ত জিনিস পেতে
  2. কিছু জিনিস পেতে
  3. কিছু জিনিস .োকান
  4. জিনিস মুছুন
  5. একটি জিনিস আপডেট করুন

তবে কেবলমাত্র আলাদা জিনিসটি হ'ল 'জিনিস' শব্দটি, তাই জেনেরিক্স সহ একটি প্রোটোকল ব্যবহার করার জন্য এটি দুর্দান্ত প্রার্থী হতে পারে। এটি জটিল মনে হতে পারে তবে এটি করা বেশ সহজ।

প্রথমে আমরা প্রোটোকলটির পুনরায় নামকরণ করব, এটিকে আরও… জেনেরিক make তৈরি করতে
এবং তারপরে আমরা সমস্ত নিবন্ধের প্রকারগুলি সরিয়ে ফেলব, এবং যাদু টি দ্বারা এগুলি প্রতিস্থাপন করব But কিন্তু টি অক্ষরটি হ'ল ... আমরা যা চাই তা চাইলে এটি প্রতিস্থাপন। আমাদের কেবল প্রোটোকলের সম্পর্কিত ধরণের হিসাবে টি চিহ্নিত করতে হবে।

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

1. নিবন্ধ ভাণ্ডার

সংকলক টির মধ্যে টির ধরণের অনুমান করবে কারণ পদ্ধতিগুলি প্রয়োগ করে আমরা টি কী তা নির্দিষ্ট করে দিয়েছি। এই ক্ষেত্রে একটি নিবন্ধ অবজেক্ট।

2. ব্যবহারকারী সংগ্রহস্থল

এটাই.

আমি আশা করি আপনি নিবন্ধটি উপভোগ করেছেন এবং আপনার যদি কোনও প্রশ্ন বা মন্তব্য থাকে তবে কেবল নীচে তাদের জিজ্ঞাসা করুন বা টুইটারে আমার কাছে পৌঁছান এবং আসুন একটি চ্যাট করুন।