"নিয়ন্ত্রণের বিপর্যয়" কী "অ্যানমিক ডোমেন মডেল" প্রচার করে?


32

আমি যখন আমার শেষ প্রজেক্টে আইওসি কনটেইনার ব্যবহার করি তখন আমি রক্তাল্পতা সত্তা এবং স্টেটলেস পরিষেবাদিতে আমার বেশিরভাগ ব্যবসায়িক যুক্তি দিয়ে শেষ করি।

আমি অন্যান্য বিকাশকারীদের দ্বারা লিখিত প্রকল্পগুলি দেখেছি যা "ইনভার্শন অফ কন্ট্রোল" ব্যবহার করে এবং তারা সর্বদা "অ্যানিমিক" থাকে।

"অ্যানিমিক ডোমেন মডেল" যেহেতু অ্যান্টি-প্যাটার্ন, তাই আইওসি এবং সমৃদ্ধ ডোমেন ব্যবহার করা কি সম্ভব? তাদের কোনও ভাল উদাহরণ, ওপেন সোর্স প্রকল্পগুলি যা তা করে?


আমি মনে করি আমাদের সাহায্য করার জন্য আপনার বিশেষ কেসের কয়েকটি নির্দিষ্ট উদাহরণ দেখতে হবে।
মার্টিজন ভার্গবার্গ

1
দুঃখিত, আমি কোড স্নিপেটস বোঝাতে চেয়েছিলাম :)
মার্টিজ ভার্বার্গ

উত্তর:


11

প্রারম্ভিকদের জন্য: ডিআই এবং আইওসি সমার্থক শব্দ নয় । আমি দুঃখিত, তবে আমার অবশ্যই এটি উল্লেখ করতে হবে (আমার কাছে মনে হয় যে তারা মনে হয়)।

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

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


আমি এটিকে যুক্ত করব যে সম্ভবত আপনি এরিক ইভান্স এট আল দ্বারা প্রণীত ডিডিডি পদ্ধতির দিকে নজর দিতে পারেন।
মার্টিজন ভার্গবার্গ

1
আমি এরিক ইভান্স বইটি পড়েছিলাম। এটি সাধারণ পদ্ধতি এবং সর্বব্যাপী ভাষার পক্ষে ভাল তবে বাস্তব-বিশ্বের উদাহরণগুলির কিছুটা অভাব রয়েছে।
Mag20

ডিআই এবং আইওসির মধ্যে পার্থক্যটি নির্দেশ করার জন্য ধন্যবাদ। আমি মনে করি আইওসি তখন ডিআই-র সাথে ইস্যুটির আরও কিছু করার ছিল। যে প্রতিফলিত করতে প্রশ্ন পরিবর্তন।
Mag20

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

8

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

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

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

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


7

উত্স যান। অ্যানমিক ডোমেন মডেলগুলিতে ফওলারের টুকরো দিয়ে শুরু করুন । তিনি এরিক ইভানের ডোমেন চালিত নকশাকে ভাল অনুশীলনের উদাহরণ হিসাবে উল্লেখ করেন। এর জন্য সোর্স কোডটি এখানে । এটি ডাউনলোড করুন.

লক্ষ্য করুন যে এটি নিয়ন্ত্রণের বিপরীতমুখী ব্যবহার করে (@ অটোভায়ার্ডের সন্ধান করুন) এবং সেবার ক্লাস (বুকিং সার্ভিস) এবং "ব্যবসায়িক প্রক্রিয়া" ক্লাস রয়েছে (যেমন - ভ্রমণপথ)

ফাউলারের মূল নিবন্ধটি আপনি যে উদাহরণটির জন্য অনুসন্ধান করছেন তা অনুসরণ করা শুরু করে।


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

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

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

আমার কাছে, সেভ (মাইডোমাইনঅবজেক্ট ফু) বাস্তবায়ন নিখুঁতভাবে প্রযুক্তিগত উদ্বেগ। YMMV।
জ্যামি

কেবলমাত্র যদি এটি আপনাকে স্তরযুক্ত আর্কিটেকচারের মৌলিক নিয়ম লঙ্ঘনের দিকে পরিচালিত করে না: একটি নিম্ন স্তর একটি উচ্চ স্তরের উপর নির্ভর করতে পারে না । সুতরাং, আপনি যদি save(foo)ডোমেন মডেল পরিবর্তনের সময় পরিবর্তিত হতে পারে এমন কোড দিয়ে প্রয়োগ করেছেন (উদাহরণস্বরূপ, যদি একটি নতুন বৈশিষ্ট্য যুক্ত করা হয় MyDomainObject), তবে এটি অবশ্যই (সংজ্ঞায়) ডোমেন স্তরের অন্তর্গত; অন্যথায়, আপনি আর "স্তর" থাকার বিষয়ে কথা বলতে পারবেন না।
Rogério

7

আইওসি এবং রিচ ডোমেন ব্যবহার করা কি সম্ভব? তাদের কোনও ভাল উদাহরণ, ওপেন সোর্স প্রকল্পগুলি যা তা করে?

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

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

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

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


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