অ্যান্ড্রয়েডে এমভিসি প্যাটার্ন


497

অ্যান্ড্রয়েডের জন্য জাভাতে মডেল – ভিউ ler কন্ট্রোলার প্যাটার্নটি কার্যকর করা সম্ভব?

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


64
আপনার প্রশ্নটি খুব ভাল। তবে সমাধান হিসাবে চিহ্নিত উত্তরটি আমার মতে সঠিক নয়। এটি বেশিরভাগ লোককে বিভ্রান্ত করতে পারে।
সাঘার

4
আমার 2 টি পোস্ট এখানে শুরু করে অ্যান্ড্রয়েড আর্কিটেকচার: এমভি?
ডোরি

1
এছাড়াও এমভিসি মেনে চলার জন্য নিয়মগুলির একটি অতিরিক্ত সেট রয়েছে বা কার্যকলাপ, এক্সএমএল, সংস্থানগুলির কারণে ইতিমধ্যে এমভিসি অনুসারে অ্যান্ড্রয়েড বিকাশ কী?
উডুনের শিখা

3
@ ডরি, আমি আপনার লিঙ্কটি ঠিক করেছি: অ্যান্ড্রয়েড আর্কিটেকচার: এমভি?
আন্দ্রেবেতা

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

উত্তর:


239

অ্যান্ড্রয়েডে আপনার কাছে এমভিসি নেই তবে আপনার নিম্নলিখিতগুলি রয়েছে:

  • আপনি বিভিন্ন এক্সএমএল ফাইলগুলিতে রেজোলিউশন, হার্ডওয়্যার ইত্যাদি দ্বারা আপনার ব্যবহারকারী ইন্টারফেসটিকে সংজ্ঞায়িত করেন
  • আপনি লোকেল ইত্যাদি দ্বারা বিভিন্ন এক্সএমএল ফাইলে আপনার সংস্থানগুলি সংজ্ঞায়িত করেন
  • তোমার মত clases প্রসারিত ListActivity , TabActivity দ্বারা এক্সএমএল ফাইলের ব্যবহার করতে inflaters
  • আপনি আপনার ব্যবসায়ের যুক্তির জন্য যতগুলি ক্লাস তৈরি করতে পারেন।
  • ইতিমধ্যে আপনার জন্য প্রচুর ইউটিলিটি লেখা হয়েছে - ডেটাবেস ইউটিলস , এইচটিএমএল।

3
@ জেডিপিখাম, আপনি কেন বলছেন যে "আপনি নিজের বিন্যাস / দৃশ্যের সাথে কথা না বলে কোনও ক্রিয়াকলাপ ইনস্ট্যান্ট করতে পারবেন না"? কোনও ক্রিয়াকলাপ ইনস্ট্যান্ট করে তোলার সাথে মতামতের সাথে কথা বলার প্রয়োজন হয় না, বাস্তবে দর্শনগুলির সাথে কথা বলা কোনওভাবেই কার্যকলাপ তাত্ক্ষণিকতার অংশ নয়। আপনি বিভিন্ন কার্যকলাপ ক্রিয়াকলাপগুলি কল করতে পারেন (যা আপনাকে করতে হবে না) যা আপনি যখন উপযুক্ত এবং কখন দেখেন আপনার মতামতের সাথে ইন্টারঅ্যাক্ট করে। দ্বিতীয় প্রশ্ন: ধরে নেওয়া ক্রিয়াকলাপটি "নিয়ন্ত্রক" ভূমিকা নেওয়ার উদ্দেশ্যে করা হয়েছে (আমি বিশ্বাস করি অনেক অ্যান্ড্রয়েড ডেভস এটিকে দেখেন) কেন কার্যকলাপ থেকে আপনার দৃষ্টিভঙ্গিতে কথা বলবেন না?

