এমভিভিএম কি অর্থহীন? [বন্ধ]


91

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

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

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

এই সমস্যাটির প্রতিযোগিতামূলক সমাধান সহ বেশ কয়েকটি লোক রয়েছে এবং তারা সমস্ত হ্যাক এবং একটি পরিষ্কার, সহজে পুনরায় ব্যবহারযোগ্য, মার্জিত সমাধান সরবরাহ করে না। বেশিরভাগ এমভিভিএম টুলকিটস ডায়লগগুলিতে টকটকে থাকে এবং যখন তারা সেগুলি সম্বোধন করে তখন এগুলি কেবল সতর্কতা বাক্স যা কাস্টম ইন্টারফেস বা মডেল দেখার প্রয়োজন হয় না।

আমি এমভিভিএম ভিউ প্যাটার্নটি ছেড়ে দেওয়ার পরিকল্পনা করছি, এটির কমপক্ষে এর গোঁড়া বাস্তবায়ন। আপনি কি মনে করেন? আপনার যদি কোন সমস্যা থাকে তবে তা কি আপনার পক্ষে মূল্যহীন? আমি কি কেবলমাত্র একজন অযোগ্য প্রোগ্রামার বা এমভিভিএম এটির হাইপাইড যা করছি না?


8
আমি সবসময়ই জিজ্ঞাসা করেছি যে এমভিভিএম ওভার ইঞ্জিনিয়ারিং কিনা। আকর্ষণীয় প্রশ্ন।
টেলর লিজ

12
এমভিভিএম এবং এমভিসির মতো প্যাটার্নগুলিকে অতিরিক্ত রক্ষণাবেক্ষণের মতো মনে হয়, যতক্ষণ না আপনার কিছু পরিবর্তন করতে হয় বা কোনও উপাদান পরিবর্তন করতে হয়। প্রথমবার আপনাকে এটি করতে হবে, অনুষ্ঠানের সমস্ত তার নিজের জন্য অর্থ প্রদান করে।
রবার্ট হার্ভে

42
লাম্বডাস কি গুপ্ত? আমাকে খবর।
রায় বুয়েসন

6
@ রায় - হাহাহা, এই মন্তব্যের জন্য +1! : ডি
ভেনেমো

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

উত্তর:


61

দুঃখিত, যদি আমার উত্তরটি কিছুটা দৈর্ঘ্য হয়ে যায় তবে আমাকে দোষ দেবেন না! আপনার প্রশ্নটিও দীর্ঘ।

সংক্ষেপে, এমভিভিএম অর্থহীন নয়।

পয়েন্টে পরিষ্কার ক্ষেত্রেটি একটি মডেল ডায়ালগ বাক্সের জন্য সমর্থন যুক্ত করছে। সঠিক উপায় হ'ল একটি ডায়ালগ বাক্স রাখা এবং এটি একটি ভিউ মডেলের সাথে টাই করা। এটি কাজ করা কঠিন।

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

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

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

ঠিক আছে, আপনাকে এটি বেশ কয়েকটি জায়গায় ব্যবহার করতে হবে না। এইভাবে আমি এটি সমাধান করব:

  • এক্সএএমএলএলটিকে ভিউতে যুক্ত করুন এবং .xaml.cs তে কিছুই নেই
  • ভিউমোডেলের অভ্যন্তরে প্রতিটি অ্যাপের যুক্তি (সরাসরি UI উপাদানগুলির সাথে কাজ করা স্টাফ বাদে) লিখুন
  • সমস্ত কোড যা ইউআই দ্বারা করা উচিত তবে ব্যবসার যুক্তির সাথে কিছুই করার নেই তা .xaml.cs ফাইলগুলিতে চলে যায়

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

(বিটিডাব্লু, টেমপ্লেট এবং ল্যাম্বডা এক্সপ্রেশনগুলি সঠিকভাবে ব্যবহৃত হলে তা গুপ্ত নয় But তবে আপনি যদি না চান, সেগুলি ব্যবহার করবেন না))

