ডোমেন চালিত ডিজাইনে ডোমেন অবজেক্টগুলি কেবল কেবল লেখার জন্য অনুমিত হয়?


13

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

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

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

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

থাম্বের নিয়মটি কি কেবলমাত্র সম্পত্তি প্রাপ্তি (অ্যাক্সেসরগুলি পান) এমন হওয়া উচিত যা ডোমেনেও লেখার যোগ্য? অথবা বলেছে যে আলাদাভাবে পঠনযোগ্য বৈশিষ্ট্যগুলি এড়াতে হবে কারণ তারা কেবল সেখানে পড়ার উদ্দেশ্যে রয়েছে এবং এভাবে প্রকৃত ডোমেন মডেলটিতে এএ প্রয়োজনীয় ভূমিকা পালন করে না?

সম্পর্কিত উপাদান:

  1. টিডিডি, ডিডিডি এবং এনক্যাপসুলেশন

উত্তর:


9

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

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

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

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

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

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

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

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


1
জুকি বিট দিয়ে শুরু করার জন্য +1। এছাড়াও: কেবল সিকিউএসকে কামড় দেওয়া (এখনকার 'ইভেন্ট' অংশটি এড়িয়ে যাওয়া) শুরু করার জন্য ভাল জায়গা হতে পারে।
cottsak

1

ডোমেন চালিত ডিজাইনে ডোমেন অবজেক্টগুলি কেবল কেবল লেখার জন্য অনুমিত হয়?

নং সিকিউআরএস ডিডিডি পাশাপাশি ব্যবহার করতে পারে।


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

0

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

আপনি ToString()স্বয়ংক্রিয়ভাবে, রাষ্ট্রের মানব পাঠযোগ্য রিপোর্টিং সরবরাহ করতে আপনার ডোমেন আদেশ এবং ইভেন্টগুলিকে ওভাররাইড করতে পারেন ।

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


আপনি ইভেন্ট সোর্সিং ব্যবহার না করে যখন এটি এখনও প্রয়োগ হয় কিনা তা আপনি কীভাবে কিছুটা ব্যাখ্যা করতে পারেন?
jpierson

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

পরামর্শের জন্য ধন্যবাদ। আমি পরীক্ষার জন্য বিশেষত আমার ডোমেন ক্লাসগুলি সংশোধন করার ধারণাটি সম্পর্কে কিছুটা অস্বস্তি বোধ করছি তবে আমি মনে করি এটি যদি আপনি পরীক্ষাযোগ্য হতে চান তবে ডোমেন চালিত ডিজাইনে এখনও সেই ধূসর অঞ্চলগুলির মধ্যে একটি হতে পারে। আরেকটি ধারণা হ'ল যদি কেউ একই ইন্টারফেসের মাধ্যমে স্থিতিশীলতা এবং পরীক্ষামূলকতা প্রকাশ করতে হয় তবে কমপক্ষে আপনার কেবল দুটিটির পরিবর্তে একটি অবকাঠামোগত নির্ভরতা প্রবর্তন করা উচিত। অন্যেরা এ সম্পর্কে কী ভাবেন?
jpierson
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.