8
"অ্যান্ড্রয়েড হ'ল এমভিসি" বলে যে কারও জন্য দয়া করে এক সপ্তাহের জন্য ব্যাকবোন.জেএস (হ্যাঁ, ক্লায়েন্ট সাইড জেএস) চেষ্টা করুন এবং তারপরে ফিরে এসে বলুন যে "অ্যান্ড্রয়েডটি এমভিসি"। আপনি অবশেষে প্রশ্নটি বুঝতে পারবেন এবং আমরা কেন জিজ্ঞাসা করি :)
মার্ক পিটারসন

14
"অ্যান্ড্রয়েডে আপনার এমভিসি নেই" ???? অন্যান্য ভাষাগুলির মতো অ্যান্ড্রয়েডেও আপনি এমভিসি চাইলে আপনার এমভিসি থাকে।
লরেঞ্জো বারবাগলি

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

না। অবশ্যই অ্যান্ড্রয়েডে এমভিসি রয়েছে তবে আরও স্পষ্টভাবে। অ্যান্ড্রয়েড সবকিছু কীভাবে কাঠামোবদ্ধ করে সে হিসাবে এটি কেবলমাত্র অন্যভাবে প্রয়োগ করা হয়েছে।
6rchid

229

কোনও সর্বজনীন অনন্য এমভিসি প্যাটার্ন নেই। এমভিসি একটি শক্ত প্রোগ্রামিং কাঠামোর পরিবর্তে একটি ধারণা concept আপনি যে কোনও প্ল্যাটফর্মে আপনার নিজের এমভিসি বাস্তবায়ন করতে পারেন। যতক্ষণ আপনি নীচের মৌলিক ধারণাকে আঁকড়ে রাখছেন ততক্ষণ আপনি এমভিসি প্রয়োগ করছেন:

  • মডেল: কি রেন্ডার
  • দেখুন: রেন্ডার কিভাবে
  • নিয়ামক: ইভেন্টস, ব্যবহারকারীর ইনপুট

এটিকেও এইভাবে চিন্তা করুন: আপনি যখন নিজের মডেলটিকে প্রোগ্রাম করবেন, তখন মডেলটির রেন্ডারিং (বা প্ল্যাটফর্ম নির্দিষ্ট কোড) সম্পর্কে চিন্তা করার দরকার নেই। মডেলটি ভিউকে বলবে, আপনার রেন্ডারিং যদি অ্যান্ড্রয়েড বা আইওএস বা উইন্ডোজ ফোন হয় তবে আমার কোনও যত্ন নেই this দৃশ্যটি কেবল প্ল্যাটফর্ম-নির্দিষ্ট রেন্ডারিং কোডটি পরিচালনা করবে।

ক্রস-প্ল্যাটফর্ম অ্যাপ্লিকেশনগুলি বিকাশের জন্য আপনি যখন মডেলটি ভাগ করতে মনো ব্যবহার করেন এটি বিশেষত কার্যকর ।


12
এটি সত্য, এবং ভালভাবে বলতে গেলে, এটি তত্ত্ব এবং লোকেরা ব্যবহারিক!
TWiStErRob

1
@TWiStErRob তবে ডিজাইনের ধরণগুলি তাত্ত্বিক, বিমূর্ত ধারণা যা তাদের উপলব্ধি করার কেবল একটি উপায় নেই। "আমি এমভিসি তত্ত্বের সাথে বুঝতে চাই না, আমি এটি বাস্তবায়ন করতে চাই" ঘোষণার ঘোষণা দিয়ে মনে হচ্ছে এটির ফলশ্রুতিতে পারে "আমি আমার রান্নাঘরে একটি ওয়াশিং মেশিন রেখে যাচ্ছি কারণ ওয়াশিং মেশিনগুলি ক্লিনার-প্যাটার্ন বাস্তবায়ন করে এবং রান্নাঘরের জন্য এটি প্রয়োজন "।
লুক