আপনার মাথা আঁচড়ানো স্ক্রিনের দিকে তাকাতে এমন স্টাফ।

হ্যাঁ, আমি অনুভূতি জানি। আমি প্রথম যখন এমভিভিএম দেখলাম তখন ঠিক কী অনুভব করছিলাম। তবে একবার আপনি এটির হ্যাঙ্গ পেয়ে গেলে, এটি আর খারাপ লাগবে না।

আমার একটা বাক্স ঠিকঠাক কাজ করছিল ...

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

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

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

সম্পাদনা:

এখানে একটি খুব সুন্দর ভিডিও যার শিরোনামটি আপনার নিজের এমভিভিএম কাঠামো তৈরি করুন । এটা দেখার মতো।


4
শেষ তিনটি শব্দের জন্য +1। তবে বাকি উত্তরটিও ভাল। :)
রবার্ট হার্ভে

13
কোড-ব্যাক ব্যবহার সম্পর্কে পরামর্শের জন্য +1। এটি একটি সাধারণ ভ্রান্ত ধারণা যে এমভিভিএম-তে কোড-ব্যাকড ব্যবহার করা "খারাপ" ... তবে খালি ইউআই-সম্পর্কিত স্টাফের জন্য, এটিই যাওয়ার উপায়।
টমাস লেভস্ক

4
@ থমাস: হ্যাঁ, আমি আর একমত হতে পারি না। আমি বেশ কয়েকটি বাস্তবায়ন দেখেছি যেখানে লোকেরা সমস্ত কোড (এমনকি ইউআই-সম্পর্কিত) ভিউমোডেলে রাখে, কারণ (তাদের মতে) "কোডটি সেখানে।" বেশ হ্যাক ছিল।
ভেনেমো

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

8
@ থমাস: আপনি ঠিকই বলেছেন, এমভিভিএম সম্পর্কে সবচেয়ে বড় মিথটি হ'ল এমভিভিএমের উদ্দেশ্য কোড-ব্যাক থেকে মুক্তি পাওয়া। উদ্দেশ্যটি হ'ল পিছনের কোডটির বাইরে নন-ইউআই ওসিডিকে বের করা। ভিউমোডেলটিতে কেবলমাত্র ইউআই-কোড রাখা কোড-পেছনে সমস্যা ডোমেন কোড রাখার মতোই খারাপ।
জিম রেইনারি

8

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

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

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

এমভিভিএম, এমভিসি, ডকুমেন্ট-ভিউ, ইত্যাদি হ'ল পুরানো পরিবারগুলির নিদর্শন There এখানে কিছু ত্রুটি রয়েছে তবে আপনি যেভাবে বর্ণনা করেছেন তার কোনও মারাত্মক ত্রুটি নেই।


5

PRISM ব্যবহার করে আমি বেশ জটিল এমভিভিএম বিকাশের মাঝখানে আছি তাই আমাকে ইতিমধ্যে এই ধরণের উদ্বেগ মোকাবেলা করতে হয়েছিল।

আমার ব্যক্তিগত সিদ্ধান্ত:

