কোনও সত্তার একক দায়িত্ব (পরিবর্তনের কারণ) অনন্যভাবে নিজেকে চিহ্নিত করা উচিত, অন্য কথায়, এর দায়িত্ব সন্ধানযোগ্য হওয়া উচিত।
এরিক ইভানের ডিডিডি বই, পৃ। 93:
সংস্থাগুলির সর্বাধিক প্রাথমিক দায়িত্ব হ'ল ধারাবাহিকতা প্রতিষ্ঠা করা যাতে আচরণটি স্পষ্ট এবং অনুমানযোগ্য হয়। যদি অতিরিক্ত রাখা হয় তবে তারা এই সেরাটি করে। বৈশিষ্ট্য বা এমনকি আচরণের দিকে মনোনিবেশ করার পরিবর্তে সত্ত্বার অবজেক্টের সংজ্ঞাটিকে সর্বাধিক স্বতন্ত্র বৈশিষ্ট্যগুলি থেকে সরিয়ে দিন, বিশেষত এটিরাই যা সনাক্ত করে বা এটি সাধারণত এটি খুঁজে পেতে বা মিলাতে ব্যবহৃত হয়। ধারণার জন্য প্রয়োজনীয় এবং কেবল সেই আচরণের দ্বারা প্রয়োজনীয় এমন বৈশিষ্ট্যগুলি যুক্ত করুন।
এর বাইরেও, মূল সত্তার সাথে যুক্ত অন্যান্য বস্তুর সাথে আচরণ এবং বৈশিষ্ট্যগুলি সরিয়ে ফেলার জন্য সন্ধান করুন identity পরিচয় ইস্যুগুলি বাদে সত্তা তাদের নিজস্ব অবজেক্টের ক্রিয়াকলাপকে সমন্বয় করে তাদের দায়িত্ব পালনের ঝোঁক।
1।
... ENTITY অবজেক্টের সংজ্ঞাটিকে সর্বাধিক স্বতন্ত্র বৈশিষ্ট্যগুলি থেকে সরিয়ে দিন, বিশেষত এটি যা সনাক্ত করে বা এটি সাধারণত এটি খুঁজে পেতে বা মেলে ব্যবহার করতে ব্যবহৃত হয়। ধারণার জন্য প্রয়োজনীয় এমন আচরণটি যুক্ত করুন ...
একবার কোনও সত্তাকে কোনও অনন্য আইডি অর্পণ করা হলে , তার পরিচয়টি প্রতিষ্ঠিত হয় এবং তাই আমি ধরে নেব যে এই জাতীয় সত্তাকে তার পরিচয় বজায় রাখতে বা এটি নিজেকে সনাক্ত করতে সহায়তা করার জন্য কোনও আচরণের প্রয়োজন নেই । সুতরাং, আমি বুঝতে পারি না যে লেখক " ধারণার জন্য প্রয়োজনীয় যে আচরণ " দিয়ে (পাশাপাশি findএবং match অপারেশন ) উল্লেখ করছেন ?
2।
... ENTITY অবজেক্টের সংজ্ঞাটিকে সর্বাধিক স্বতন্ত্র বৈশিষ্ট্যগুলি থেকে সরিয়ে দিন, বিশেষত এটি যা সনাক্ত করে বা এটি সাধারণত এটি খুঁজে পেতে বা মেলে ব্যবহার করতে ব্যবহৃত হয়। ... এর বাইরে, মূল ENTITY এর সাথে যুক্ত অন্যান্য বস্তুর সাথে আচরণ এবং বৈশিষ্ট্যগুলি সরিয়ে ফেলার জন্য সন্ধান করুন।
সুতরাং যে কোনও আচরণ যা সত্তাটি সনাক্ত করতে সহায়তা করে না, তবে আমরা এখনও সেই আচরণটিকে সেই সত্তার একটি স্বতন্ত্র বৈশিষ্ট্য হিসাবে চিহ্নিত করব (অর্থাত্ কুকুরগুলির অভ্যন্তরীণ হ'ল, উড়ন্ত বিমানের অভ্যন্তরীণ, ডিম পাড়া পাখির অভ্যন্তরীণ .. ।), entity সত্তার সাথে যুক্ত অন্যান্য বস্তুগুলিতে স্থাপন করা উচিত (উদাহরণস্বরূপ: কুকুরের সত্তার সাথে সম্পর্কিত কোনও বস্তুর মধ্যে আমাদের বকিং আচরণ করা উচিত)?
3।
এর বাইরে, মূল ENTITY এর সাথে যুক্ত অন্যান্য বস্তুর সাথে আচরণ এবং বৈশিষ্ট্যগুলি সরিয়ে ফেলার জন্য সন্ধান করুন।
ক) যথাক্রমে MyEntityদায়িত্ব A_respএবং B_respবস্তুগুলিকে aএবং প্রতিনিধিত্ব bকরে।
যদিও বেশিরভাগ A_respএবং B_respকাজগুলি aএবং bদৃষ্টান্তগুলি দ্বারা করা হয় , ক্লায়েন্টরা এখনও পরিবেশন করা হয় A_respএবং তার B_respমাধ্যমে হয় MyEntity, যার অর্থ ক্লায়েন্টের দৃষ্টিকোণ থেকে দুটি দায়িত্ব অন্তর্ভুক্ত MyEntity। সুতরাং, MyEntityতারও কি এরও অর্থ A_respএবং B_respদায়িত্ব নেই এবং যেমন এসআরপি লঙ্ঘন করছে ?
খ) এমনকি আমরা যদি ধরেই নিই A_respএবং এটির B_respঅন্তর্ভুক্ত না MyEntity, MyEntityতবুও AB_respঅবজেক্টগুলির ক্রিয়াকলাপের সমন্বয় করার দায়িত্ব রয়েছে aএবং b। তাই এসআরপিMyEntity লঙ্ঘন করে না কেন ন্যূনতম তার দুটি দায়িত্ব রয়েছে - স্বতন্ত্রভাবে নিজেকে চিহ্নিত করতে এবং এছাড়াও ?AB_resp
class MyEntity
{
private A a = ...
private B b = ...
public A GetA()
{ ... }
public B GetB()
{ ... }
/* coordinates operations of objects a and b */
public int AworkB()
{ ... }
}
/* A encapsulates a single responsibility resp_A*/
/* A is value object */
class A
{ ... }
/* B encapsulates a single responsibility resp_B*/
/* B is value object */
class B
{ ... }
হালনাগাদ:
1।
এই প্রসঙ্গে আচরণটি অর্থগত আচরণকে বোঝাচ্ছে। উদাহরণস্বরূপ, ক্লাসের একটি সম্পত্তি (যেমন একটি ডোমেন অবজেক্টের বৈশিষ্ট্য) যা স্বতন্ত্রভাবে সনাক্ত করতে ব্যবহৃত হয় এটির একটি আচরণ রয়েছে। যদিও এটি সরাসরি কোডে উপস্থাপন করা হয় না। প্রত্যাশিত আচরণটি হ'ল সেই সম্পত্তির জন্য কোনও সদৃশ মান থাকবে না।
সুতরাং কোডে আমাদের প্রায়শই এমন আচরণের বাস্তবায়ন করার প্রয়োজন হবে না (যেমন একটি অপারেশন) যা কোনওরকমভাবে সত্তার পরিচয় বজায় রাখবে, যেহেতু আপনি যেমন আচরণটি ব্যাখ্যা করেছেন কেবলমাত্র একটি ডোমেন মডেল হিসাবে একটি আইডি বৈশিষ্ট্যের আকারে ধারণা হিসাবে উপস্থিত রয়েছে একটি সত্তা), কিন্তু যখন আমরা এই আইডি বৈশিষ্ট্যটি কোডে অনুবাদ করি, তখন এর শব্দার্থবিজ্ঞানের একটি অংশটি হারিয়ে যায় (অর্থাত্ অংশটি যা স্পষ্টভাবে নিশ্চিত করে যে আইডি মানটি অনন্য কিনা তা হারিয়ে গেছে)?
2।
ফার্থমোর, বয়স যেমন সম্পত্তি কোনও ব্যক্তির সত্তার বাইরে কোনও প্রসঙ্গ নেই, এবং এর মতো, অন্য কোনও বস্তুতে স্থানান্তরিত করার কোনও মানে হয় না ... তবে সেই তথ্যটি অনন্য সনাক্তকারী হিসাবে সহজেই একটি পৃথক স্থানে সংরক্ষণ করা যেতে পারে hence আচরণের জন্য বিভ্রান্তিকর উল্লেখ বয়স একটি অলস বোঝা মান হতে পারে।
ক) Ageসম্পত্তি যদি অলস বোঝাই হয়, তবে আমরা একে এটাকে আচরণ বলতে পারি, যদিও শব্দার্থগতভাবে Ageকেবল একটি বৈশিষ্ট্য?
3।
আপনার কাছে সহজে ঠিকানা সম্পর্কিত নির্দিষ্ট অপারেশন থাকতে পারে যেমন যাচাইকরণ যে এটি একটি বৈধ ঠিকানা। আপনি হয়ত জানেন না যে নকশাকালীন সময়ে, তবে এই পুরো ধারণাটি হ'ল বস্তুগুলিকে তাদের ক্ষুদ্রতম অংশগুলিতে বিভক্ত করা
আমি সম্মত হয়েছি যে আমরা Ageবিভিন্ন বস্তুতে স্থানান্তরিত করে প্রসঙ্গটি হারাব , আমরা DateOfBirthসম্পত্তি অন্য কোনও বস্তুর মধ্যে স্থানান্তরিত করলে প্রসঙ্গটি হারাবে না , তবে আমরা সাধারণত এটিকে স্থানান্তর করি না।
মূল কারণ কী যে আমরা Addressঅন্য কোনও বস্তুতে চলে যেতে চাই , কিন্তু না DateOfBirth? কারণ DateOfBirthসত্তার সাথে আরও অন্তর্নিহিত Personবা ভবিষ্যতের কোথাও কোথাও নির্দিষ্ট নির্দিষ্ট অপারেশনগুলির সংজ্ঞা দেওয়ার দরকার হতে পারে বলে কম সম্ভাবনা রয়েছে DateOfBirth?
4. আমি অবশ্যই বলব আমি এখনও জানি না MyEntityএছাড়াও আছে A_respএবং B_respদায়িত্ব ও কেন MyEntityএছাড়াও থাকার AB_respলঙ্ঘন বিবেচনা করা হয় না SRP
EULERFX
1)
লেখক যে আচরণগুলি উল্লেখ করছেন তা হ'ল সত্তার সাথে যুক্ত আচরণ। এগুলি সেই আচরণগুলি যা সত্তার অবস্থা পরিবর্তন করে
ক) আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি বলছেন যে সত্তায় কেবল সেই আচরণগুলি থাকা উচিত যা এর বৈশিষ্ট্যগুলিকে সংশোধন করে (অর্থাত্ এর অবস্থা )?
খ) এবং কি সম্পর্কে আচরণে যে অগত্যা পরিবর্তন করবেন না সত্তা রাজ্যের , কিন্তু এখনও একটি হচ্ছে বলে মনে করা হয় স্বকীয় যে চারিত্রিক সত্তা (উদাহরণ: ঘেউ ঘেউ হবে স্বকীয় একটি চারিত্রিক Dogসত্তা, এমনকি যদি এটি পরিবর্তন করা হয়নি কুকুরের রাজ্য )? আমাদের কি এই আচরণগুলি কোনও সত্তায় অন্তর্ভুক্ত করা উচিত বা সেগুলি অন্য কোনও বস্তুতে স্থানান্তরিত করা উচিত?
2)
অন্যান্য অবজেক্টের দিকে চলন্ত আচরণ হিসাবে, লেখক বিশেষত মান বস্তুর উল্লেখ করছেন।
যদিও আমার উক্তিটি এতে অন্তর্ভুক্ত করা হয়নি, তবে লেখক একই অনুচ্ছেদে উল্লেখ করেছেন যে কিছু ক্ষেত্রে আচরণ (এবং বৈশিষ্ট্যগুলি ) অন্য সত্তায়ও স্থানান্তরিত হবে (যদিও আমি ভিও-তে সরানো আচরণের সুবিধা বুঝতে পারি)
3) ধরে নিই MyEntity( আমার আসল পোস্টে প্রশ্ন 3 দেখুন ) এসআরপি লঙ্ঘন করে না, আমরা কি বলব যে এর মধ্যে অন্যান্য বিষয়গুলির মধ্যে একটি দায়িত্বওMyEntity অন্তর্ভুক্ত:
ক। A_resp + + B_resp + + AB_resp ( AB_respস্থানাঙ্ক বস্তু aএবং b)
অথবা
খ। AB_resp + প্রতিনিধিত্ব A_respএবং B_respঅবজেক্টগুলিতে ( aএবং b) সম্পর্কিত MyEntity?
৪) এরিক ইভানের ডিডিডি বই, পৃ। 94:
গ্রাহকআইডি হ'ল গ্রাহক সংস্থাটির একমাত্র এবং কেবলমাত্র সনাক্তকারী (চিত্র 5.5), তবে ফোন নম্বর এবং ঠিকানাটি গ্রাহককে খুঁজে পেতে বা মিলানোর জন্য প্রায়শই ব্যবহৃত হত। নামটি কোনও ব্যক্তির পরিচয় সংজ্ঞায়িত করে না, তবে এটি প্রায়শই এটি নির্ধারণের অংশ হিসাবে ব্যবহৃত হয়।
এই উদাহরণস্বরূপ, ফোন এবং ঠিকানা বৈশিষ্ট্যগুলি গ্রাহককে স্থানান্তরিত করেছে, তবে একটি বাস্তব প্রকল্পে, এই পছন্দটি ডোমেনের গ্রাহকদের সাধারণত কীভাবে মেলে বা আলাদা করা যায় তার উপর নির্ভর করে। উদাহরণস্বরূপ, যদি কোনও গ্রাহকের বিভিন্ন উদ্দেশ্যে বিভিন্ন যোগাযোগের ফোন নম্বর থাকে তবে ফোন নম্বরটি পরিচয়ের সাথে সম্পর্কিত নয় এবং বিক্রয় যোগাযোগের সাথে থাকা উচিত।
ক)
গ্রাহকআইডি হ'ল গ্রাহক সংস্থাটির একমাত্র এবং কেবলমাত্র সনাক্তকারী (চিত্র 5.5), তবে ফোন নম্বর এবং ঠিকানাটি গ্রাহককে খুঁজে পেতে বা মিলানোর জন্য প্রায়শই ব্যবহৃত হত। নামটি কোনও ব্যক্তির পরিচয় সংজ্ঞায়িত করে না, তবে এটি প্রায়শই এটি নির্ধারণের অংশ হিসাবে ব্যবহৃত হয়।
উদ্ধৃতিতে উল্লেখ করা হয়েছে যে কেবল পরিচয়ের সাথে যুক্ত বৈশিষ্ট্যগুলি কোনও সত্তায় থাকা উচিত । আমি ধরে নিলাম লেখকের অর্থ হ'ল সত্তায় কেবলমাত্র সেই বৈশিষ্ট্যগুলি থাকা উচিত যা প্রায়শই এই সত্তা সন্ধান করতে বা মেলে ব্যবহৃত হয় , অন্য সমস্ত বৈশিষ্ট্য সরিয়ে নেওয়া উচিত?
খ) তবে অন্যান্য বৈশিষ্ট্যগুলি কীভাবে / কোথায় সরানো উচিত ? উদাহরণস্বরূপ (এখানে ধারণা অনুমান করা হয় যে ঠিকানা গুণাবলী সন্ধান করতে বা মেলে ব্যবহার করার জন্য ব্যবহৃত হয় না Customerএবং সুতরাং আমরা ঠিকানা বৈশিষ্ট্যটি বাইরে সরাতে চাই Customer):
যদি Customer.Address(প্রকারের string) পরিবর্তে আমরা প্রকারের একটি Customer.Addressবৈশিষ্ট্য তৈরি করি Address, আমরা কি অ্যাড্রেস অ্যাট্রিবিউটটিকে কোনও সম্পর্কিত ভিও অবজেক্টে স্থানান্তরিত করেছি (যা টাইপযুক্ত Address) বা আমরা কি Customerএখনও বলতে পারি যে অ্যাড্রেস অ্যাট্রিবিউটটি রয়েছে ?
গ)
এই উদাহরণস্বরূপ, ফোন এবং ঠিকানা বৈশিষ্ট্যগুলি গ্রাহককে স্থানান্তরিত করেছে, তবে একটি বাস্তব প্রকল্পে, এই পছন্দটি ডোমেনের গ্রাহকদের সাধারণত কীভাবে মেলে বা আলাদা করা যায় তার উপর নির্ভর করে। উদাহরণস্বরূপ, যদি কোনও গ্রাহকের বিভিন্ন উদ্দেশ্যে বিভিন্ন যোগাযোগের ফোন নম্বর থাকে তবে ফোন নম্বরটি পরিচয়ের সাথে সম্পর্কিত নয় এবং বিক্রয় যোগাযোগের সাথে থাকা উচিত।
এখানে ভুল লেখক হবেন না, কারণ যদি আমরা অনেক প্রতিটি অনুমান যোগাযোগের ফোন নম্বর যে Customerহয়েছে শুধু তাই বিশেষ অন্তর্গত Customer, তারপর আমি বলতে চাই এই ফোন নম্বর সাথে সংযুক্ত করা হয় পরিচয় ঠিক যতটা যখন Customerশুধুমাত্র ছিল এক ফোন নম্বর ?
5)
লেখক সত্তাকে সরিয়ে দেওয়ার পরামর্শ দেওয়ার কারণটি হ'ল প্রথম দিকে যখন কোনও গ্রাহক সত্তা তৈরি করেন, তখন কোনও বৈশিষ্ট্য যা এটি গ্রাহকের সাথে যুক্ত থাকার কথা ভাবতে পারে তার সাথে এটি তৈরি করার প্রবণতা থাকে। এটি একটি ডেটা কেন্দ্রিক দৃষ্টিভঙ্গি যা আচরণগুলি পর্যবেক্ষণ করে শেষ পর্যন্ত একটি রক্তাল্পতা ডোমেন মডেলের দিকে নিয়ে যায়।
বিষয় বন্ধ, কিন্তু আমার মনে হয়েছে রক্তহীন ডোমেইন মডেল চলন্ত থেকে ফলাফল আচরণ একটি আউট সত্তা , যখন আপনার উদাহরণগুলি পূর্ণ হয় সত্তা প্রচুর সঙ্গে বৈশিষ্ট্যাবলী , যা স্থাপিত হবে Customerঅত্যধিক থাকার আচরণ (যেহেতু আমরা হয়ত আরো অন্তর্ভুক্ত চাই আচরণে যা এই অতিরিক্ত বৈশিষ্ট্যগুলি সংশোধন করুন ) এবং এসআরপি লঙ্ঘন করে?Customer
ধন্যবাদ