অ্যান্ড্রয়েডের জন্য জাভাতে মডেল – ভিউ ler কন্ট্রোলার প্যাটার্নটি কার্যকর করা সম্ভব?
বা এটি ইতিমধ্যে ক্রিয়াকলাপগুলির মাধ্যমে প্রয়োগ করা হয়েছে? বা অ্যান্ড্রয়েডের জন্য এমভিসি প্যাটার্নটি প্রয়োগ করার আরও ভাল উপায় আছে কি?
অ্যান্ড্রয়েডের জন্য জাভাতে মডেল – ভিউ ler কন্ট্রোলার প্যাটার্নটি কার্যকর করা সম্ভব?
বা এটি ইতিমধ্যে ক্রিয়াকলাপগুলির মাধ্যমে প্রয়োগ করা হয়েছে? বা অ্যান্ড্রয়েডের জন্য এমভিসি প্যাটার্নটি প্রয়োগ করার আরও ভাল উপায় আছে কি?
উত্তর:
অ্যান্ড্রয়েডে আপনার কাছে এমভিসি নেই তবে আপনার নিম্নলিখিতগুলি রয়েছে:
কোনও সর্বজনীন অনন্য এমভিসি প্যাটার্ন নেই। এমভিসি একটি শক্ত প্রোগ্রামিং কাঠামোর পরিবর্তে একটি ধারণা concept আপনি যে কোনও প্ল্যাটফর্মে আপনার নিজের এমভিসি বাস্তবায়ন করতে পারেন। যতক্ষণ আপনি নীচের মৌলিক ধারণাকে আঁকড়ে রাখছেন ততক্ষণ আপনি এমভিসি প্রয়োগ করছেন:
এটিকেও এইভাবে চিন্তা করুন: আপনি যখন নিজের মডেলটিকে প্রোগ্রাম করবেন, তখন মডেলটির রেন্ডারিং (বা প্ল্যাটফর্ম নির্দিষ্ট কোড) সম্পর্কে চিন্তা করার দরকার নেই। মডেলটি ভিউকে বলবে, আপনার রেন্ডারিং যদি অ্যান্ড্রয়েড বা আইওএস বা উইন্ডোজ ফোন হয় তবে আমার কোনও যত্ন নেই this দৃশ্যটি কেবল প্ল্যাটফর্ম-নির্দিষ্ট রেন্ডারিং কোডটি পরিচালনা করবে।
ক্রস-প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলি বিকাশের জন্য আপনি যখন মডেলটি ভাগ করতে মনো ব্যবহার করেন এটি বিশেষত কার্যকর ।
অ্যান্ড্রয়েডের ক্রিয়া, দৃষ্টিভঙ্গি এবং ক্রিয়াকলাপগুলি অ্যান্ড্রয়েড ইউআইয়ের সাথে কাজ করার বেকড উপায় এবং এটি মডেল – ভিউ – ভিউ মডেল (এমভিভিএম) প্যাটার্নের একটি বাস্তবায়ন , যা কাঠামোগতভাবে অনুরূপ (একই পরিবারে যেমন মডেল) – ভিউ -controller।
আমার জ্ঞানের সর্বোপরি, এই মডেলটি ছিন্ন করার কোনও উপায় নেই। এটি সম্ভবত করা যেতে পারে, তবে আপনি সম্ভবত বিদ্যমান মডেলটির সমস্ত সুবিধা হারাবেন এবং এটিকে কাজ করতে আপনার নিজস্ব ইউআই স্তরটি পুনরায় লিখতে হবে।
কিছু অনুসন্ধানের পরে, সবচেয়ে যুক্তিসঙ্গত উত্তরটি হ'ল:
এমভিসি ইতিমধ্যে Android এ প্রয়োগ করা হয়েছে:
Button
থেকে প্রাপ্ত android.view.View
।(এটি উপায় দ্বারা ক্রিয়াকলাপে কোনও অ্যাপ্লিকেশন ডোমেন যুক্তি বোঝায় না))
ছোট বিকাশকারীদের পক্ষে সবচেয়ে যুক্তিসঙ্গত বিষয় হ'ল এই ধরণটি অনুসরণ করা এবং গুগল যা না করার সিদ্ধান্ত নিয়েছে তা না করার চেষ্টা করা।
পিএস নোট করুন যে কার্যকলাপটি কখনও কখনও পুনরায় শুরু হয়, তাই এটি মডেল ডেটার কোনও জায়গা নেই (পুনরায় চালু করার সহজতম উপায়টি android:configChanges="keyboardHidden|orientation"
এক্সএমএল থেকে বাদ পড়ে এবং আপনার ডিভাইসটি চালু করা)।
সম্পাদনা
আমরা এমভিসি সম্পর্কে কথা বলছি , তবে এফএমভিসি , ফ্রেমওয়ার্ক - মডেল - দেখুন - নিয়ামক বলতে গেলে এটি হবে । ফ্রেমওয়ার্ক (অ্যান্ড্রয়েড অপারেটিং সিস্টেম) উপাদান জীবনচক্র এবং সংশ্লিষ্ট ঘটনা তার ধারণা আরোপ করে, এবং বাস্তবে কন্ট্রোলার ( Activity
/ Service
/ BroadcastReceiver
) এই সঙ্গে মোকাবেলা জন্য সব দায়ী প্রথম ফ্রেমওয়ার্ক ঘটনা -imposed (যেমন onCreate () )। ব্যবহারকারীর ইনপুট কি আলাদাভাবে প্রক্রিয়া করা উচিত? এটি হওয়া সত্ত্বেও, আপনি এটি আলাদা করতে পারবেন না, ব্যবহারকারীর ইনপুট ইভেন্টগুলি অ্যান্ড্রয়েড থেকেও আসে।
যাইহোক, কম কোড যা অ্যান্ড্রয়েড-নির্দিষ্ট নয় আপনি নিজের Activity
/ Service
/ তে রেখেছেন BroadcastReceiver
, তত ভাল।
Button
Service
এটিও
এমন কোনও একক এমভিসি প্যাটার্ন নেই যা আপনি মেনে চলতে পারেন। এমভিসি ঠিক কম বা কম বলেছে যে আপনার ডেটা মেশানো এবং দেখার উচিত নয়, উদাহরণস্বরূপ দর্শনগুলি ডেটা রাখার জন্য দায়বদ্ধ বা ডেটা প্রক্রিয়াকরণকারী ক্লাসগুলি দর্শনকে সরাসরি প্রভাবিত করছে।
তবে তবুও, অ্যান্ড্রয়েড যেভাবে ক্লাস এবং সংস্থানগুলির সাথে ডিল করে, আপনি কখনও কখনও এমনকি এমভিসি প্যাটার্নটি অনুসরণ করতে বাধ্য হন। আমার মতে আরও জটিল হ'ল ক্রিয়াকলাপ যা কখনও কখনও দেখার জন্য দায়ী, তবে তবুও একই সময়ে নিয়ামক হিসাবে কাজ করে।
আপনি যদি এক্সএমএল ফাইলগুলিতে আপনার ভিউ এবং লেআউটগুলি সংজ্ঞায়িত করেন, রেজোল্ড ফোল্ডার থেকে আপনার সংস্থানগুলি লোড করুন এবং আপনি যদি আপনার কোডটিতে এই জিনিসগুলিকে মিশ্রিত করতে কম বেশি এড়ান, তবে আপনি যাইহোক এমভিসি প্যাটার্ন অনুসরণ করছেন।
আপনি অ্যান্ড্রয়েডে এমভিসি বাস্তবায়ন করতে পারেন, তবে এটি "স্থানীয়ভাবে সমর্থিত" নয় এবং কিছু প্রচেষ্টা নেয় takes
এটি বলেছিল, আমি ব্যক্তিগতভাবে অ্যান্ড্রয়েড বিকাশের জন্য আরও ক্লিনার আর্কিটেকচারাল প্যাটার্ন হিসাবে এমভিপির দিকে ঝোঁক । এবং এমভিপি বলে আমার অর্থ এটি:
আমি এখানে আরও বিস্তারিত উত্তর পোস্ট করেছি ।
অ্যান্ড্রয়েডে এমভিসি / এমভিপি প্রয়োগের বিভিন্ন পদ্ধতির সাথে খেলার পরে, আমি একটি যুক্তিসঙ্গত স্থাপত্য নিদর্শন নিয়ে এসেছি, যা আমি এই পোস্টে বর্ণনা করেছি: অ্যান্ড্রয়েডে এমভিপি এবং এমভিসি আর্কিটেকচারাল প্যাটার্নস ।
অ্যান্ড্রয়েডে এমভিসি প্রয়োগের জন্য আমি যে সেরা উত্স পেয়েছি তা হ'ল এই পোস্টটি :
আমি আমার এক প্রকল্পের জন্য একই নকশাটি অনুসরণ করেছি এবং এটি দুর্দান্ত কাজ করেছে। আমি অ্যান্ড্রয়েডে একটি শিক্ষানবিস, তাই আমি বলতে পারি না যে এটিই সেরা সমাধান।
আমি একটি পরিবর্তন করেছি: আমি অ্যাপ্লিকেশন ক্লাসের প্রতিটি ক্রিয়াকলাপের জন্য মডেল এবং নিয়ামকটি ইনস্ট্যান্ট করেছি যাতে ল্যান্ডস্কেপ-প্রতিকৃতি মোড পরিবর্তিত হলে এগুলি পুনরায় তৈরি করা যায় না are
আমি জেডিপেকহ্যামের সাথে একমত, এবং আমি বিশ্বাস করি যে কোনও অ্যাপ্লিকেশনের ইউআই অংশ প্রয়োগ করতে এক্সএমএলই যথেষ্ট নয়।
তবে আপনি যদি ক্রিয়াকলাপটিকে দৃষ্টির অংশ হিসাবে বিবেচনা করেন তবে এমভিসি বাস্তবায়ন করা বেশ সোজা। আপনি অ্যাপ্লিকেশনটিকে ওভাররাইড করতে পারেন (যেমন ক্রিয়াকলাপে getapplication () দ্বারা প্রত্যাবর্তিত হয়েছে) এবং আপনি এখানে এমন একটি নিয়ামক তৈরি করতে পারেন যা আপনার আবেদনের আজীবন টিকে থাকবে।
(বিকল্পভাবে আপনি অ্যাপ্লিকেশন ডকুমেন্টেশনের পরামর্শ অনুসারে সিঙ্গলটন প্যাটার্নটি ব্যবহার করতে পারেন)
এমভিসি- অ্যান্ড্রয়েডে আর্কিটেকচার অ্যান্ড্রয়েডের পরিবর্তে এমভিসি পরিবর্তে যে কোনও এমভিপি অনুসরণ করা তার আরও ভাল। তবে এখনও প্রশ্নের উত্তর অনুযায়ী এটি সমাধান হতে পারে
বর্ণনা এবং নির্দেশিকা
Controller -
Activity can play the role.
Use an application class to write the
global methods and define, and avoid
static variables in the controller label
Model -
Entity like - user, Product, and Customer class.
View -
XML layout files.
ViewModel -
Class with like CartItem and owner
models with multiple class properties
Service -
DataService- All the tables which have logic
to get the data to bind the models - UserTable,
CustomerTable
NetworkService - Service logic binds the
logic with network call - Login Service
Helpers -
StringHelper, ValidationHelper static
methods for helping format and validation code.
SharedView - fragmets or shared views from the code
can be separated here
AppConstant -
Use the Values folder XML files
for constant app level
নোট 1:
এখন আপনি করতে পারেন যাদু টুকরা এখানে। আপনি কোডের টুকরোটিকে শ্রেণিবদ্ধ করার পরে, আইএনটিটি এবং আইএস সার্ভিসের মতো একটি বেস ইন্টারফেস ক্লাস লিখুন। সাধারণ পদ্ধতি ঘোষণা করুন। এখন অ্যাবস্ট্রাক্ট ক্লাস বেসসেসওয়ার্স তৈরি করুন এবং আপনার নিজস্ব পদ্ধতিগুলির সেটটি ঘোষণা করুন এবং কোড পৃথক করুন।
দ্রষ্টব্য 2: যদি আপনার ক্রিয়াকলাপটি ক্রিয়াকলাপে কোড / যুক্তি লেখার চেয়ে একাধিক মডেল উপস্থাপন করে তবে ভিউগুলিকে টুকরো টুকরো করে ভাগ করাই ভাল। তাহলে এটি আরও ভাল। ভবিষ্যতে তাই যদি আরও কোনও মডেলটি ভিউতে দেখানোর প্রয়োজন হয় তবে আরও একটি খণ্ড যুক্ত করুন।
দ্রষ্টব্য 3: কোড পৃথক করা খুব গুরুত্বপূর্ণ। আর্কিটেকচারের প্রতিটি উপাদান নির্ভরযোগ্য যুক্তিযুক্ত না হয়ে স্বতন্ত্র হওয়া উচিত। যদি সুযোগক্রমে আপনার কিছু নির্ভরযোগ্য যুক্তি থাকে তবে এর মধ্যে একটি ম্যাপিং লজিক শ্রেণি লিখুন। এটি আপনাকে ভবিষ্যতে সহায়তা করবে।
লেআউট, সংস্থানসমূহ, ক্রিয়াকলাপ এবং উদ্দেশ্যগুলি ব্যবহার করে অ্যান্ড্রয়েড ইউআই তৈরি করা এমভিসি প্যাটার্নের একটি বাস্তবায়ন। এ সম্পর্কে আরও জানার জন্য নীচের লিঙ্কটি দেখুন - http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
অ্যান্ড্রয়েডের এমভিসি প্যাটার্নটি তাদের ( অ্যাডাপ্টর ) ক্লাসগুলির সাথে প্রয়োগ করা হয়েছে (দয়া করে) । তারা একটি "অ্যাডাপ্টার" দিয়ে একটি নিয়ামককে প্রতিস্থাপন করে। অ্যাডাপ্টারের বিবরণে বলা হয়েছে:
একটি অ্যাডাপ্টার অবজেক্ট অ্যাডাপ্টারভিউ এবং সেই দৃশ্যের অন্তর্নিহিত ডেটার মধ্যে একটি সেতু হিসাবে কাজ করে।
আমি কেবল এটি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য অনুসন্ধান করছি যা একটি ডাটাবেস থেকে পড়ে, তাই আমি জানি না যে এটি এখনও কতটা ভাল কাজ করে। তবে এটি কিউটির মডেল-ভিউ-ডেলিগেট আর্কিটেকচারের মতো কিছুটা মনে হচ্ছে, যা তারা দাবি করে যে এটি একটি traditionalতিহ্যবাহী এমভিসি প্যাটার্ন থেকে এক ধাপ। কমপক্ষে পিসিতে, Qt এর প্যাটার্নটি বেশ ভালভাবে কাজ করে।
যদিও এই পোস্টটি পুরানো বলে মনে হচ্ছে, তবে অ্যান্ড্রয়েডের জন্য এই ক্ষেত্রে সাম্প্রতিক বিকাশ সম্পর্কে অবহিত করতে আমি নিম্নলিখিত দুটি যুক্ত করতে চাই:
অ্যান্ড্রয়েড-বাইন্ডিং - এমন একটি কাঠামো সরবরাহ করা যা ডেটা মডেলটিতে অ্যান্ড্রয়েড ভিউ উইজেটগুলির বাঁধাই সক্ষম করে। এটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে এমভিসি বা এমভিভিএম নিদর্শনগুলি প্রয়োগ করতে সহায়তা করে।
রোবোগুইস - রোবোগুইস অনুমানটি বিকাশের বাইরে নিয়ে যায়। আপনার ভিউ, রিসোর্স, সিস্টেম পরিষেবা বা অন্য যে কোনও অবজেক্ট ইনজেক্ট করুন এবং রবোগুইসকে বিশদটির যত্ন নিতে দিন।
বর্ণনা:
এমভিসি প্যাটার্নটি মূলত এটি:
এমভিসির গুরুত্বপূর্ণ বৈশিষ্ট্য: আমরা অন্যথায় প্রভাবিত না করে মডেল বা দেখুন বা নিয়ামক হয় হয় তা পরিবর্তন করতে পারি
আমি মনে করি সর্বাধিক দরকারী সরলীকৃত ব্যাখ্যাটি এখানে: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf
আমি এখানে যা দেখেছি এবং পড়েছি তার সমস্ত কিছুই থেকে, এই সমস্ত জিনিস প্রয়োগ করা আরও শক্ত করে তোলে এবং অ্যান্ড্রয়েডের অন্যান্য অংশগুলির সাথে ভাল মানায় না।
অন্যান্য শ্রোতার বাস্তবায়ন করার জন্য ইতিমধ্যে একটি স্ট্যান্ডার্ড অ্যান্ড্রয়েড উপায়। সর্বাধিক নিরীহ উপায় হ'ল স্লাইডগুলির মতো জাভা পর্যবেক্ষক যুক্ত করা এবং অনক্লিক এবং অন্যান্য ধরণের ক্রিয়াগুলি ক্রিয়াকলাপে এখনও ক্রিয়াকলাপে শ্রেণিবদ্ধ করা এবং গোষ্ঠী করা।
অ্যান্ড্রয়েড উপায়টি ক্রিয়াকলাপ উভয়ই করে। এটির সাথে লড়াই করা সত্যিকার অর্থে ভবিষ্যতের কোডিং প্রসারিত বা করা সহজ নয়।
আমি একমত 2nd পোস্টে । এটি ইতিমধ্যে প্রয়োগ করা হয়েছে, কেবল মানুষ যেমনভাবে অভ্যস্ত হয় তেমন নয়। এটি একই ফাইলে থাকুক বা না থাকুক, ইতিমধ্যে বিচ্ছেদ রয়েছে। অন্যান্য ভাষা এবং ওএসের সাথে এটি ফিট করার জন্য অতিরিক্ত বিভাজন তৈরি করার দরকার নেই।
অবাক হয়ে অবাক লাগল যে এখানে কোনও পোস্টই প্রশ্নের উত্তর দেয়নি। এগুলি হয় খুব সাধারণ, অস্পষ্ট, ভুল বা অ্যান্ড্রয়েডে প্রয়োগের বিষয়টি চিহ্নিত করে না।
MVC ইন, দেখুন স্তর শুধুমাত্র ব্যবহারকারীর ইন্টারফেস (UI) দেখানোর জন্য কিভাবে জানেন। যদি এর জন্য কোনও ডেটা প্রয়োজন হয়, এটি এটি মডেল স্তর থেকে পেয়ে যায় । তবে ভিউ মডেলটিকে ডেটা সন্ধান করতে সরাসরি জিজ্ঞাসা করে না, এটি এটি নিয়ামকের মাধ্যমে করে । তাই নিয়ন্ত্রক আহ্বান মডেল জন্য প্রয়োজনীয় ডেটা প্রদান দেখুন । একবার ডাটা প্রস্তুত, কন্ট্রোলার জানায় দেখুন যে তথ্য থেকে অর্জিত করার জন্য প্রস্তুত মডেল । এখন ভিউ মডেল থেকে ডেটা পেতে পারে ।
এই প্রবাহটি নীচে হিসাবে সংক্ষিপ্ত করা যেতে পারে:
এটা যে মূল্য হয় দেখুন কিছু তথ্য প্রাপ্যতা সম্পর্কে জানতে পারেন মডেল পারেন মাধ্যমে কন্ট্রোলার পরিচিত হিসাবে - প্যাসিভ MVC - অথবা ডাটা দেখে মডেল এটি observables নিবন্ধিত করে, যা সক্রিয় MVC ।
বাস্তবায়নের অংশে, প্রথম যে জিনিসগুলির মনে আসে তা হ'ল ভিউয়ের জন্য অ্যান্ড্রয়েড উপাদানটি কী ব্যবহার করা উচিত ? Activity
বা Fragment
?
উত্তরটি হ'ল এটি কোনও বিষয় নয় এবং উভয়ই ব্যবহার করা যেতে পারে। দেখুন UI 'তে সঙ্গে ব্যবহারকারীর মিথষ্ক্রিয়া ডিভাইস এবং সাড়া ব্যবহারকারী ইন্টারফেস (UI) উপস্থাপন সক্ষম হওয়া উচিত। উভয় Activity
এবং Fragment
এই জন্য প্রয়োজনীয় পদ্ধতি সরবরাহ।
এই নিবন্ধটিতে ব্যবহৃত উদাহরণ অ্যাপটিতে আমি ভিউ স্তরটির Activity
জন্য ব্যবহার করেছি তবে এটি ব্যবহার করা যায়।Fragment
আমার নমুনা অ্যাপ্লিকেশনটি এখানে আমার গিটহাব রেপোর 'এমভিসি' শাখায় পাওয়া যাবে ।
আমি এখানে উদাহরণের মাধ্যমে অ্যান্ড্রয়েডে এমভিসি আর্কিটেকচারের উপকারিতা এবং বিপরীতেও মোকাবিলা করেছি ।
আগ্রহীদের জন্য, আমি এখানে অ্যান্ড্রয়েড অ্যাপের আর্কিটেকচারের উপর ধারাবাহিক নিবন্ধগুলি শুরু করেছি যাতে আমি সম্পূর্ণ কার্যকরী অ্যাপের মাধ্যমে অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশের জন্য বিভিন্ন আর্কিটেকচার, অর্থাৎ এমভিসি, এমভিপি, এমভিভিএমের সাথে তুলনা করি।
অ্যান্ড্রয়েডে এমভিএক্স বিপর্যয়ে ক্লান্ত হয়ে আমি সম্প্রতি একটি ছোট লাইব্রেরি তৈরি করেছি যা একমুখী ডেটা প্রবাহ সরবরাহ করে এবং এমভিসি ধারণার অনুরূপ: https://github.com/zserge/anvil
মূলত, আপনার একটি উপাদান রয়েছে (ক্রিয়াকলাপ, খণ্ড এবং ভিউগ্রুপ)। আপনার ভিতরে ভিউ স্তরের গঠন এবং স্টাইলটি সংজ্ঞায়িত করুন। এছাড়াও আপনি কীভাবে ডেটা দর্শনগুলির সাথে আবদ্ধ হওয়া উচিত তা নির্ধারণ করেন। অবশেষে, আপনি শ্রোতাদের একই জায়গায় আবদ্ধ করতে পারেন।
তারপরে, একবার আপনার ডেটা পরিবর্তন হয়ে গেলে - বিশ্বব্যাপী "রেন্ডার ()" পদ্ধতিটি কল করা হবে এবং আপনার দর্শনগুলি সাম্প্রতিকতম ডেটার সাথে স্মার্টলি আপডেট করা হবে।
কোড কমপ্যাক্টনেসের জন্য উপাদানটির অভ্যন্তরের সবকিছু থাকার একটি উদাহরণ এখানে রয়েছে (অবশ্যই মডেল এবং কন্ট্রোলার সহজেই পৃথক করা যায়)। এখানে "গণনা" একটি মডেল, ভিউ () পদ্ধতিটি একটি ভিউ এবং "ভি -> গণনা ++" এমন একটি নিয়ামক যা বোতামের ক্লিকে শোনায় এবং মডেলটি আপডেট করে।
public MyView extends RenderableView {
public MyView(Context c) {
super(c);
}
private int count = 0;
public void view() {
frameLayout(() -> { // Define your view hierarchy
size(FILL, WRAP);
button(() -> {
textColor(Color.RED); // Define view style
text("Clicked " + count); // Bind data
onClick(v -> count++); // Bind listeners
});
});
}
পৃথকীকৃত মডেল এবং নিয়ামকটির সাথে এটির মতো দেখতে পাবেন:
button(() -> {
textColor(Color.RED);
text("Clicked " + mModel.getClickCount());
onClick(mController::onButtonClicked);
});
এখানে প্রতিটি বোতামে ক্লিক করে সংখ্যাটি বাড়ানো হবে, তারপরে "রেন্ডার ()" কল করা হবে এবং বোতামের পাঠ্য আপডেট করা হবে।
আপনি যদি কোটলিন ব্যবহার করেন তবে বাক্য গঠন আরও সুখকর হয়ে উঠবে: http://zserge.com/blog/anvil-kotlin.html । এছাড়াও, ল্যাম্বডাস ছাড়াই জাভার বিকল্প বিকল্প রয়েছে।
লাইব্রেরি নিজেই খুব হালকা ওজনের, কোনও নির্ভরতা নেই, প্রতিবিম্ব ব্যবহার করে না ইত্যাদি
(অস্বীকৃতি: আমি এই গ্রন্থাগারের লেখক)
জ্যামারিন দল যে ব্যাখ্যাটি ব্যাখ্যা করেছে তার অনুসারে (আইওএস এমভিসিতে "আমি জানি এটি অদ্ভুত বলে মনে হচ্ছে, তবে একটি দ্বিতীয় অপেক্ষা করুন"):
আমি এটি বলতে পারি:
অ্যান্ড্রয়েডের মডেলটি কেবল পার্সেলেবল অবজেক্ট। দর্শনটি এক্সএমএল লেআউট এবং নিয়ামকটি হ'ল (ক্রিয়াকলাপ + এটির খণ্ড)।
* এটি আমার মতামত, কোনও সংস্থান বা কোনও বইয়ের নয়।
কোনও বাস্তবায়িত এমভিসি আর্কিটেকচার নেই, তবে এমভিপি (মডেল – ভিউ – উপস্থাপক) আর্কিটেকচার বাস্তবায়নের জন্য লাইব্রেরি / উদাহরণগুলির একটি সেট বিদ্যমান।
দয়া করে এই লিঙ্কগুলি পরীক্ষা করুন:
গুগল একটি অ্যান্ড্রয়েড আর্কিটেকচার এমভিপির একটি উদাহরণ যুক্ত করেছে:
আমি দেখেছি যে অনেক লোক বলছেন এমভিসি ইতিমধ্যে অ্যান্ড্রয়েডে প্রয়োগ করা হয়েছে, তবে এটি সত্য নয়। অ্যান্ড্রয়েড ডিফল্টরূপে কোনও এমভিসি অনুসরণ করে না।
কারণ আমি গুগল কখনও জোর করে আইফোনের মতো এমভিসি বাস্তবায়নের বিধিনিষেধ আরোপ করব না, তবে এটি তাদের বিকাশকারীদের জন্য তারা তাদের প্রকল্পে কোন পৃষ্ঠপোষক বা কৌশল চান, ছোট বা সাধারণ অ্যাপ্লিকেশনগুলিতে এমভিসি ব্যবহার প্রয়োজন হয় না, তবে অ্যাপ্লিকেশন হিসাবে বৃদ্ধি পায় এবং জটিল হয়ে যায় এবং পরবর্তী বছরগুলিতে এর কোডটির সংশোধন প্রয়োজন, তারপরে অ্যান্ড্রয়েডে এমভিসি প্যাটার্নের প্রয়োজন হয়।
এটি কোডটি সংশোধন করার একটি সহজ উপায় সরবরাহ করে এবং সমস্যাগুলি হ্রাস করতে সহায়তা করে। আপনি যদি অ্যান্ড্রয়েডে এমভিসি বাস্তবায়ন করতে চান তবে নীচে প্রদত্ত লিঙ্কটি অনুসরণ করুন এবং আপনার প্রকল্পে এমভিসি বাস্তবায়ন উপভোগ করুন।
http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/
তবে আজকাল আমি মনে করি অ্যান্ড্রয়েড আর্কিটেকচারাল প্যাটার্ন সহ এমভিপি হ'ল একটি পরিষ্কার এবং শক্তিশালী অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য বিকাশকারীদের সবচেয়ে ভাল বিকল্পটি ব্যবহার করা উচিত।
আমরা যখন কোনও অ্যান্ড্রয়েড অ্যাপ্লিকেশনে এমভিসি, এমভিভিএম বা উপস্থাপনা মডেল প্রয়োগ করি তখন আমরা যা চাই তা হ'ল একটি পরিষ্কার কাঠামোগত প্রকল্প এবং ইউনিট পরীক্ষার জন্য আরও গুরুত্বপূর্ণভাবে সহজ।
এই মুহুর্তে, তৃতীয় পক্ষের কাঠামো ব্যতীত আপনার কাছে প্রচুর কোড থাকে (যেমন অ্যাডএক্সএক্সএলইস্টেনার (), সন্ধান ভিউআইআইডি () ইত্যাদি) যা কোনও ব্যবসায়ের মান যোগ করে না।
আরও কী, আপনাকে সাধারণ JUnit পরীক্ষার পরিবর্তে অ্যান্ড্রয়েড ইউনিট পরীক্ষা চালাতে হবে, যা ইউনিট পরীক্ষা চালাতে কয়েক বছর সময় লাগে এবং ইউনিট পরীক্ষাগুলি কিছুটা অযৌক্তিক করে তোলে। এই কারণে, কয়েক বছর আগে আমরা একটি ওপেন সোর্স প্রকল্প, রোববাইন্ডিং - অ্যান্ড্রয়েড প্ল্যাটফর্মের জন্য ডেটা-বাইন্ডিং উপস্থাপনা মডেল কাঠামো শুরু করেছি।
রবোবাইন্ডিং আপনাকে ইউআই কোড লিখতে সহায়তা করে যা পড়া, পরীক্ষা করা এবং বজায় রাখা সহজ। রোবোবাইন্ডিং অ্যাডএক্সএক্সএলসিস্টনার বা তার মতো অপ্রয়োজনীয় কোডের প্রয়োজনীয়তা সরিয়ে দেয় এবং ইউআই লজিককে উপস্থাপনা মডেলটিতে স্থানান্তর করে, যা একটি পোও এবং সাধারণ জুনিত পরীক্ষার মাধ্যমে পরীক্ষা করা যায় । রবোবাইন্ডিং নিজেই এর মান নিশ্চিত করতে 300 টিরও বেশি JUnit পরীক্ষা নিয়ে আসে।
আমার উপলব্ধিতে, অ্যান্ড্রয়েড এমভিসি প্যাটার্নটি যেভাবে পরিচালনা করে তা হ'ল:
আপনার একটি ক্রিয়াকলাপ রয়েছে যা নিয়ামক হিসাবে কাজ করে। আপনার কাছে এমন একটি শ্রেণি রয়েছে যা ডেটা পাওয়ার জন্য দায়বদ্ধ - মডেল এবং তারপরে আপনার ভিউ ক্লাসটি যা দেখায়।
ভিউ সম্পর্কে কথা বলার সময় বেশিরভাগ লোকেরা কেবল এক্সএমএল সংজ্ঞায়িত এর ভিজ্যুয়াল অংশের জন্যই ভাবেন। আসুন ভুলে যাবেন না যে ভিউটির জাভা ক্লাসে সংজ্ঞায়িত এর নির্মাতা, পদ্ধতি এবং ইত্যাদির সাথে একটি প্রোগ্রামের অংশ রয়েছে।