1
আমি মনে করি উদাহরণগুলি অমূল্য কারণ তারা দেখায় যে অন্যান্য লোকেরা কী নিয়ে এসেছিল। কেউ তাদের উন্নতি করতে পারে এবং তাদের প্রচেষ্টা থেকে শিখতে পারে। সবার চাকা পুনরুদ্ধার করার দরকার নেই। অ্যান্ড্রয়েড এবং এটি জটিল জীবনচক্রের প্রসঙ্গে ডিজাইনের ধরণে সমস্যাগুলি সমাধান করা হয়নি, তবে প্রত্যেকেই তাদের মুখোমুখি হবে। এটিই আমি ব্যবহারিক দ্বারা বোঝাচ্ছি।
TWiStErRob

47

অ্যান্ড্রয়েডের ক্রিয়া, দৃষ্টিভঙ্গি এবং ক্রিয়াকলাপগুলি অ্যান্ড্রয়েড ইউআইয়ের সাথে কাজ করার বেকড উপায় এবং এটি মডেল – ভিউ – ভিউ মডেল (এমভিভিএম) প্যাটার্নের একটি বাস্তবায়ন , যা কাঠামোগতভাবে অনুরূপ (একই পরিবারে যেমন মডেল) – ভিউ -controller।

আমার জ্ঞানের সর্বোপরি, এই মডেলটি ছিন্ন করার কোনও উপায় নেই। এটি সম্ভবত করা যেতে পারে, তবে আপনি সম্ভবত বিদ্যমান মডেলটির সমস্ত সুবিধা হারাবেন এবং এটিকে কাজ করতে আপনার নিজস্ব ইউআই স্তরটি পুনরায় লিখতে হবে।


29

কিছু অনুসন্ধানের পরে, সবচেয়ে যুক্তিসঙ্গত উত্তরটি হ'ল:

এমভিসি ইতিমধ্যে Android এ প্রয়োগ করা হয়েছে:

  1. দেখুন = লেআউট, সংস্থানসমূহ এবং অন্তর্নির্মিত ক্লাসগুলি যেমন Buttonথেকে প্রাপ্ত android.view.View
  2. নিয়ন্ত্রক = ক্রিয়াকলাপ
  3. মডেল = ক্লাস যা প্রয়োগের যুক্তি প্রয়োগ করে

(এটি উপায় দ্বারা ক্রিয়াকলাপে কোনও অ্যাপ্লিকেশন ডোমেন যুক্তি বোঝায় না))

ছোট বিকাশকারীদের পক্ষে সবচেয়ে যুক্তিসঙ্গত বিষয় হ'ল এই ধরণটি অনুসরণ করা এবং গুগল যা না করার সিদ্ধান্ত নিয়েছে তা না করার চেষ্টা করা।

পিএস নোট করুন যে কার্যকলাপটি কখনও কখনও পুনরায় শুরু হয়, তাই এটি মডেল ডেটার কোনও জায়গা নেই (পুনরায় চালু করার সহজতম উপায়টি android:configChanges="keyboardHidden|orientation"এক্সএমএল থেকে বাদ পড়ে এবং আপনার ডিভাইসটি চালু করা)।

সম্পাদনা

আমরা এমভিসি সম্পর্কে কথা বলছি , তবে এফএমভিসি , ফ্রেমওয়ার্ক - মডেল - দেখুন - নিয়ামক বলতে গেলে এটি হবে । ফ্রেমওয়ার্ক (অ্যান্ড্রয়েড অপারেটিং সিস্টেম) উপাদান জীবনচক্র এবং সংশ্লিষ্ট ঘটনা তার ধারণা আরোপ করে, এবং বাস্তবে কন্ট্রোলার ( Activity/ Service/ BroadcastReceiver) এই সঙ্গে মোকাবেলা জন্য সব দায়ী প্রথম ফ্রেমওয়ার্ক ঘটনা -imposed (যেমন onCreate () )। ব্যবহারকারীর ইনপুট কি আলাদাভাবে প্রক্রিয়া করা উচিত? এটি হওয়া সত্ত্বেও, আপনি এটি আলাদা করতে পারবেন না, ব্যবহারকারীর ইনপুট ইভেন্টগুলি অ্যান্ড্রয়েড থেকেও আসে।