এমভিভিএম বনাম এমভিসি / পপআপস এবং কো

  • এমভিভিএম সত্যিই দুর্দান্ত প্যাটার্ন এবং বেশিরভাগ ক্ষেত্রে এটি ডাব্লুপিএফ-তে শক্তিশালী ডেটা বাইন্ডিংয়ের জন্য এমভিসি ধন্যবাদকে পুরোপুরি প্রতিস্থাপন করে
  • উপস্থাপক থেকে সরাসরি আপনার পরিষেবা স্তরকে কল করা বেশিরভাগ ক্ষেত্রে বৈধ বাস্তবায়ন
  • এমনকি বেশ জটিল তালিকা / বিশদ বিবরণগুলি শুদ্ধ এমভিভিএম দ্বারা প্রয়োগ করা যেতে পারে {বাইন্ডিং পাথ = /} বাক্য গঠনকে ধন্যবাদ
  • তবুও, যখন একাধিক মতামতের মধ্যে জটিল সমন্বয় কার্যকর করা দরকার তখন বাধ্যতামূলকভাবে একটি নিয়ামক
  • ইভেন্টগুলি ব্যবহার করা যেতে পারে; পুরানো প্যাটার্ন যা নিয়ামকটিতে আইভিউ (বা অ্যাবস্ট্রাক্টবার্সার) উদাহরণগুলি সংরক্ষণ করে তা অপ্রচলিত
  • নিয়ন্ত্রক আইওসি পাত্রে প্রতিটি উপস্থাপক ইনজেকশন করা যেতে পারে
  • প্রিজমের আইভেন্টএগ্রিগেটর পরিষেবাটি অন্য সম্ভাব্য সমাধান হ'ল যদি নিয়ামকের একমাত্র ব্যবহার ইভেন্ট প্রেরণ করা হয় (এই ক্ষেত্রে এটি সম্পূর্ণরূপে নিয়ামককে প্রতিস্থাপন করতে পারে)
  • যদি মতামতগুলি গতিশীলভাবে তৈরি করতে হয়, তবে এটি নিয়ামকের জন্য খুব উপযুক্ত একটি কাজ (প্রিজমে কন্ট্রোলার ইনজেকশন পাবেন (আইওসি) একটি আইআরজিওন ম্যানেজার)
  • বাধ্যতামূলক নিশ্চিতকরণের মতো সত্যিকারের অবরুদ্ধকরণ ব্যতীত আধুনিক সংমিশ্রণ অ্যাপ্লিকেশনগুলিতে মডেল ডায়ালগ বাক্সগুলি বেশিরভাগই অপ্রচলিত; এই ক্ষেত্রে মডেল অ্যাক্টিভেশনটিকে নিয়ন্ত্রণকারীর ভিতরে ডাকা একটি পরিষেবা হিসাবে বিমূর্ত করা যায় এবং একটি বিশেষ শ্রেণীর দ্বারা প্রয়োগ করা হয়, যা উন্নত উপস্থাপনা-স্তর ইউনিট পরীক্ষার জন্যও অনুমতি দেয়। কন্ট্রোলার, উদাহরণস্বরূপ, আইকনফায়ারেশন সার্ভিসকে কল করবেন eRequestConfirration ("আপনি নিশ্চিত") যা রানটাইমের সময় একটি মডেল ডায়ালগ ডিসপ্লে ট্রিগার করবে এবং ইউনিট পরীক্ষার সময় সহজেই উপহাস করা যায়

5

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

//Wrapper interface for dialog functionality to allow for mocking during tests
public interface IWindowServices
{
    bool ExecuteNewProject(NewProjectViewModel model);

    bool ExecuteImportSymbols(ImportSymbolsViewModel model);

    bool ExecuteOpenDialog(OpenFileDialog dialog);

    bool ExecuteSaveDialog(SaveFileDialog dialog);

    bool ExecuteWarningConfirmation(string text, string caption);

    void ExitApplication();
}

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

একটি বৃহত্তর অ্যাপ্লিকেশনটির জন্য আরও 'খাঁটি' এমভিভিএম নকশা গুরুত্বপূর্ণ হতে পারে, যেখানে আপনার ক্লিনার নিরোধক এবং আরও জটিল রচনা প্রয়োজন, তবে ছোট থেকে মাঝারি আকারের অ্যাপ্লিকেশনগুলির জন্য, আমি মনে করি যে প্রয়োজনীয় হুকগুলি প্রকাশের জন্য উপযুক্ত পরিষেবাগুলি সহ একটি ব্যবহারিক পদ্ধতির যথেষ্ট যথেষ্ট sufficient ।


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

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

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

5

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

নকশার নিদর্শনগুলি কখনই কৌতুকপূর্ণভাবে অনুসরণ করা যায়নি।


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

1

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

