গণিত মূল্যবোধ এবং সরল পাঠ - আমার ডোমেন চালিত ডিজাইনের জন্য একটি তীব্র ব্যথা!


9

আমি প্রতিনিয়ত যে সমস্যার মুখোমুখি হই তা হ'ল ডেটা স্টোরের বিরুদ্ধে দক্ষতার সাথে কাজ করার সময় ডোমেন লজিক দ্বারা চালিত গণিত মানগুলি কীভাবে মোকাবেলা করা যায়।

উদাহরণ:

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

একটি সাধারণ দৃশ্যে, সবকিছু দুর্দান্ত কাজ করে: পরিষেবাটি রেপিকে পেজিং এবং বাছাইয়ের এক্সপ্রেশনগুলি প্রেরণ করে এবং রেপো ডিবি-র কাছে একটি কার্যকর জিজ্ঞাসা জারি করে।

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

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

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

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

উত্তর:


3

আমি মনে করি না যে একই ডেটা মডেলের দুটি ভিন্ন ডোমেন মডেল থাকা আপনার ডোমেনকে রক্তশূন্য করে তোলে। অ্যানিমিক ডোমেন মডেল হ'ল এমন একটি যেখানে ব্যবসায়ের যুক্তিগুলি প্রায়শই পরিবর্তিত হয় সেবার স্তর (বা, আরও খারাপ, ইউআই স্তরটিতে) ডোমেন থেকে দূরে থাকে।

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

ডোমেন মডেল প্যাটার্ন নিয়োগ, উদি দহন

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

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

[...]

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

আক্কা অভিনেতা এবং ফাংশনাল ডোমেন মডেলস দেবাসিশ ঘোষের সাথে সিকিউআরএস

গ্রেগ ইয়ং ডিডিডি এবং সিকিউআরএসে কিছু দুর্দান্ত সেশন বিতরণ করেছে। ২০০৮ সালে তিনি বলেছিলেন, "একক মডেল রিপোর্টিং, অনুসন্ধান এবং লেনদেনমূলক আচরণের জন্য উপযুক্ত হতে পারে না"। আমাদের কমপক্ষে দুটি মডেল রয়েছে - একটি হ'ল কমান্ডগুলি প্রক্রিয়াকরণ করে এবং অন্য মডেলটিতে পরিবর্তনগুলি ফিড করে যা ব্যবহারকারীদের অনুসন্ধান এবং প্রতিবেদনগুলি সরবরাহ করে। অ্যাপ্লিকেশনটির লেনদেনমূলক আচরণ সমষ্টি এবং সংগ্রহস্থলগুলির সমৃদ্ধ ডোমেন মডেলের মাধ্যমে কার্যকর করা হয়, যখন প্রশ্নগুলি সরাসরি ডি-নরমালাইজড ডেটা মডেল থেকে পরিবেশন করা হয়।

সিকিউআরএস, মার্টিন ফওলার

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

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


2

স্পেসিফিকেশন

আমি জানি আপনি ইতিমধ্যে একটি উত্তর গ্রহণ করেছেন, কিন্তু, আপনি ডিডিডি সম্পর্কে জিজ্ঞাসা করেছিলেন, এবং এর সঠিক মিলটি এভান্সকে একটি 'স্পেসিফিকেশন' বলে ডাকে:
সরাসরি গুগল বইগুলির লিঙ্কটি
যদি এই ফলাফলটিতে এই লিঙ্কটি বইটির জন্য অনুসন্ধান না করে তবে
আপনার যদি বইটি থাকে তবে এটি 226 পৃষ্ঠা।

227 পৃষ্ঠায় স্পেসিফিকেশনগুলির জন্য 3 টি ব্যবহার রয়েছে: বৈধকরণ, স্লেশন, একটি নতুন বিশেষ অবজেক্ট তৈরি করা। আপনার 'নির্বাচন' - ইস্পর্সিত।

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

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

সুতরাং উত্তরটি হ'ল লজিকের দুটি সেটকে একটি নির্দিষ্টকরণে রাখুন। ইন-মেমরি সংস্করণ, স্পষ্টতই, তবে একটি সংগ্রহস্থল সংস্করণও। যদি আপনি উদাহরণস্বরূপ এন-হাইবারনেট ব্যবহার করেন তবে আপনি এর বিল্ট-ইন ক্যোয়ারী ভাষাটি সংগ্রহস্থল সংস্করণের জন্য ব্যবহার করতে পারেন।

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

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

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


এটা নিখুঁত জ্ঞান করে তোলে। আমি মনে করি আমাকে বুলেটটি কামড়তে হবে এবং ইভান্সের বইটি পড়তে হবে :-) আমি এখন দেখছি যে এই ধারণাগুলির অগভীর বোঝাপড়া করা আপনাকে সত্যই পঙ্গু করতে পারে!
ড্রাগন

0

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

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

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