ডোমেন সত্তা কি একক দায়িত্বের নীতি লঙ্ঘন করছে?


14

কোনও সত্তার একক দায়িত্ব (পরিবর্তনের কারণ) অনন্যভাবে নিজেকে চিহ্নিত করা উচিত, অন্য কথায়, এর দায়িত্ব সন্ধানযোগ্য হওয়া উচিত।

এরিক ইভানের ডিডিডি বই, পৃ। 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

ধন্যবাদ


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

2
আমি মনে করি এই প্রশ্নটি এসআরপি লঙ্ঘন করছে ...;)
ইনটেলিডিটা

উত্তর:


7

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

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

সুতরাং আপনার প্রশ্নের উত্তর। না, এটি একক দায়িত্বের নীতি লঙ্ঘন করে না। এটি খুব কমই বলা যায় যে একজন ব্যক্তির কেবল ব্যক্তির স্টাফ থাকা উচিত, এবং ঠিকানার মতো কিছু নয় যা কোনও ব্যক্তির সাথে আরও জটিল এবং সম্পর্কিত, তার নিজস্ব সত্তা হিসাবে উপস্থিত থাকা উচিত।

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

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

2) সঠিক বিবৃতিটি হবে Ageএমন একটি বৈশিষ্ট্য যা আচরণ করে has আপনাকে এই সত্যটি নথিভুক্ত করতে হবে যে বয়সটি অলস বোঝা রয়েছে যাতে কোনও বিকাশকারী সেই সম্পত্তি ব্যবহার করে কীভাবে সেই সম্পত্তি ব্যবহার করবেন সে সম্পর্কে সঠিক সিদ্ধান্ত নিতে পারে

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

৪) যদি একমাত্র কাজটি MyEntityপ্রতিনিধি দল এবং সমন্বয় হয় তবে তা এসআরপি লঙ্ঘন করে না। এর একক দায়িত্ব হ'ল প্রতিনিধি ও সমন্বয় সাধন এবং ফোকাস প্যাটার্ন হিসাবে উল্লেখ করা হয়


আমার করা আপডেটটি কি আপনি দেখতে পারবেন?
এডভ্রুজ

আমার উত্তর আপডেট করেছে
চার্লস ল্যামবার্ট

4

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

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


2

টিএল; ডিআর: আপনি এই চিন্তাভাবনা শেষ করেছেন। যাইহোক, আমি আপনার সাথে এটি overthینک মজা ছিল। তাই বক আপ ...

কোনও সত্তার একক দায়িত্ব (পরিবর্তনের কারণ) অনন্যভাবে নিজেকে চিহ্নিত করা উচিত, অন্য কথায়, এর দায়িত্ব সন্ধানযোগ্য হওয়া উচিত।

না, এটা ঠিক নেই সত্তার একক দায়িত্ব ধারাবাহিকতা।

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

এখানে একটি উদাহরণ রয়েছে: একটি রেস্তোরাঁর পৃষ্ঠপোষক হ'ল ভালকে গাড়ি দেয়। এক ঘন্টা পরে, একটি রেস্তোরাঁর পৃষ্ঠপোষক গাড়িটির জন্য জিজ্ঞাসা করলেন। ভালেট এটি দেওয়া উচিত?

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

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

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

সত্তাগুলির মডেলিংয়ের সময়, আমরা একটি অ্যানালগাসিক অপটিমাইজেশন ব্যবহার করি। আমরা সমস্ত সত্তাকে সাধারণ দায়িত্ব প্রদান করি

  1. ইতিহাসের প্রারম্ভের সাথে অবজেক্টের স্থিতিতে একটি অপরিবর্তনীয় শনাক্তকারীর একটি কার্যভার অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করা
  2. পরবর্তী রাষ্ট্র সর্বদা পূর্ববর্তী রাজ্যের শনাক্তকারীর একটি বিশ্বস্ত অনুলিপি অন্তর্ভুক্ত করে তা নিশ্চিত করে।

আমি এখানে সত্তার দ্বিতীয় দায়িত্ব বর্ণনা করছি না; সত্তা এখনও ধারাবাহিকতার জন্য দায়ী - ইতিহাসটি একটি ধারাবাহিক বর্ণনাকারী তা নিশ্চিত করে। সনাক্তকারী দায়িত্বগুলি কেবলমাত্র একটি উপসেট যা সমস্ত সত্তার পক্ষে সাধারণ।

আমাদের কাছে স্বতন্ত্রতার কোনও প্রয়োগ নেই। এটি একটি একক সত্তার মধ্যেই সম্ভব নয়, কারণ স্বতন্ত্রতার জন্য সমস্ত সত্তার রাজ্যে অ্যাক্সেস প্রয়োজন; যেখানে একটি একক সত্তার নিজস্ব অ্যাক্সেস রয়েছে।

