ডাটাবেস টেবিল প্রতি মডেল?


11

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

মডেল প্রতি নিয়ামকের পরিবর্তে বা বেশ কয়েকটি ছোট ছোট মডেল যা ভাগ করে নেওয়া হয়েছে।

উদাহরণস্বরূপ যদি আমার কাছে একটি মডেল পদ্ধতি get_user ($ user_id) থাকে তবে আমি এটি ব্যবহারকারী_মোডালস.এফপিতে লিখতে পারতাম ...

এর যে ডাউনসাইডগুলি আমি দেখছি তার মধ্যে একটি হ'ল আমাকে কেবল কন্ট্রোলার নাম_মোডেলস.এফপি না দিয়ে বেশ কয়েকটি মডেল কল করতে হতে পারে।

নিয়ামক থেকে বেশ কয়েকটি পদ্ধতি ব্যবহার না করা যেতে পারে এমন কয়েকটি মডেল লোড করা পারফরম্যান্স এবং গতিকে প্রভাবিত করে? এটিকে মোকাবেলা করার সর্বোত্তম উপায় কী হতে পারে?

দ্রষ্টব্য: অনুরূপ প্রশ্ন রয়েছে, তবে তারা প্রতি ডাটাবেস সারণীতে মডেলের ভিত্তিটি জুড়ে না।

উত্তর:


8

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


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

1
উদাহরণস্বরূপ, "অ্যানিমিক মডেল" সলাইডের আনুগত্যযোগ্য - একক উদ্দেশ্য (স্টোর ডেটা) সহ কোনও বস্তু থাকা কি সত্যই খারাপ? মিঃ ফোলার যা বলেছে আমি তার অনেক কিছুই সম্মান করি না, যদিও এটি ছিল বুলশিট।
টি। সার

7

সাধারণভাবে আপনি আপনার মডেলগুলি প্রতি টেবিল বা প্রতি নিয়ামক হিসাবে নয় বরং ব্যবসায়িক সামগ্রীতে প্রতি তৈরি করতে হবে। কখনও কখনও এটি আপনার টেবিলগুলির কাঠামোর সাথে বা আপনার নিয়ন্ত্রকদের সাথে 1: 1 সম্পর্ক তৈরি করে তবে এটি প্রয়োজনীয় নয়।

আপনার উদাহরণে আপনার কাছে একটি users_modelক্লাস থাকতে পারে যা বেশ কয়েকটি নিয়ামক দ্বারা ডেকে আনা হয়েছে। এটি সূক্ষ্ম এবং কখনও কখনও এমনকি আকাঙ্ক্ষিত। তবে বেশিরভাগ ক্ষেত্রে users_modelক্লাসটি বিভিন্ন টেবিল থেকে তার ডেটা পাবে।
উদাহরণস্বরূপ, last_login_dateসম্পত্তির users_modelশ্রেণী (করতে না ) একটি পৃথক থেকে প্রাপ্ত করা user_auditটেবিল একের সাথে অধিকের প্রধান সঙ্গে সম্পর্ক আছে usersটেবিল।

এবং আমি বলব যদি আপনার প্রতি ব্যবসায় সামগ্রীতে একটি এসকিউএল টেবিল থাকে তবে সম্ভবত আপনার ডাটাবেস কাঠামোটি সাধারণীকরণ না করা সম্ভবত।


3

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

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

এটি মার্জান ভেনিমার উত্তরের প্রথম অংশকে নিয়ে যায়:

আমি বলছি যে টেবিল প্রতি মডেল কেবল শ্রেণিক কাঠামোয় আপনার ডাটাবেস পুনরায় তৈরি করছে। এটি অ্যানিমিক মডেল হিসাবে পরিচিত এবং একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচিত।

একটি রক্তহীন ডোমেন মডেল বিরোধী প্যাটার্ন। ভেনেমার পরামর্শ অনুসারে একটি "প্রতি টেবিলে মডেল" কে "আপনার ডাটাবেস পুনরায় তৈরি করা" হিসাবে দেখা যেতে পারে, তবে এটি একা এনেমিক ডোমেন মডেল বলা একেবারেই ভুল।

মার্টিন ফাউলারের কাছ থেকে:

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

(জোর, আমার)

অ্যানিমিক ডোমেন মডেলের মূল কারণটি হ'ল ডোমেন মডেল ক্লাসগুলিতে আচরণের বা পদ্ধতির অভাব।

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

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

এবং উত্তরটি একটি সমষ্টিগত রুট । মার্টিন ফওলার বলেছেন:

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

(জোর, আমার)

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

আবার, মার্টিন ফাউলারের কাছ থেকে:

একটি সমষ্টিতে প্রায়শই সরল ক্ষেত্রগুলির সাথে একসাথে বহুবিধ সংগ্রহ থাকে।

ওপির মূল প্রশ্নের উত্তর দিতে:

... প্রতি ডাটাবেস সারণীতে একটি মডেল তৈরি করা ভাল অনুশীলন হিসাবে বিবেচিত হবে? এই পদ্ধতিতে দু'বার লেখা হয় না।

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

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

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