এমভিসি সিস্টেমে ডাটাবেস অধ্যবসায় কোডটি কোথায় বসে উচিত?


21

আমি ডাটাবেসে অবিচ্ছিন্ন তথ্যের জন্য একাধিক কনফিগারেশন দেখেছি। সাধারণত, আমার বিশ্বের কোণে তিন ধরণের ডিজাইন সাধারণ মনে হয়:

  • নিয়ামক অধ্যবসায় পরিচালনা করে
  • মডেল অধ্যবসায় পরিচালনা করে
  • তৃতীয় পক্ষের লাইব্রেরি অধ্যবসায় পরিচালনা করে, সাধারণত মডেলটিতে কিছু ধরণের টিকা প্রয়োজন।

আমি ভাবছি কোন কনফিগারেশন (যদি কোনও হয়), ধারণামূলকভাবে, কোনও এমভিসি আর্কিটেকচারের সাথে ব্যবহার করা সবচেয়ে সহজ / সবচেয়ে উপযুক্ত?

(এটি যদি আমি তালিকাভুক্ত না হয় তবে দয়া করে উত্তরের অংশ হিসাবে একটি দ্রুত রূপরেখা / ওভারভিউ দিন)

উত্তর:


13

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

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


2
আমি একটি নির্দিষ্ট পরিমাণে অসমত। দৃistence়তার কংক্রিট ব্যবহার হ'ল অ্যাপ্লিকেশন লজিক এবং এটি কোনও অ্যাপ্লিকেশন লেয়ারের সাথে সম্পর্কিত এবং ডোমেন স্তরটিতে নয়। ডোমেন স্তর (ডোমেন মডেলযুক্ত) নৈমিত্তিক ব্যবসায়িক প্রোগ্রামের জন্য অধ্যবসায় অজ্ঞ থাকতে হবে। নিয়ামক একজন অর্কেস্টেটর । এটি (তথ্য-) পরিষেবাগুলি, ইউআই এবং ডোমেন মডেলকে অর্কেস্ট্রেট করতে পারে।
ফ্যালকন

1
@ ফ্যালকন: ডেটাবেস থেকে ডেটা লোড করা এবং অব্যাহত রাখার সময় নিয়ন্ত্রকের নিয়ন্ত্রণ করা উচিত , এটি মডেলকে এটি করার জন্য বলা ঠিক হবে perfectly একটি ওআরএম (স্ট্যান্ডার্ড বা রোল-আপনার নিজের) ব্যবহার করার অর্থ সাধারণত মডেলটিকে লোড / সেভ করতে বলা হয় যা তারপরে ওআরএমকে প্রতিনিধিত্ব করে। আর একটি উপায় হতে পারে নিয়ামক কোনও ওআরএমকে লোড করার জন্য কোনও কিছু লোড / সেভ করার জন্য বলতে বাছাই করতে (নির্বাচনের মানদণ্ড সহ) বা সংরক্ষণের জন্য মডেল উদাহরণটি ব্যবহার করতে পারে। যেভাবেই হোক, আসল লোডিং / সেভিংসটি আন্তরিকভাবে মডেলের সাথে আবদ্ধ হবে।
মার্জন ভেনেমা

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

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

5

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

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

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

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


3

একটি এমভিসি (মডেল-ভিউ-কন্ট্রোলার) সিস্টেমে, মডেলটিতে ডেটা থাকে। সুতরাং আমি বিশ্বাস করি, এটিতে ডাটাবেসের অধ্যবসায় থাকা উচিত।


2

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


0

এমভিসিতে স্ট্যান্ডার্ড অনুশীলন হ'ল এম (ওডেল) স্তরে ডেটা কাঠামো এবং অধ্যবসায় অন্তর্ভুক্ত করা।

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

উদাহরণ হ'ল একটি সংগ্রহস্থল যেখানে আপনার কাছে ডেটা ক্লাসের উদাহরণ রয়েছে, যেমন:

Clients repository

AllClients()
RecentClients()
ClientByID(int id)

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

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