প্রদত্ত এমভিভিএম অ্যাপ্লিকেশনটিতে কোনও ফ্রেমওয়ার্ক (ক্যালিবার্ন.মাইক্রো ইত্যাদি) ব্যবহার না করার জন্য কীভাবে নির্বাচন করবেন?


28

আমি একবার একটি এমভিভিএম / ডাব্লুপিএফ প্রকল্প শুরু করেছি, যা শেষ পর্যন্ত নির্মিত এবং স্থাপন করা হয়েছিল এবং এর জন্য আমি প্রচুর ক্যালিবার্ন.মাইক্রো এমভিভিএম ফ্রেমওয়ার্ক অধ্যয়ন করেছি। আসল বিষয়টি হ'ল: আমি এর জন্য ক্যালিবার্ন M মাইক্রো ব্যবহার না করে শেষ করেছি এবং কিছু এমভিভিএম ধারণা নিজেই প্রয়োগ করেছি (বিশেষত, কেবলমাত্র ViewModelBaseএবং RoutedCommandক্লাসগুলি)।

এখন একই লাইন ধরে আমাকে কিছুটা বড় প্রকল্পে নিয়োগ দেওয়া হয়েছিল: একটি "সিঙ্গল-ইউজার রিচ ক্লায়েন্ট অফলাইন ডেস্কটপ অ্যাপ্লিকেশন", তাই বলে, এবং আমি ক্যালিবার্ন.মাইক্রো ব্যবহার করার সিদ্ধান্ত নিয়েছি। আর সেখান থেকেই আমার "সমস্যা" শুরু হয়।

আমি এই বিখ্যাত ব্লগ পোস্টে পড়েছি , যার শিরোনামে বলা হয়েছে যে "আপনি যদি এমভিভিএম ব্যবহার করেন তবে আপনার একটি কাঠামো দরকার ", যে:

"একটি কাঠামো ছাড়াই এমভিভিএম এর মতো কিছু করার চেষ্টা করা বিশাল পরিমাণের কাজ d টন ডুপ্লিকেট কোড, চাকাটি পুনরায় উদ্ভাবন করা, এবং মানুষকে অন্যরকমভাবে চিন্তা করতে পুনরায় প্রশিক্ষণ দেওয়া

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

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

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

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

"Frameাকা কাঠামোগুলি জিনিসগুলিকে সহজ এবং আরও প্রাকৃতিক করে তোলে" এর ব্যাপক sensকমত্য রয়েছে, তবে আমি যদি এর বিপরীতে অভিজ্ঞ হয়ে পড়ি তবে এর অর্থ কি এই কাঠামোটি ব্যবহার করা উচিত নয়, বা আমি এটি ভুল উপায়ে শেখার চেষ্টা করছি? এমন কি কোনও সূত্র আছে যা আমার প্রথম স্থানে কোনও ফ্রেমওয়ার্ক ব্যবহার করা উচিত নয়? অথবা কীভাবে সাধারণ এমভিভিএম বিকাশের জন্য সিএম ব্যবহার করবেন তা বোঝার কিছু "সঠিক" উপায় আছে?


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

@ রেচেল আমি ক্যালিবার্ন.মাইক্রোর সাথে এই পদ্ধতির ব্যবহার করার পরিকল্পনা করছিলাম, তবে কোনও RelayCommandবাস্তবায়ন খুঁজে পাইনি (যেহেতু এটি আইকোমন্ড প্রোপার্টিগুলিকে আবদ্ধ না করে কনভেনশন দ্বারা সরাসরি পদ্ধতিগুলিতে "আবদ্ধ")।
হেলটনবাইকার

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

@ র্যাচেল "কতটা কাছাকাছি [ক্যালিবার্ন] এমভিএম স্তরটির সাথে দৃষ্টিভঙ্গি স্থাপন করেছে" সম্পর্কিত, আপনার কি বোঝানো বাহ্যিক অর্থ? আরও ভাল, আরও এমভিভিএম উপায়ে সেই স্তরগুলি বেঁধে রাখার "নন-ক্যালিবার্ন" উপায় কী হবে? (আমি আন্তরিকভাবে জিজ্ঞাসা করি কারণ আমি বর্তমানে জানি না)।
হেলটনবাইকার

সত্যিকার অর্থে আমি কালিবার্ন মাইক্রো ব্যবহার করি নি, তাই আমি অনুভব করি যে আমি কাঠামোর একটি খারাপ বিচারক judge আমি মনে করি যে ভিউটি প্রথম তৈরি হয়েছিল এবং কোড-পেছনের অবজেক্টগুলি সিদ্ধান্ত নেওয়ার জন্য দায়বদ্ধ ছিল, যা আমি প্রথম দিকের মতামত পছন্দ না করায় পছন্দ করি না is আরেকটি হ'ল অটোমেজিকাল বাইন্ডিং যা আপনার XAML উপাদানগুলির নাম কীভাবে নির্ভর করে, যেমন আমি ভেবেছিলাম এটি ইউআইটিকে ব্যবসায়ের স্তরকে খুব বেশি সংযুক্ত করে। আমি যদিও ফ্রেমওয়ার্ক সম্পর্কে ভাল জিনিস শুনেছি, এবং আমার মতামত এটি এড়ানোর পরামর্শ দেবেন না। এটি নিজের জন্য চেষ্টা করে দেখুন এবং আপনি এটি পছন্দ করেন কিনা তা দেখুন :)
রাচেল

