এমভিভিএমের ব্যাখ্যা


15

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

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

এএসআই আর্কিটেকচার

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

আমরা যে বিষয়ে নিশ্চিত নই তা হ'ল আমাদের বিজনেসলজিক উপাদান। Orতিহাসিকভাবে এটি জিইউআইয়ের পক্ষে ভিউগুলিতে নিয়ন্ত্রণ স্থাপনের জন্য কল করার জন্য ফাংশন সরবরাহ করবে (যেমন, গেটকাস্টমারলিস্ট যা গ্রাহক সামগ্রীর একটি তালিকা বা সাধারণ সিআরইউডি ফাংশন ফিরিয়ে আনবে)।

আমাদের কাছে প্রধান হ্যাং আপটি হ'ল এমভিভিএম প্যাটার্নটি ভিউমোডেলগুলি রাখার জন্য কোনও অতিরিক্ত উপাদান তৈরি করার আহ্বান জানায় বা আমরা যদি কেবল আমাদের চিন্তাভাবনা পরিবর্তন করি এবং ভিউমোডেলগুলিতে আমাদের বিজনেসলজিক উপাদান হিসাবে যা ব্যবহার করেছি তা স্থানান্তর করতে পারি?

আমাদের BusinessLogic উপাদানটি ভিউমোডেলগুলি উপস্থাপন করে?


এটি সমস্যার সন্ধানের মতো সমাধানের মতো মনে হচ্ছে। আপনি এমভিভিএম এ চলে যাচ্ছেন এমন কোন বাধ্যবাধকতা আছে কি? আমি প্যাটার্নের একটি ফ্যান কিন্তু আপনার কি পূর্ববর্তী সমাধানটি কাজ করছে না? ভিউ মডেলটি তদারকি উপস্থাপকের মতো। এতে ডেটা বাইন্ডিংয়ের মাধ্যমে উপস্থাপনা যুক্তি এবং পৃষ্ঠতল ডেটা রয়েছে। এটি আপনার ব্যবসায়ের যুক্তি সম্পর্কে জানতে হবে এবং সেই স্তরের দিকে পৌঁছাতে সক্ষম হবে, তবে আমি নিজেই ভিউ মডেলটিতে ব্যবসায়িক যুক্তি ভেঙে ফেলব না।
জেরেমি লাইকনেস

উত্তর:


19

সাধারণভাবে, আমি ব্যবসার যুক্তিটি ভিউ মডেল স্তরে রাখব না। তবে "বিজনেস লজিক" শব্দটি বিভ্রান্তিকর।

এরিক ইভান্স এমন একটি মডেল ব্যবহার করে যেখানে ব্যবসায়িক যুক্তি দুটি বিভাগে বিভক্ত

  • ডোমেন যুক্তি - আপনি যে সমস্যাটি সমাধান করছেন তাতে যুক্তি যুক্ত
  • অ্যাপ্লিকেশন যুক্তি - আপনি একটি অ্যাপ্লিকেশন নির্মাণ করছেন যে সত্য সম্পর্কিত যুক্তিযুক্ত

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

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

CSV আমদানি / রফতানির মতো অ্যাপ্লিকেশন বিধিগুলি ভিউ মডেল স্তরে যেতে পারে । তবে ব্যক্তিগতভাবে, আমি এটিকে আলাদা অ্যাপ্লিকেশন লজিক স্তরে আলাদা করতে পছন্দ করব।

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

ব্যক্তিগতভাবে আমি নিশ্চিত করব যে ভিউ মডেল স্তরটিতে কেবলমাত্র এক ধরণের যুক্তি, উপস্থাপনা যুক্তি রয়েছে।


1
দুর্দান্ত উত্তর। ভিউমোডেলটিতে কেবল উপস্থাপনা যুক্তি রয়েছে তা নিশ্চিত করার বিষয়টি আমি পছন্দ করি। আপনি কি এরিক ইভান্স পয়েন্ট সম্পর্কিত কোনও লিঙ্ক যুক্ত করতে পারেন?
user7676

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

5

হ্যাঁ.

ব্যবসায়ের লজিক স্তরটি ভিএম স্তর দ্বারা প্রতিনিধিত্ব করা হয়। সুতরাং আপনার মানসিক মডেলটি কেবল স্থানান্তর করুন।

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

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

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

দ্বিতীয় ক্ষেত্রে (বোতাম ক্লিক ইভেন্ট), পরিবর্তন (ক্লিক) ইভেন্টটি ভিএম দ্বারা প্রকাশিত একটি ফাংশন কলের সাথে তারযুক্ত হতে পারে।

যেভাবেই হোক না কেন, এটি সর্বদা এমন একটি ইভেন্ট যা ভিএম এর সাথে ক্রম ঘটে যা এরপরে ডাল / ডিবি কল করে এমন মডেলকে কল করে।

আমি এটি এনেছি কারণ কিছু উইনফর্ম কোড উইনফর্ম জিইআইয়ের কোড-পিছন থেকে সরাসরি ডিবি স্তরটিতে কল করতে ব্যবহৃত হয়। এই পদ্ধতির এমভিভিএম সরবরাহ করছে এমন বিচ্ছেদকে ভেঙে দেয়।


