অ্যান্ড্রয়েডভিউমোডেল বনাম ভিউমোডেল


158

অ্যান্ড্রয়েড আর্কিটেকচার সামগ্রী গ্রন্থাগার সাথে পরিচয় করিয়ে দেয়ার বেশ কিছু নতুন শ্রেণীর সহ চালু হয় AndroidViewModelএবং ViewModel। যাইহোক, এই দুটি শ্রেণীর মধ্যে পার্থক্য নির্ধারণ করতে আমার সমস্যা হচ্ছে। ডকুমেন্টেশন succinctly বর্ণনা AndroidViewModelনিম্নরূপ:

অ্যাপ্লিকেশন প্রসঙ্গে সচেতন ViewModel

আমি বংশবৃদ্ধির প্রশংসা করি, তবে এটি ঠিক কী বোঝায়? আমাদের কখন AndroidViewModelওভারটি ViewModelএবং বিপরীত ব্যবহার করা উচিত ?

উত্তর:


223

অ্যান্ড্রয়েডভিউমোডেল অ্যাপ্লিকেশন প্রসঙ্গ সরবরাহ করে

আপনার ভিউ মডেলের অভ্যন্তরে যদি আপনার প্রসঙ্গ ব্যবহারের প্রয়োজন হয় তবে আপনার অ্যান্ড্রয়েডভিউমোডেল (এভিএম) ব্যবহার করা উচিত, কারণ এতে অ্যাপ্লিকেশন প্রসঙ্গটি রয়েছে। প্রসঙ্গের কলটি পুনরুদ্ধার করতে getApplication(), অন্যথায় নিয়মিত ভিউমোডেল (ভিএম) ব্যবহার করুন।

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

সুতরাং, নির্দিষ্ট শ্রেণিতে অ্যাপ্লিকেশন উদাহরণটি ব্যবহার করা এবং রাখা সাধারণভাবে কোনও সমস্যা নয়। তবে, যদি কোনও অ্যাপ্লিকেশন উদাহরণ তাদের উল্লেখ করে তবে রেফারেন্স চক্র সমস্যার কারণে এটি একটি সমস্যা।

অ্যাপ্লিকেশন ইনস্ট্যান্স সম্পর্কে এছাড়াও দেখুন

ইউনিট পরীক্ষার জন্য অ্যান্ড্রয়েডভিউমোডেল সমস্যাযুক্ত

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


40
কেন তখন সর্বদা অ্যান্ড্রয়েডভিউমোডেল ব্যবহার করবেন না? আপনার এখন প্রয়োজন না হলেও পরে আপনার প্রসঙ্গের প্রয়োজন হতে পারে। এর কোনও নেতিবাচকতা আছে কি?
টি। রেক্স

19
@ টি.রেক্স আপনি যদি কোডটি দেখুন তবে এটি ViewModelকেবলমাত্র ক্ষেত্রটি অ্যাপ্লিকেশনটির দিকে নির্দেশ করে প্রসারিত । আমার যদি এটির প্রয়োজন না হয় তবে আমি Applicationপ্যারামিটারের সাথে বাধ্যতামূলক কনস্ট্রাক্টর (যা AndroidViewModelপ্রয়োজন) এবং কেবল ব্যবহার করা পছন্দ করি না ViewModel। ভবিষ্যতে যখন আমার একটি প্রসঙ্গের প্রয়োজন হবে তখন আমি সহজেই এটিকে পরিবর্তন করতে পারি।
ছেলে

3
ViewModelআপনি যখন এটি ফ্র্যাগমেন্টের সাথে ব্যবহার করতে চান বা ViewModelএকই ক্রিয়াকলাপের বিভিন্ন অংশের মধ্যে ভাগ করতে চান তখন ব্যবহার করুন ।
কোডের্নার

22
@ টি.রেক্স AndroidViewModel- ব্যবহার - Contextনির্ভর না - এটি কেবলমাত্র ইন্সট্রুমেন্ট টেস্টকে সম্ভাবনা হিসাবে রেখে নিয়মিত ইউনিট পরীক্ষায় এটি পরীক্ষা করা অসম্ভব করে তোলে? আমি এটি নিজেই খেলিনি (এখনও), এটি কেবল একটি চিন্তা
কনরাড মোরাউসকি

2
অ্যান্ড্রয়েডভিউমোডেল এবং ভিউমোডেল একই, কেবলমাত্র পার্থক্যটি হ'ল অ্যান্ড্রয়েডভিউমোডেলটিতে অ্যাপ্লিকেশন প্রসঙ্গটি রয়েছে। আপনি মিডিয়া স্টোর থেকে ডেটা লোড করে ফাংশন করতে ভিউমোডেল ব্যবহার করতে এবং ভিউমোডেলের প্রসঙ্গটি পাস করতে বা অ্যাপ্লিকেশনের প্রসঙ্গের সাথে অ্যান্ড্রয়েডভিউমোডেল ব্যবহার করতে পারেন।
অ্যালেক্স

9

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

অ্যান্ড্রয়েডভিউমোডেলের সাথে একমাত্র পার্থক্য হ'ল এটি অ্যাপ্লিকেশন প্রসঙ্গটি নিয়ে আসে, যা আপনাকে যদি কোনও সিস্টেম পরিষেবা পেতে প্রাসঙ্গিক প্রয়োজন হয় বা অনুরূপ প্রয়োজন হয় তবে তা সহায়ক। গা bold় পাঠ্যটি এটি বোঝার জন্য আরও স্পষ্ট করে তোলে।


1
সরকারী উৎস medium.com/androiddevelopers/...
নীরজ Sewani

4

AndroidViewModel এর উপশ্রেণী হয় ViewModel । তাদের মধ্যে পার্থক্যটি হ'ল আমরা অ্যাপ্লিকেশন প্রসঙ্গটি পাস করতে পারি যা ব্যবহারের জন্য যখনই অ্যাপোলি কনটেক্সট প্রয়োজন হয় উদাহরণস্বরূপ সংগ্রহস্থলের ডাটাবেস ইনস্ট্যান্ট করতে।

অ্যান্ড্রয়েডভিউমোডেল একটি অ্যাপ্লিকেশন প্রসঙ্গে সচেতন ভিউমডেল।

AndroidViewModel:

public class PriceViewModel extends AndroidViewModel {
private PriceRepository priceRepository;

public PriceViewModel(@NonNull Application application) {
    super(application);
    priceRepository= new PriceRepository(application);
    allPrices = priceRepository.getAllPrices();
}

ViewModel:

public class PriceViewModel extends ViewModel {
public PriceViewModel() {
    super();
}

আপনার যখন অ্যাপ্লিকেশন প্রসঙ্গে প্রয়োজন তখনই আপনার অ্যান্ড্রয়েডভিউমডেল ব্যবহার করা উচিত ।

আপনার কখনও ক্রিয়াকলাপের রেফারেন্স বা ভিউমোডেলে কোনও ক্রিয়াকলাপের উল্লেখ করে এমন কোনও ভিউ সংরক্ষণ করা উচিত নয় ec কারণ ভিউমোডেল কোনও ক্রিয়াকলাপকে আউটলাইভ করার জন্য ডিজাইন করা হয়েছে এবং এটি মেমোরি ফাঁসের কারণ হয়ে দাঁড়ায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.