যাইহোক, কম কোড যা অ্যান্ড্রয়েড-নির্দিষ্ট নয় আপনি নিজের Activity/ Service/ তে রেখেছেন BroadcastReceiver, তত ভাল।


3
ক্রিয়াকলাপের ইউআইতে সরাসরি অ্যাক্সেস থাকে, তবে এমভিসিতে নিয়ামকটি ভিউ সম্পর্কে জানেন না (কেবলমাত্র তদ্বিপরীত)।
কনরাড মোরাওস্কি

2
@ কনরাডমোরাউস্কি হুম্ম .... জিনিসগুলি প্রদর্শন এবং নিয়ামক সম্পর্কে জানার একটি দৃষ্টিভঙ্গি ? একটি শিশু, বলুন, কন্ট্রোলার সম্পর্কে জেনে ? এটি আরও যুক্তিসঙ্গত বলে মনে হয় যে দর্শনগুলি কেবল জিনিসগুলি প্রদর্শন করার বিষয়ে জানে। এবং এই বিষয়টি বিবেচনায় নিয়ে যে মডেল কেবলমাত্র ডেটাগুলির প্রকৃতি সম্পর্কে জানে, এজন্যই নিয়ামকের প্রয়োজন: মডেল এবং ভিউ উভয় সম্পর্কে অবশ্যই কিছু জানতে হবে । Button
18446744073709551615

4
অবশ্যই নিয়ন্ত্রকের কাছে ইভেন্টগুলি অর্পণ করার জন্য দৃশ্যের সাথে নিয়ামক সম্পর্কে জানতে হবে। কন্ট্রোলার এটি মডেল পর্যন্ত অনুসরণ করে এবং ফলাফলগুলি কী ঘটে তা দেখুন (যাতে এটি এটি প্রদর্শন করতে পারে) অবহিত করে। নিয়ামক দর্শনটিকে স্ফীত করে না (যেখানে ক্রিয়াকলাপটি করে), বা এটি বোতাম, পাঠ্যবক্স, তালিকা ইত্যাদির কোনও জিনিস জানা উচিত নয় (যেখানে কার্যকলাপ জানে)।
কনরাড মোরাউস্কি

1
আমি মনে করি Serviceএটিও
নিয়ামকের

1
কখনও পর্যবেক্ষকের কথা শুনেছেন? এখন অবধি সবচেয়ে ভাল বিভাজন পাওয়া গেছে যখন ১। নিয়ামকের কেবলমাত্র মডেল উদাহরণ থাকে, ২. মডেলটিতে নিয়ামক বা দর্শন সম্পর্কে কোনও জ্ঞাত থাকে না তবে দৃষ্টিভঙ্গি মডেল পর্যবেক্ষক হিসাবে নিবন্ধন করতে পারে (সুতরাং মডেল কিন্ডা ভিউ সম্পর্কে জানেন তবে তিনি জানেন না যে তিনি কে এবং তিনি যত্ন নেই) - মডেলটি যখন লোডিং ডেটা দিয়ে করা হয়, তখন তিনি সমস্ত পর্যবেক্ষককে (সাধারণত 1) এবং 3 কে অবহিত করেন view ভিউতে এটি থেকে তথ্য টেনে আনার জন্য মডেল উদাহরণ রয়েছে। এইভাবে সমস্ত এমভিসি কাঠামোর জন্য কেবল 2 নির্ভরশীলতা রয়েছে। আমি মনে করি 2 ন্যূনতম তাই এটি সর্বোত্তম বিন্যাস হওয়া উচিত।
Srneczek

18

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

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

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


14