সংক্ষেপে: এমভিভিএম অর্থহীন নয়, দুর্দান্ত। নেট 4.0 ডাব্লুপিএফ এর নিয়ন্ত্রণ লাইব্রেরি ট্র্যাশ।

এখানে ধারণার ভিউমোডেলের সহজ প্রমাণ যা আপনি ডাব্লুপিএফ ব্যবহার করে খাঁটি এমভিভিএম পদ্ধতিতে ডেটা বাঁধতে পারবেন না।

public class PersonsViewModel
{
    public IList<Person> PersonList;
    public IList<ColumnDescription> TableColumns;
    public IList<Person> SelectedPersons;
    public Person ActivePerson;
    public ColumnDescription SortedColumn;
}

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


আপনি রূপান্তরকারীদের সাথে এটি একটি ডেটাগ্রিডে বাঁধতে পারেন।
ক্যামেরন ম্যাকফারল্যান্ড

@ ক্যামেরনম্যাকফারল্যান্ড: সমস্ত কিছু নয়, কিছু সম্পত্তি কেবল পাঠযোগ্য এবং অবিচলিত হয়, কিছু কিছু সহজভাবে বিদ্যমান থাকে না এবং কেবলমাত্র এমন ঘটনা ঘটে যা রাষ্ট্রীয় পরিবর্তনের রিপোর্ট করে।
অ্যালেক্স বার্টসেভ

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

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

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

0

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

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


-1

(মোডাল) ডায়ালগ আসে যখন আমি একই সাথে অনেকগুলি এমভিভিএম বাস্তবায়ন নিয়ে দেখেছি। আমি যখন এমভিভিএম প্যাটার্নের অংশগ্রহণকারীদের দিকে তাকাই তখন আমার অনুভূতি হয় যে সুসংগত অ্যাপ্লিকেশনটি তৈরি করতে কিছু অনুপস্থিত।

  • ভিউতে নির্দিষ্ট জিইউআই নিয়ন্ত্রণ থাকে এবং ব্যবহারকারীর ইন্টারফেসের উপস্থিতি সংজ্ঞায়িত হয়।
  • ভিউমোডেল উপস্থাপনাটির অবস্থা এবং আচরণের প্রতিনিধিত্ব করে।
  • মডেলটি ডোমেন স্তর বা কোনও পরিষেবা যা কোনও প্রয়োজনীয় তথ্য সরবরাহ করে তা থেকে ব্যবসায়িক অবজেক্ট হতে পারে।

তবে নিখোঁজ হ'ল:

  • ভিউমোডেলস কে তৈরি করে?
  • অ্যাপ্লিকেশন কর্মপ্রবাহের জন্য দায়ী কে?
  • যখন ভিউমোডেলগুলির একে অপরের সাথে যোগাযোগের প্রয়োজন হয় তখন তাদের মধ্যে মধ্যস্থতা করে?

আমার পদ্ধতির একটি (ব্যবহার-কেস) নিয়ামক প্রবর্তন করা যা অনুপস্থিত পয়েন্টগুলির জন্য দায়ী। এটি কীভাবে কাজ করে তা ডাব্লুপিএফ অ্যাপ্লিকেশন ফ্রেমওয়ার্ক (ডাব্লুএএফ) নমুনা অ্যাপ্লিকেশনগুলিতে দেখা যায়।


জোস স্মিথ দ্বারা প্রয়োগ করা মধ্যস্থতা প্যাটার্নটি আমার সমস্ত ভিউ মডেল যোগাযোগের সমস্যার সমাধান করেছে। ম্যাসেঞ্জার.নোটেফাইড কলেজগুলি সম্পূর্ণরূপে স্বতন্ত্র ভিউ মডেলগুলি রাখার একটি উপায় প্রদান করেছিল যা কীভাবে বিশ্বব্যাপী ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে জানত (যদি তারা যত্নশীল হয়) তবে কোনও দুটি ভিউ মডেল একে অপরকে সম্পর্কে জানে না। এটি ইতিমধ্যে কয়েকবার আমাদের বেকন সংরক্ষণ করেছে।
জেসনডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.