আবারও, প্রত্যেক বার সমস্ত শনাক্তকারীদের চেক করা ব্যবহারিক নয়, সুতরাং পরিবর্তে আমরা স্বাচ্ছন্দ্যটি সহজ উপায়ে সন্তুষ্ট করি: পরবর্তী শনাক্তকারীকে উত্পন্ন কোডটি কখনও পুনরাবৃত্তি করতে হবে না।

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

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


1

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

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

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

ভিওএসের সাথে একত্রে একটি সত্তা একটি প্রকার নোঙ্গর হিসাবে কাজ করে যা বিভিন্ন ভিওগুলিকে সমন্বিত করে যা এর আচরণ বাস্তবায়ন করে।

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

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

হালনাগাদ

ক) আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি বলছেন যে সত্তায় কেবল সেই আচরণগুলি থাকা উচিত যা এর বৈশিষ্ট্যগুলিকে সংশোধন করে (অর্থাত্ এর অবস্থা)?

হ্যাঁ, যদিও ব্যতিক্রম আছে ...

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

সত্তার পক্ষে সত্ত্বার উদাহরণ তৈরির জন্য কারখানার পদ্ধতিগুলি ধারণ করা কার্যকরভাবে শিশু সত্তা হ'ল, তবে যেখানে বস্তুর উল্লেখগুলি ট্র্যাভারসাল জন্য ব্যবহৃত হয় না। এই ক্ষেত্রে, শিশু সত্তাকে অ্যাপ্লিকেশন পরিষেবা দ্বারা চালিত করা দরকার। অ্যাপ্লিকেশন পরিষেবাটি শিশু সত্তাটি তৈরি করতে পিতামাতার সত্তা ব্যবহার করে।

3) মাইএনটিটি ধরে নিলে (আমার মূল পোস্টে প্রশ্ন 3 দেখুন) এসআরপি লঙ্ঘন করে না, আমরা কি বলব যে মাইএনটিটির একটি দায়িত্বও অন্যান্য বিষয়গুলির মধ্যে অন্তর্ভুক্ত:

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

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

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

যদি গ্রাহককে ঠিকানা যুক্ত (টাইপ স্ট্রিংয়ের) পরিবর্তে আমরা একটি সম্পত্তি তৈরি করি ग्राहकের ঠিকানা ঠিকানা প্রকারের ঠিকানা, আমরা কি অ্যাড্রেস বৈশিষ্ট্যটিকে কোনও সম্পর্কিত ভিও অবজেক্টে স্থানান্তরিত করেছি (যা ঠিকানা প্রকারের হয়) অথবা আমরা কি বলতে পারি যে গ্রাহকটির এখনও ঠিকানা রয়েছে অ্যাট্রিবিউট?

হ্যাঁ, বাস্তবে, স্ট্রিং ঠিকানা বা একটি ঠিকানা ভিও ঠিকানার মধ্যে পার্থক্য নেই।

লেখকের ভুল এখানে নেই, যেহেতু আমরা যদি গ্রাহক কেবলমাত্র সেই নির্দিষ্ট গ্রাহকের সাথে সম্পর্কিত এমন অনেকগুলি যোগাযোগের ফোন নম্বরগুলির প্রত্যেকটির জন্য ধরে নিই, তবে আমি বলব যে এই ফোন নম্বরগুলি কেবল গ্রাহকের কাছে যেমন পরিচয়ের সাথে যুক্ত ছিল তেমনই একটি ফোন নম্বর?

আমি লেখকের অভিপ্রায় 100% নই, তবে আমি মনে করি যে তিনি সত্ত্বার সন্ধানের প্রয়োজনীয়তা কীভাবে সত্তা এবং এর সাথে সম্পর্কিত VO গুলি কাঠামোগত তা কীভাবে পরিবর্তন করতে পারে তা বর্ণনা করছেন।

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

প্রচুর বৈশিষ্ট্যগুলি প্রচুর আচরণকে বোঝায় না। আসলে, এটি সাধারণত বিপরীত পরামর্শ দেয় suggest গেটর এবং সেটারগুলির সাথে প্রচুর গুণাবলী, তবে কোনও এনক্যাপসুলেটিং আচরণ নয়।


আমি একটি আপডেট করেছি
এডভ্রুজ

-3

ঠিক আছে, আপনি কীভাবে এটি দেখতে চান তা নির্ভর করে।

আর একটি উপায় হ'ল: "একক দায়িত্বের নীতিটি ডোমেন সত্তাকে লঙ্ঘন করছে?"

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


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