আপনি অ্যান্ড্রয়েডে এমভিসি বাস্তবায়ন করতে পারেন, তবে এটি "স্থানীয়ভাবে সমর্থিত" নয় এবং কিছু প্রচেষ্টা নেয় takes

এটি বলেছিল, আমি ব্যক্তিগতভাবে অ্যান্ড্রয়েড বিকাশের জন্য আরও ক্লিনার আর্কিটেকচারাল প্যাটার্ন হিসাবে এমভিপির দিকে ঝোঁক । এবং এমভিপি বলে আমার অর্থ এটি:

এখানে চিত্র বর্ণনা লিখুন

আমি এখানে আরও বিস্তারিত উত্তর পোস্ট করেছি ।

অ্যান্ড্রয়েডে এমভিসি / এমভিপি প্রয়োগের বিভিন্ন পদ্ধতির সাথে খেলার পরে, আমি একটি যুক্তিসঙ্গত স্থাপত্য নিদর্শন নিয়ে এসেছি, যা আমি এই পোস্টে বর্ণনা করেছি: অ্যান্ড্রয়েডে এমভিপি এবং এমভিসি আর্কিটেকচারাল প্যাটার্নস


14

অ্যান্ড্রয়েডে এমভিসি প্রয়োগের জন্য আমি যে সেরা উত্স পেয়েছি তা হ'ল এই পোস্টটি :

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

আমি একটি পরিবর্তন করেছি: আমি অ্যাপ্লিকেশন ক্লাসের প্রতিটি ক্রিয়াকলাপের জন্য মডেল এবং নিয়ামকটি ইনস্ট্যান্ট করেছি যাতে ল্যান্ডস্কেপ-প্রতিকৃতি মোড পরিবর্তিত হলে এগুলি পুনরায় তৈরি করা যায় না are


8
নিবন্ধটি যদি একদিন মুছে ফেলা হয় তবে সংক্ষিপ্তসারটি পাওয়া দুর্দান্ত হবে।
pqsk

12

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

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

(বিকল্পভাবে আপনি অ্যাপ্লিকেশন ডকুমেন্টেশনের পরামর্শ অনুসারে সিঙ্গলটন প্যাটার্নটি ব্যবহার করতে পারেন)


12

এমভিসি- অ্যান্ড্রয়েডে আর্কিটেকচার অ্যান্ড্রয়েডের পরিবর্তে এমভিসি পরিবর্তে যে কোনও এমভিপি অনুসরণ করা তার আরও ভাল। তবে এখনও প্রশ্নের উত্তর অনুযায়ী এটি সমাধান হতে পারে

এখানে চিত্র বিবরণ লিখুন

বর্ণনা এবং নির্দেশিকা

     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: কোড পৃথক করা খুব গুরুত্বপূর্ণ। আর্কিটেকচারের প্রতিটি উপাদান নির্ভরযোগ্য যুক্তিযুক্ত না হয়ে স্বতন্ত্র হওয়া উচিত। যদি সুযোগক্রমে আপনার কিছু নির্ভরযোগ্য যুক্তি থাকে তবে এর মধ্যে একটি ম্যাপিং লজিক শ্রেণি লিখুন। এটি আপনাকে ভবিষ্যতে সহায়তা করবে।


11

লেআউট, সংস্থানসমূহ, ক্রিয়াকলাপ এবং উদ্দেশ্যগুলি ব্যবহার করে অ্যান্ড্রয়েড ইউআই তৈরি করা এমভিসি প্যাটার্নের একটি বাস্তবায়ন। এ সম্পর্কে আরও জানার জন্য নীচের লিঙ্কটি দেখুন - http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

পিডিএফ জন্য আয়না


7
লিঙ্কটি নষ্ট হয়ে গেছে স্যার
র্যাট-এ-ট্যাট-এ-ট্যাট রাতাতুইল

2
দেখে মনে হচ্ছে এই COSC346-lab2.2up.pdf ফাইলটিতে সম্পূর্ণ বিবরণ অন্তর্ভুক্ত নেই।
জেমস

