মোটা মডেল বনাম। ব্যবসায় যুক্তি, আপনি কোথায় পার্থক্য আঁকেন?


16

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

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

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


tl; dr: কোনও ওআরএম ব্যবহার করার সময় ম্যাপযুক্ত শ্রেণিতে কোন ধরণের জিনিসগুলি কোনও পদ্ধতিতে যেতে পারে বা হওয়া উচিত এবং কী কী বিসর্জন দেওয়া উচিত, বিমূর্তির অন্য স্তরে থাকতে?


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

উত্তর:


10

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

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

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


+1, আপনার উত্তরের দ্বিতীয় অংশের জন্য। প্রথম অংশ হিসাবে, আমি নিশ্চিত আপনি কেন বলছেন যে রক্তাল্পতা ডোমেন মডেলটির পরিবর্তনের ক্ষেত্রে এত বেশি 'অতিরিক্ত' কাজ প্রয়োজন। আমার বোধগম্যতাটি পরিবর্তনটি যে কোনও উপায়েই ঘটবে তবে বিভিন্ন শ্রেণিতে (যা খারাপ ধরনের) তবে এটি প্রায় একই পরিমাণের পরিবর্তন; আমি অনুমান করি?
NoChance

1
@ এমদাদ কেরেম: মন্তব্যটি ছিল স্পষ্টত অধ্যবসায় এবং ডোমেন মডেলগুলি সম্পর্কে। মডেলটিতে একটি সম্পত্তি যুক্ত করার পরে এটি দুটি মডেল শ্রেণিতে (একের পরিবর্তে) যুক্ত করার পাশাপাশি তাদের মধ্যে যে কোনও মানচিত্রের সাথে যুক্ত করা প্রয়োজন (যা তাত্ত্বিকভাবে স্বয়ংক্রিয় হতে পারে, তবে সাধারণত যে আসহাত ভাবেন এটি আলাদা ধারণা রাখাই ভাল ধারণা ছিল "অধ্যবসায় মডেল" আলাদা করে আলাদা করে তাদের ন্যায়সঙ্গত করার সিদ্ধান্ত নেয়, উদাহরণস্বরূপ, ডিবি টাইপ মডেলটির সাথে আরও বেশি ঘনিষ্ঠভাবে মিলছে এমন ডেটাটাইপগুলি রয়েছে) যাতে পরিবর্তনের পরিমাণ 2 + এক্স গুন হয়, অস্পষ্টতার কারণে X 0 ও ঘন্টা হারিয়ে যাওয়া উত্পাদনশীলতার সাথে সমস্যা ম্যাপিং
মাইকেল বর্গওয়ার্ট

3

এটি একটি রায় কল যা আপনার প্রত্যাশিত আকার এবং আপনি কী বিকাশ করছেন তার স্কেল নির্ভর করে। সর্বাধিক অনমনীয় পন্থা হ'ল ORM প্রকারগুলিকে কোনও ডেটা অ্যাক্সেস উপাদানগুলিতে সীমাবদ্ধ করা এবং সাধারণ লাইব্রেরিতে POCOs ব্যবহার করে সমস্ত স্তর দ্বারা রেফারেন্সযুক্ত এবং ব্যবহৃত প্রকারগুলি। এটি ভবিষ্যতের শারীরিক বিভাজনের পাশাপাশি যৌক্তিক পৃথকীকরণের অনুমতি দেবে allow আপনি আরও সিদ্ধান্ত নিতে পারেন যে ইউআই এবং ব্যবসায় যুক্তিযুক্ত স্তরটির মধ্যে একটি অতিরিক্ত স্তর থাকা উচিত। এটিকে সাধারণত ফ্যাসাদ বা বিজনেস ইন্টারফেস স্তর বলা হয়। এই অতিরিক্ত স্তরটি যেখানে আপনার "ব্যবহারের ক্ষেত্রে কোড" বাস করে। স্বতন্ত্রভাবে আলগাভাবে সংযুক্ত কোডটি ফেসিড / বিআই স্তর দ্বারা ডাকা হয় (উদাহরণস্বরূপ ফাকেডের একটি প্রসেসআর্ডার () ফাংশন রয়েছে যা ব্যবসার লজিককে 1: এম বারে অর্ডারটি প্রক্রিয়া করার জন্য প্রয়োজনীয় সমস্ত পদক্ষেপগুলি সম্পাদনের জন্য ডেকে আনে)।

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


3

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

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


1

অন্যান্য জবাব ছাড়াও, কোনও ওআরএম সহ সমৃদ্ধ ডোমেন মডেলগুলি ব্যবহার করার সময় লুকানো গুহাগুলিতে মনোযোগ দিন।

নিম্নলিখিত সিউডোকোডের মতো কিছু অর্জন করার চেষ্টা করার সময় আমি অবিরাম মডেল ক্লাসে পলিমারফিক সার্ভিসগুলি ইনজেকশন দেওয়ার সমস্যা পেয়েছিলাম:

Person john = new Person('John Doe')
Organisation company = organisation_repository.find('some id')
Employee our_collegue_john = company.hire(john)

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

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

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