জটিল অবজেক্ট মডেলগুলির জন্য কীভাবে আমার সংগ্রহস্থল প্যাটার্নটি প্রয়োগ করা উচিত?


21

আমাদের ডেটা মডেলটিতে প্রায় 200 ক্লাস রয়েছে যা প্রায় এক ডজন কার্যকরী অঞ্চলে পৃথক করা যায়। ডোমেনগুলি ব্যবহার করে ভাল লাগত তবে বিচ্ছেদটি এতটা পরিষ্কার নয় এবং আমরা এটি পরিবর্তন করতে পারি না।

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

প্রতিটি ক্রিয়াকলাপের জন্য ইউনিট অফ ওয়ার্ক এবং প্রতিটি সত্তার জন্য একটি সংগ্রহশালা তৈরি করা কি সত্যিই প্রয়োজনীয়? আমি হাজার হাজার ক্লাস শেষ করতে পারে। আমি জানি যে এটি অযৌক্তিক, তবে আমি জটিল মডেল এবং বাস্তববাদী ব্যবসায়িক অ্যাপ্লিকেশনগুলির তুলনায় রেপোজিটরি, ইউনিট অব ওয়ার্ক এবং সত্তা ফ্রেমওয়ার্ক বাস্তবায়ন করার খুব কম গাইডেন্স পেয়েছি।

উত্তর:


6

প্রথমে, আপনার কাছে থাকা প্রতিটি সত্তার মধ্য দিয়ে আপনি নিজেকে চালিয়ে যাবেন এবং নিজেকে জিজ্ঞাসা করবেন:

এই সত্তাকে একা ধরে রাখা কি বোধগম্য?

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

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


দুর্দান্ত লিঙ্ক! আমি এটি পরীক্ষা করে দেখছি।
এরিক ফালসকেন

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

সত্তা ফ্রেমওয়ার্ক, লেনদেনের ব্যবহার সহ, ইতিমধ্যে ওয়ার্কের প্যাটার্নের ইউনিট একটি বাস্তবায়ন।
গ্রেগ বার্গার্ট

1
লিঙ্কটি মারা গেছে ...
নিউটোপিয়ান

3

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

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


0

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

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

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

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

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

উদাহরণস্বরূপ, আপনি ডাটাবেসে ওয়ার্কের ইউনিটকে প্রতিফলিত করার বিষয়ে চিন্তাভাবনা করেন (টেবিল বা টেবিল হিসাবে, আমি অনুমান করি)। কাজ একক : একটি বিল্ট-ইন DBMS এর সেবা begin transaction... আপডেট ডাটাবেস ... commit transaction। মডেল হিসাবে কিছুই নয়, এসকিউএল ডাটাবেস টেবিলগুলিতে আপনার ক্লাসগুলির ম্যাপিং ব্যতীত।

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

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