9

অ্যান্ড্রয়েডের এমভিসি প্যাটার্নটি তাদের ( অ্যাডাপ্টর ) ক্লাসগুলির সাথে প্রয়োগ করা হয়েছে (দয়া করে) । তারা একটি "অ্যাডাপ্টার" দিয়ে একটি নিয়ামককে প্রতিস্থাপন করে। অ্যাডাপ্টারের বিবরণে বলা হয়েছে:

একটি অ্যাডাপ্টার অবজেক্ট অ্যাডাপ্টারভিউ এবং সেই দৃশ্যের অন্তর্নিহিত ডেটার মধ্যে একটি সেতু হিসাবে কাজ করে।

আমি কেবল এটি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য অনুসন্ধান করছি যা একটি ডাটাবেস থেকে পড়ে, তাই আমি জানি না যে এটি এখনও কতটা ভাল কাজ করে। তবে এটি কিউটির মডেল-ভিউ-ডেলিগেট আর্কিটেকচারের মতো কিছুটা মনে হচ্ছে, যা তারা দাবি করে যে এটি একটি traditionalতিহ্যবাহী এমভিসি প্যাটার্ন থেকে এক ধাপ। কমপক্ষে পিসিতে, Qt এর প্যাটার্নটি বেশ ভালভাবে কাজ করে।


9

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

অ্যান্ড্রয়েড-বাইন্ডিং - এমন একটি কাঠামো সরবরাহ করা যা ডেটা মডেলটিতে অ্যান্ড্রয়েড ভিউ উইজেটগুলির বাঁধাই সক্ষম করে। এটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে এমভিসি বা এমভিভিএম নিদর্শনগুলি প্রয়োগ করতে সহায়তা করে।

রোবোগুইস - রোবোগুইস অনুমানটি বিকাশের বাইরে নিয়ে যায়। আপনার ভিউ, রিসোর্স, সিস্টেম পরিষেবা বা অন্য যে কোনও অবজেক্ট ইনজেক্ট করুন এবং রবোগুইসকে বিশদটির যত্ন নিতে দিন।


9

মডেল ভিউ কন্ট্রোলার (এমভিসি)

এখানে চিত্র বর্ণনা লিখুন


বর্ণনা:

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

এমভিসি প্যাটার্নটি মূলত এটি:

  • মডেল: কি প্রদর্শিত হবে। এটি ডেটা উত্স হতে পারে (যেমন: অ্যাপ্লিকেশনটিতে সার্ভার, কাঁচা ডেটা)
  • দেখুন: এটি প্রদর্শিত হয়। এটি এক্সএমএল হতে পারে। এটি এভাবে উপস্থাপনা ফিল্টার হিসাবে অভিনয় করছে is একটি দৃশ্য তার মডেল (বা মডেল অংশ) এর সাথে সংযুক্ত থাকে এবং উপস্থাপনের জন্য প্রয়োজনীয় ডেটা পায়।
  • নিয়ামক: ব্যবহারকারীর ইনপুট এর মতো ইভেন্টগুলি পরিচালনা করে। এটি কার্যকলাপ হতে পারে

এমভিসির গুরুত্বপূর্ণ বৈশিষ্ট্য: আমরা অন্যথায় প্রভাবিত না করে মডেল বা দেখুন বা নিয়ামক হয় হয় তা পরিবর্তন করতে পারি

  • বলুন আমরা ভিউ, আকারের আকার বা দেখার অবস্থান পরিবর্তন করি। এটি করে এটি মডেল বা নিয়ন্ত্রণকারীকে প্রভাবিত করবে না
  • বলুন আমরা মডেলটি পরিবর্তন করেছি (সার্ভার থেকে প্রাপ্ত তথ্যের পরিবর্তে সম্পদগুলি থেকে ডেটা আনয়ন) তবুও এটি দৃশ্য এবং নিয়ন্ত্রণকারীকে প্রভাবিত করবে না
  • বলুন আমরা কন্ট্রোলার পরিবর্তন করেছি (ক্রিয়াকলাপে লজিক) এটি মডেল এবং দর্শনকে প্রভাবিত করবে না

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

