আমি একটি বড়, উত্পাদন প্রস্তুত সুইফটইউআই অ্যাপের জন্য আর্কিটেকচার করার চেষ্টা করি। আমি সবসময় একই সমস্যাটিতে চলেছি যা সুইফটইউআইয়ের একটি প্রধান নকশার ত্রুটির দিকে নির্দেশ করে।
তবুও কেউ আমাকে পুরো কাজ, উত্পাদন প্রস্তুত উত্তর দিতে পারেনি।
SwiftUI
ন্যাভিগেশন রয়েছে যাতে পুনরায় ব্যবহারযোগ্য দর্শনগুলি কীভাবে করবেন ?
যেহেতু SwiftUI
NavigationLink
দৃ strongly়তার সাথে দৃ .়ভাবে আবদ্ধ হয় এটি কেবল এমনভাবে সম্ভব নয় যে এটি বড় অ্যাপগুলিতেও স্কেল করে। NavigationLink
এই ছোট্ট নমুনায় অ্যাপ্লিকেশনগুলি কাজ করে, হ্যাঁ - তবে আপনি একবারে একটি অ্যাপ্লিকেশনে অনেকগুলি ভিউ পুনরায় ব্যবহার করতে চান না। এবং মডিউল সীমানা আবার ব্যবহার করতে পারেন। (যেমন: আইওএস, ওয়াচওএস ইত্যাদিতে ভিউ পুনরায় ব্যবহার করুন ...)
ডিজাইনের সমস্যা: নেভিগেশনলিঙ্কগুলি ভিউতে হার্ডকোডযুক্ত।
NavigationLink(destination: MyCustomView(item: item))
তবে এতে থাকা ভিউটি যদি NavigationLink
পুনরায় ব্যবহারযোগ্য হয় তবে আমি গন্তব্যটিকে হার্ডকোড করতে পারি না । গন্তব্য সরবরাহ করে এমন একটি ব্যবস্থা থাকতে হবে। আমি এটি এখানে জিজ্ঞাসা করেছি এবং বেশ ভাল উত্তর পেয়েছি, তবে এখনও পুরো উত্তরটি নেই:
সুইফটুআই এমভিভিএম সমন্বয়ক / রাউটার / নেভিগেশনলিঙ্ক
ধারণাটি ছিল পুনরায় ব্যবহারযোগ্য দৃশ্যে গন্তব্য লিঙ্কগুলি ইনজেক্ট করা। সাধারণত ধারণাটি কাজ করে তবে দুর্ভাগ্যক্রমে এটি বাস্তব প্রোডাকশন অ্যাপ্লিকেশনগুলিতে স্কেল হয় না। আমার একাধিক পুনঃব্যবহারযোগ্য পর্দা পাওয়ার সাথে সাথে আমি লজিক্যাল সমস্যাটিতে চলে আসি যে একটি পুনরায় ব্যবহারযোগ্য দর্শন ( ViewA
) এর পূর্ব -কনফিগার করা ভিউ-গন্তব্য ( ViewB
) দরকার। তবে কী যদি ViewB
পূর্ব-কনফিগার্ড দর্শন-গন্তব্য প্রয়োজন ViewC
? আমার ViewB
আগে থেকেই এমনভাবে তৈরি করা দরকার যা আমি ইনজেকশন দেওয়ার আগেই ViewC
ইতিমধ্যে ইনজেকশনে ViewB
ফেলেছি । এবং এইভাবেই .... তবে সেই সময়ে যে ডেটাটি পাস করতে হয়েছিল সেগুলি সম্পূর্ণ নির্মাণ ব্যর্থ হয় না।ViewB
ViewA
আমার আরেকটি ধারণা ছিল Environment
গন্তব্যগুলি ইনজেক্ট করার জন্য নির্ভরতা ইনজেকশন প্রক্রিয়া হিসাবে ব্যবহার করা NavigationLink
। তবে আমি মনে করি এটিকে কম বেশি হ্যাক হিসাবে বিবেচনা করা উচিত এবং বড় অ্যাপ্লিকেশনগুলির জন্য কোনও স্কেলযোগ্য সমাধান নয়। আমরা প্রতিটি কিছুর জন্য মূলত পরিবেশটি ব্যবহার করব। তবে পরিবেশটি কেবলমাত্র ভিউ-এর অভ্যন্তরে ব্যবহার করা যেতে পারে (পৃথক সমন্বয়কারী বা ভিউমোডেলগুলিতে নয়) এটি আমার মতে আবারও অদ্ভুত গঠন তৈরি করতে পারে।
ব্যবসায়ের যুক্তি (যেমন দেখুন মডেল কোড দেখুন) এবং দর্শনকে পৃথক করতে হবে নেভিগেশন এবং ভিউও পৃথক করতে হবে (উদাহরণস্বরূপ সমন্বয়কারী প্যাটার্ন) UIKit
এটি সম্ভব হওয়ার কারণে আমরা ভিউতে UIViewController
এবং এর UINavigationController
পিছনে প্রবেশ করি । UIKit's
এমভিসির ইতিমধ্যে সমস্যা ছিল যে এটি এতগুলি ধারণা ছিন্ন করেছে যে এটি "মডেল-ভিউ-কন্ট্রোলার" এর পরিবর্তে মজাদার নাম "ম্যাসিভ-ভিউ-কন্ট্রোলার" হয়ে যায়। এখন একই ধরণের সমস্যা অব্যাহত রয়েছে SwiftUI
তবে আমার মতে আরও খারাপ। নেভিগেশন এবং দর্শনগুলি দৃ strongly়ভাবে মিলিত হয়েছে এবং ডিকোপল করা যায় না। সুতরাং সেগুলিতে নেভিগেশন থাকলে পুনরায় ব্যবহারযোগ্য দর্শনগুলি করা সম্ভব নয়। এটি সমাধান করা সম্ভব ছিল UIKit
কিন্তু এখন আমি এর মধ্যে কোনও মীমাংসা সমাধান দেখতে পাচ্ছি নাSwiftUI
। দুর্ভাগ্যক্রমে অ্যাপল কীভাবে এর মতো আর্কিটেকচার সংক্রান্ত সমস্যাগুলি সমাধান করবেন তা আমাদের কোনও ব্যাখ্যা সরবরাহ করেন নি। আমরা পেয়েছি মাত্র কয়েকটি ছোট নমুনা অ্যাপ্লিকেশন।
আমি ভুল প্রমাণিত হতে চাই। দয়া করে আমাকে একটি পরিষ্কার অ্যাপ্লিকেশন ডিজাইনের প্যাটার্ন দেখান যা এটি বড় উত্পাদনের জন্য প্রস্তুত অ্যাপসের জন্য সমাধান করে।
আগাম ধন্যবাদ.
আপডেট: এই অনুগ্রহ কয়েক মিনিটের মধ্যে শেষ হবে এবং দুর্ভাগ্যক্রমে এখনও কেউ কার্যকারী উদাহরণ প্রদান করতে সক্ষম হয়নি। তবে আমি যদি অন্য কোনও সমাধান না পেয়ে এবং এখানে লিঙ্ক না পাই তবে এই সমস্যার সমাধানের জন্য আমি একটি নতুন অনুগ্রহ শুরু করব। তাদের দুর্দান্ত অবদানের জন্য সকলকে ধন্যবাদ!