নিশ্চিত করার জন্য ধন্যবাদ. আমরা ভিউমোডেলের সাথে কীভাবে ইন্টারঅ্যাক্ট করে এবং বাইন্ডিং মডেলটিকে ধরে রাখি এবং "কলিং" কে ড্রপ করব তার সংক্ষিপ্তসারটি আমরা বুঝতে পারি।
user7676

আমি লক্ষ্য করেছি যে এই উত্তরটি একটি ভোট হারিয়েছে। আমি কৌতূহল হব যদি ডাউনটা লোকটি কেন মন্তব্য করবে? অথবা সম্ভবত তারা নিজের উত্তর যুক্ত করুন যদি তারা এই দৃষ্টিকোণটি ভাগ না করেন।
ব্যবহারকারী7676

1
আমি সম্মত হই যে ব্যবসায়ের লজিক স্তরটি ভিএম স্তর দ্বারা প্রতিনিধিত্ব করা হয়েছে, তবে আমি মনে করি আপনার উত্তরের অংশগুলি বিভ্রান্ত হতে পারে। Viewলেয়ার ViewModel বা মডেল একটি দৃশ্যগত উপস্থাপনা হতে, তাই বদলে বলছে ক্লিক ঘটনা VM- র উপর একটি ফাংশন কল করার ওয়্যার্ড হয় বোঝানো হয়, একটি ভাল সংজ্ঞা VM- র মধ্যে কমান্ড বলতে হবে একটি বোতাম হিসাবে অনুষ্ঠিত পরার ভিউ স্তর এছাড়াও, আমি সাধারণত আমার মডেল স্তরটি সরাসরি ডএল অ্যাক্সেস করতে সক্ষম হওয়া পছন্দ করি না, তাই আমার অ্যাপ্লিকেশন প্রবাহটি সাধারণত যায় VM -> DAL -> DB, যেখানে VMএবং DALউভয়ই প্লেইন Modelডেটা অবজেক্ট ব্যবহার করে ।
রাহেল

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

1
@ সিমোরামন - এমভিপিভিএম প্যাটার্নটি আপনার প্রস্তাব অনুসারে সারিবদ্ধ হয়েছে। আমি মনে করি এমভিপিভিএম একটি ভাল প্যাটার্ন তবে ছোট অ্যাপ্লিকেশনগুলির জন্য এটি কিছুটা ভারী। আমি আপনাকে সত্যিই উত্সাহিত করব আপনার চিন্তাভাবনার উত্তরের জন্য এবং এই প্রশ্নে অবদান রাখতে।

5

আপনি ঠিক বলেছেন যে আপনি মূলত আপনার ভিউমোডেল স্তরটির সাথে আপনার BusinessLogic dll প্রতিস্থাপন করবেন, তবে আমি মনে করি আপনি যে সবচেয়ে বড় পার্থক্যের মুখোমুখি হবেন তা হল ভিউ / ইউআই স্তরটি কীভাবে আপনার ভিউমোডেল / বিজনেসলজিক স্তরটির সাথে ইন্টারেক্ট করে।

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

উদাহরণস্বরূপ, উইনফোর্ডস সহ আপনার একটি ডেটাগ্রিড এবং একটি বোতাম থাকতে পারে এবং আপনি সেই বোতামটি ক্লিক BusinessLogicLayer.GetProducts()করার পরে ফলাফলগ্রাহী পণ্যগুলি ডেটাগ্রিডে লোড এবং লোড করুন।

ডাব্লুপিএফের সাথে আপনার একটি ভিউমোডেল থাকবে যাতে একটি ObservableCollection<Products>এবং একটি থাকে এবং ICommand GetProductsকমান্ডটি কার্যকর করে ডএএল কল করে এবং পণ্যগুলির সংগ্রহ লোড করে। তবে এর জন্য ব্যবহারকারী-বান্ধব ইন্টারফেস সরবরাহ করতে আপনি এমন একটি ভিউ তৈরি করবেন যা পণ্য সংগ্রহের জন্য ডেটাগ্রিড এবং গেটপ্রডাক্টস কমান্ডের জন্য একটি বোতাম ব্যবহার করে আপনার ভিউমোডেলকে রেন্ডার করে।

আমি আমার ব্লগে উইনফরম থেকে ডাব্লুপিএফ-তে যাওয়ার সময় মানসিকতার পরিবর্তন সম্পর্কে আমার ব্লগের পক্ষে একটি মোটামুটি সাম্প্রতিক পোস্ট লিখেছিলাম এবং আমি মনে করি পার্থক্য সংক্ষিপ্ত করার সর্বোত্তম উপায় এই ছবিগুলির সাথে:


1
আমি গ্লেনএইচ 7 এর সাথে একমত, ডাব্লুপিএফ দিয়ে শুরু করা কারও পক্ষে এটি একটি ভাল উত্তর। আমরা ভিউ এবং ভিউমোডেলের মধ্যে মিথস্ক্রিয়াটির দৃষ্টান্তের শিফটটি পাই তাই এটি যে প্রশ্নটি করেছিল তা আসলেই ছিল না।
ব্যবহারকারী7676
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.