7

আমি মনে করি সর্বাধিক দরকারী সরলীকৃত ব্যাখ্যাটি এখানে: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

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

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

অ্যান্ড্রয়েড উপায়টি ক্রিয়াকলাপ উভয়ই করে। এটির সাথে লড়াই করা সত্যিকার অর্থে ভবিষ্যতের কোডিং প্রসারিত বা করা সহজ নয়।

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


6
আপনার সরবরাহিত লিঙ্কটি নষ্ট হয়ে গেছে।
মিমবিস

6

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

MVC ইন, দেখুন স্তর শুধুমাত্র ব্যবহারকারীর ইন্টারফেস (UI) দেখানোর জন্য কিভাবে জানেন। যদি এর জন্য কোনও ডেটা প্রয়োজন হয়, এটি এটি মডেল স্তর থেকে পেয়ে যায় । তবে ভিউ মডেলটিকে ডেটা সন্ধান করতে সরাসরি জিজ্ঞাসা করে না, এটি এটি নিয়ামকের মাধ্যমে করে । তাই নিয়ন্ত্রক  আহ্বান মডেল জন্য প্রয়োজনীয় ডেটা প্রদান দেখুন । একবার ডাটা প্রস্তুত, কন্ট্রোলার জানায় দেখুন যে তথ্য থেকে অর্জিত করার জন্য প্রস্তুত মডেল । এখন ভিউ মডেল থেকে ডেটা পেতে পারে ।

এই প্রবাহটি নীচে হিসাবে সংক্ষিপ্ত করা যেতে পারে:

এখানে চিত্র বর্ণনা লিখুন

এটা যে মূল্য হয় দেখুন কিছু তথ্য প্রাপ্যতা সম্পর্কে জানতে পারেন  মডেল  পারেন মাধ্যমে কন্ট্রোলার পরিচিত হিসাবে -  প্যাসিভ MVC - অথবা ডাটা দেখে মডেল এটি observables নিবন্ধিত করে, যা সক্রিয় MVC

বাস্তবায়নের অংশে, প্রথম যে জিনিসগুলির মনে আসে তা হ'ল ভিউয়ের জন্য অ্যান্ড্রয়েড উপাদানটি কী ব্যবহার করা উচিত ? Activity  বা Fragment ?

উত্তরটি হ'ল এটি কোনও বিষয় নয় এবং উভয়ই ব্যবহার করা যেতে পারে। দেখুন UI 'তে সঙ্গে ব্যবহারকারীর মিথষ্ক্রিয়া ডিভাইস এবং সাড়া ব্যবহারকারী ইন্টারফেস (UI) উপস্থাপন সক্ষম হওয়া উচিত। উভয় Activity  এবং Fragment  এই জন্য প্রয়োজনীয় পদ্ধতি সরবরাহ।

এই নিবন্ধটিতে ব্যবহৃত উদাহরণ অ্যাপটিতে আমি ভিউ স্তরটির Activity জন্য ব্যবহার করেছি তবে   এটি ব্যবহার করা যায়।Fragment

আমার নমুনা অ্যাপ্লিকেশনটি এখানে আমার গিটহাব রেপোর 'এমভিসি' শাখায় পাওয়া যাবে

আমি এখানে উদাহরণের মাধ্যমে অ্যান্ড্রয়েডে এমভিসি আর্কিটেকচারের উপকারিতা এবং বিপরীতেও মোকাবিলা করেছি ।