উত্তর:


16

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

তবে এমভিভিএমএলাইট ব্যবহার করার সময় এটি পাতলা, আপনি যখন এটি ব্যবহার করেন তখন আপনি সম্ভবত বুঝতে পারবেন যে এটি আপনার এমভিভিএম ফ্রেমওয়ার্কের মতো প্রায় 100%, এতে কিছু বৈশিষ্ট্য ছিটিয়ে রয়েছে।

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


আপনি কি মনে করেন, তবে "ক্যালিবার্ন.মাইক্রো ডিসঅরেন্টেশন" থেকে আমার "এমনিভিটি" কমপক্ষে "নিরাময়" হিসাবে এমভিভিএমএলাইট ব্যবহার করার চেষ্টা করা উচিত? যদি বিষয়টি হয় তবে আমি অবশ্যই একবার নজর দেব।
হেলটনবাইকার

@ হেল্টনবিকার অবশ্যই, একবার দেখুন এটি এত সহজ যে কমপক্ষে আপনাকে এমভিভিএম ফ্রেমওয়ার্কে একটি ভাল পা রাখা উচিত।
কিরি

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

10

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

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


2
এতে যুক্ত হয়েছে, মাইক্রোসফ্টের প্রস্তাবিত এমভিভিএমের (বাক্সের বাইরে, ডাব্লুপিএফ) খুব অভাব রয়েছে। এমনকি এমন প্রোগ্রামারদের জন্য খুব হতাশাজনক যারা নিজেরাই (এবং যথাযথভাবে) পাকা বিকাশকারী হিসাবে ভাবেন। ম্যাজিক স্ট্রিং, রানটাইম মধ্যে অস্পষ্ট ব্যতিক্রম, এই ধরনের মত enum সৌন্দর্য করার radiobuttons একদল বাঁধাই হিসেবে মৌলিক সামগ্রী stackoverflow.com/q/397556/168719 - অবকাঠামো কি করতে পারি? তাদের হয় হয় জটিলতার এই স্তরের প্রতিধ্বনি করতে হবে, বা এটির উপর একটি সত্যই ঘন বিমূর্ততা সরবরাহ করার চেষ্টা করতে হবে
Konrad Morawski

2
@ কনরাডমোরাউসকি ডাব্লুপিএফ নিজে থেকে এমভিভিএম নয়; আপনি ডাব্লুপিএফ দিয়ে পিছনে কোড করতে পারেন, তবে এটি এমভিভিএম নয়। সুতরাং আপনি যদি ডাব্লুপিএফ এবং এমভিভিএম করতে চান, আপনাকে একটি এমভিভিএম ফ্রেমওয়ার্ক ব্যবহার করতে হবে বা নিজেকে একটি প্রয়োগ করতে হবে।
অ্যান্ডি

1
@ অ্যান্ডি অবশ্যই, তবে এটি নিরাপদ নয় যে ডাব্লুপিএফ এমএমভিএমের উদ্দেশ্যে তৈরি । আমি এমভিভিএম কার্যকারিতা উল্লেখ করছি যা ডাব্লুপিএফ-এর অন্তর্নির্মিত আসে। আমি জানি আপনি এখনও কোডটি পিছনে করতে পারেন
কনরাড মোরাউস্কি

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

3
@ সম্ভবত আমরা এখন সংজ্ঞা দিয়ে বিতর্ক করছি। আমার অর্থ হ'ল এমভিভিএমকে সম্ভব করে তোলে এমন সমস্ত "আঠালো" ইতিমধ্যে রয়েছে - এক্সএএমএল DataContextইত্যাদিতে ডেটা বাইন্ডিংস
কনরাড মোরাওস্কি

7

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

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

ক্যালিবার্ন.মাইক্রো স্টক ডাব্লুপিএফকেও অকার্যকর করে না - এটি কেবল এটির উপরে তৈরি করে যার অর্থ আপনি যদি পছন্দ করেন তবে কিছুটা বিট এবং টুকরো জন্য ক্যালিবার্ন ব্যবহার করতে পারেন তবে আপনি ডাব্লুপিএফ বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। এটি কীভাবে টাইপসক্রিপ্ট এবং জাভাস্ক্রিপ্ট একসাথে আমার মনে একত্রিত হয়।

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


3
আপনার উত্তরের জন্য ধন্যবাদ. দু'বছর পরে, নির্ভরশীল ইনজেকশন কনটেইনারগুলির ধারণাটি বোঝার পরে আমি এই কাঠামোগুলিকে "গ্রহণ" করা অনেক সহজ পেয়েছি, যা আমি দুর্দান্ত মার্ক সিম্যানের "ডিআই ইন নেট।" বই থেকে শিখেছি।
হেলটনবাইকার

1

যে কেউ হতাশ হয়ে ক্যালিবার্নের সাথে এখানে পৌঁছেছেন M মাইক্রো, এই কাঠামোটি একবার দেখুন: স্টাইলট

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

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

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