চর্বিযুক্ত মডেল এবং চর্মসার নিয়ন্ত্রকগুলি গড মডেল তৈরি করার মতো শোনায় [বন্ধ]


91

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

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

আপনি কোথায় রেখা আঁকেন? এটি কি কেবল Godশ্বরের প্যাটার্নে পড়ে না?

উত্তর:


137

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

কিছু তত্ত্ব

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

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

মডেল স্তরটি যে প্রধান অংশগুলি নিয়ে গঠিত সেগুলি হ'ল:

  • ডোমেন অবজেক্টস

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

  • স্টোরেজ বিমূর্ততা:

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

  • সেবা:

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

এই গোষ্ঠীগুলির মধ্যে ফাঁকা জায়গাগুলির মধ্যে বেশ কয়েকটি কাঠামো রয়েছে: ডিএও , কাজের ইউনিট এবং সংগ্রহশালা

ওহ ... এবং যখন আমরা এমভিসি অ্যাপ্লিকেশনটির সাথে ইন্টারঅ্যাক্ট করে এমন কোনও ব্যবহারকারী সম্পর্কে (ওয়েবের প্রসঙ্গে) কথা বলি , এটি কোনও মানুষ নয়। "ব্যবহারকারী" আসলে আপনার ওয়েব ব্রাউজার।

তাহলে দেবদেবীদের কী হবে?

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

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

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

নোট বন্ধ হচ্ছে

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

যদিও, মনে রাখবেন: এমভিসি ছোট অ্যাপ্লিকেশনগুলির জন্য নয়। আপনি যদি এমভিসি প্যাটার্ন ব্যবহার করে কোনও গেস্টবুক পৃষ্ঠা লিখছেন তবে আপনি এটি ভুল করছেন। এই প্যাটার্নটি বৃহত্তর অ্যাপ্লিকেশনগুলিতে আইন শৃঙ্খলা প্রয়োগের জন্য is

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


খুব দরকারী এবং সম্পূর্ণ উত্তর! আপনি কি এমন কোনও বই জানেন যা এমভিসি স্থাপত্য নিদর্শনকে আরও কিছুটা ব্যাখ্যা করে? বিশেষত মডেলদের অংশটির উপরে যে প্রত্যেকে ভুলবশত মনে করে "মডেল ডেটা উপস্থাপন করে এবং অন্য কিছুই করে না।" এবং এটি ডোমেন অবজেক্টের ধারণার মতোই মনে হচ্ছে, 'মডেল' -> tomdalling.com/blog/software-design/…
থার্মজ

4
@ মেহেরজ, আফাইক , সত্যিই এমন কোনও বই নেই যা একচেটিয়াভাবে এমভিসি প্যাটার্ন নিয়ে কাজ করে। আমি সাধারণত লোকেদের PoEAA পড়তে বলি , এবং তারপরে খনন করতে যাই। লিঙ্কগুলির এই তালিকাটি কার্যকর হতে পারে। আমি দেখতে পেলাম যে, যখন লোকেরা ওওপি নীতিগুলি এবং ধারণাগুলির উপর দৃ gra় উপলব্ধি করে, তখন প্যাটার্নটি বোঝা সহজ হয়।
তেরেখো

@ tereško সুন্দর উত্তর। হাইবারনেট কি এটি অর্জন করে? আমি উত্তর এখানে দ্বারা বিশ্বাস করছি না -> stackoverflow.com/questions/1308096/...
Ankan-Zerob

@ অঙ্কন-জেরোব যেমন আপনি লক্ষ্য করতে পারেন, আমি জাভা বিকাশকারী নই, তবে হাইবারনেট সম্পর্কে যা জানি, তা থেকে এটি দৃ it়তা স্তরটির জন্য একটি সম্পূর্ণ টুলসেট সরবরাহ করে। এটা আপনি সেখানে কি বর্ণিত আছে তা অংশ দিতে হবে, কিন্তু না একটি সম্পূর্ণ মডেল স্তর।
tereško

4
@ জোহনি যতদূর আমি জানি না। পিএইচপি-র বেশিরভাগ তথাকথিত "এমভিসি ফ্রেমওয়ার্কগুলি" রেলগুলির বিভিন্নতা। এবং, কোর্সের অংশ হিসাবে, তাদের বেশিরভাগই সক্রিয় রেকর্ড ভিত্তিক ওআরএম সমাধানগুলি নিয়ে আসে (সেই বিষয়গুলি ডিবি পরিবর্তনের জন্য কুখ্যাতভাবে নাজুক)। আপনি করতে পারেন SF2.x বা ZF2.x সঙ্গে ভালো কিছু বাস্তবায়ন, কিন্তু একটি ফ্রেমওয়ার্ক বিন্দু বাস্তবায়ন না / সুনির্দিষ্ট আর্কিটেকচার জোরদার কিন্তু টুলস প্রদান করা হয়। এছাড়াও, যখন এটি এমভিসির ক্ষেত্রে আসে, তখন এটি অ্যাপ্লিকেশন কোড দ্বারা প্রয়োগ করা হয় ফ্রেমওয়ার্ক নয়।
tereško

5

যদি "মডেল" শ্রেণিগুলি খারাপভাবে হ্যাঁ প্রয়োগ করা হয় তবে আপনার উদ্বেগ প্রাসঙ্গিক। একটি মডেল শ্রেণীর ইমেল করা উচিত নয় (অবকাঠামোগত কাজ)।

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

দেখুন ==== নিয়ন্ত্রক ==== মডেল ---> ব্যবসায় প্রক্রিয়া স্তর -> মূল মডেল

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

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

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

কন্ট্রোলারকে এখনও সরাসরি বলা হলে বিপিএল বা কোর স্তরতে অবকাঠামোগত ক্লাস ইনস্ট্যান্ট করতে এবং ইনজেক্ট করতে হবে। ক্লাসিক অবজেক্ট মডেল ক্লাসগুলিতে একটি ব্যবসায়ের স্তর বা কমপক্ষে ক্লাস অর্কেস্ট্রিং কল থাকতে হবে। ওয়েল যাইহোক আমার "দেখুন" thats

MVC উইকি বিবরণ জেনেরিক মতের জন্য http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

একটি ছোট্ট ব্লগ যা এমভিসিতে "এম" সম্পর্কে কথা বলে। http://www.thedeveloperday.com/skinny-controllers/


4
আপনার মতামত ন্যায্যতা দেওয়ার পক্ষে যদি আপনি কমপক্ষে বিনয়ী হন তবে
ফিল সোয়াডি

-1

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

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