আগ্রহীদের জন্য, আমি এখানে অ্যান্ড্রয়েড অ্যাপের আর্কিটেকচারের উপর ধারাবাহিক নিবন্ধগুলি শুরু করেছি যাতে আমি সম্পূর্ণ কার্যকরী অ্যাপের মাধ্যমে অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশের জন্য বিভিন্ন আর্কিটেকচার, অর্থাৎ এমভিসি, এমভিপি, এমভিভিএমের সাথে তুলনা করি।


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

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

5

অ্যান্ড্রয়েডে এমভিএক্স বিপর্যয়ে ক্লান্ত হয়ে আমি সম্প্রতি একটি ছোট লাইব্রেরি তৈরি করেছি যা একমুখী ডেটা প্রবাহ সরবরাহ করে এবং এমভিসি ধারণার অনুরূপ: 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 । এছাড়াও, ল্যাম্বডাস ছাড়াই জাভার বিকল্প বিকল্প রয়েছে।

লাইব্রেরি নিজেই খুব হালকা ওজনের, কোনও নির্ভরতা নেই, প্রতিবিম্ব ব্যবহার করে না ইত্যাদি

(অস্বীকৃতি: আমি এই গ্রন্থাগারের লেখক)


4

জ্যামারিন দল যে ব্যাখ্যাটি ব্যাখ্যা করেছে তার অনুসারে (আইওএস এমভিসিতে "আমি জানি এটি অদ্ভুত বলে মনে হচ্ছে, তবে একটি দ্বিতীয় অপেক্ষা করুন"):

  • মডেল (ডেটা বা অ্যাপ্লিকেশন যুক্তি),
  • দর্শন (ব্যবহারকারী ইন্টারফেস), এবং
  • নিয়ামক (পিছনে কোড)

আমি এটি বলতে পারি:

অ্যান্ড্রয়েডের মডেলটি কেবল পার্সেলেবল অবজেক্ট। দর্শনটি এক্সএমএল লেআউট এবং নিয়ামকটি হ'ল (ক্রিয়াকলাপ + এটির খণ্ড)।

* এটি আমার মতামত, কোনও সংস্থান বা কোনও বইয়ের নয়।


4

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

দয়া করে এই লিঙ্কগুলি পরীক্ষা করুন:

গুগল একটি অ্যান্ড্রয়েড আর্কিটেকচার এমভিপির একটি উদাহরণ যুক্ত করেছে:


3

আমি দেখেছি যে অনেক লোক বলছেন এমভিসি ইতিমধ্যে অ্যান্ড্রয়েডে প্রয়োগ করা হয়েছে, তবে এটি সত্য নয়। অ্যান্ড্রয়েড ডিফল্টরূপে কোনও এমভিসি অনুসরণ করে না।

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

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

http://www.therealjoshua.com/2011/11/android-architecture-part-1-intro/

তবে আজকাল আমি মনে করি অ্যান্ড্রয়েড আর্কিটেকচারাল প্যাটার্ন সহ এমভিপি হ'ল একটি পরিষ্কার এবং শক্তিশালী অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য বিকাশকারীদের সবচেয়ে ভাল বিকল্পটি ব্যবহার করা উচিত।


1
একমত। অ্যান্ড্রয়েডের নিজেকে ঝুলানোর জন্য যথেষ্ট নমনীয়তা রয়েছে। আপনার যে কার্যকলাপটি এমভিসির তিনটি দিকই পরিচালনা করে তাড়াতাড়ি বিশাল এবং জটিল বাড়তে পারে।
স্কট বিগস

2

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

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

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

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


1

আমার উপলব্ধিতে, অ্যান্ড্রয়েড এমভিসি প্যাটার্নটি যেভাবে পরিচালনা করে তা হ'ল:

আপনার একটি ক্রিয়াকলাপ রয়েছে যা নিয়ামক হিসাবে কাজ করে। আপনার কাছে এমন একটি শ্রেণি রয়েছে যা ডেটা পাওয়ার জন্য দায়বদ্ধ - মডেল এবং তারপরে আপনার ভিউ ক্লাসটি যা দেখায়।

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

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