আমার উপস্থাপনা স্তর থেকে আমার ডোমেন সত্তাগুলি কেন বিচ্ছিন্ন করা উচিত?


85

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

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

সুতরাং আমি এটির ব্যাক আপ করতে কিছু ठोस কারণ অনুসন্ধান করছি। বিশেষত:

  1. আমাদের উপস্থাপনা স্তরে কেন আমরা ডোমেন অবজেক্ট ব্যবহার করব না?
    (যদি উত্তরটি হ'ল 'ডিকউলিং' হয় তবে দয়া করে ব্যাখ্যা করুন কেন এটি এই প্রসঙ্গে গুরুত্বপূর্ণ)
  2. ইন্টারফেস থেকে আমাদের ডোমেন অবজেক্টগুলিকে আলাদা করতে আমাদের কি অতিরিক্ত অবজেক্টস বা কনস্ট্রাক্টস ব্যবহার করা উচিত?

এই প্রশ্নটি উইকিতে থাকা উচিত।
সৈয়দ তৈয়ব আলী

@ m4bwav - এটি একটি উইকি হওয়া উচিত কারণ এটি এমনভাবে যুক্ত করা হয়েছে যাতে একক সঠিক উত্তরের পরিবর্তে আলোচনাকে আমন্ত্রণ জানানো যায়।
রব অ্যালেন 18

4
@ এম 4 বিওয়াব: আমি মনে করি আপনার প্রশ্নটি একটি বাস্তব প্রশ্নের চেয়ে একটি মতামত হিসাবে প্রকাশিত হয়েছে ... আমি এটি সংশোধন করার চেষ্টা করেছি (আপনি এটি আরও সম্পাদনা করতে চাইতে পারেন), তবে সচেতন হন যে সঠিক যত্ন ব্যতীত এটি প্রদর্শিত হতে পারে ট্রলিং করা।
শোগ

4
ঠিক আছে, ব্যাকআপ, আমি একটি বৈধ প্রশ্ন জিজ্ঞাসা করছি, এটি কীভাবে কাউকে আপত্তি করবে? আমি কে লক্ষ্য করছি?
মার্ক রজার্স 18

@ এম 4 বিওয়াব: আপনি নিজের খড়ের মানুষটিকে লক্ষ্য করছেন। আপনার প্রশ্নে আপনি যে "বিপুল সংখ্যক লোক" এটি নিয়ে আলোচনা করেন।
শোগ

উত্তর:


48

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

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


4
"আপনার ডোমেন অবজেক্টগুলিকে দুটি স্থানে প্রয়োগ" বলতে কী বোঝ?
jlembke

10
এটা আমার কাছে নির্বোধ মনে হচ্ছে। ভবিষ্যতে হয়ত আমার কাজ বাঁচাতে অতিরিক্ত কাজ কেন করবেন? 10 এর মধ্যে 9 বার আপনার কোনও পরিবর্তন করার দরকার নেই যা কাজের "TONS" সংরক্ষণ করবে।
বীপ বীপ

13
@ লাকিলিন্ডি: ১০০ এর মধ্যে ৯৯ বার (আসলে আরও বেশি), আমার সিট বেল্ট পরা আমাকে আহত হওয়ার হাত থেকে রক্ষা করার জন্য প্রয়োজনীয় নয়। তবে, এক্ষেত্রে যখন আমার সত্যিই এটির প্রয়োজন হবে, এটি (সম্ভবত) আমাকে হত্যা বা খারাপভাবে আহত হতে বাধা দেবে। প্রতি আউন্স প্রতিরোধের জন্য এক পাউন্ড নিরাময়ের মূল্য। আমি সন্দেহ করি আপনার আরও অভিজ্ঞতা হওয়ার পরে এই সম্পর্কে আপনার মতামত পরিবর্তন হবে।
পল সোনিয়ার

19

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

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

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

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

এই ধারণাটি যে কেউ তাদের ব্যবসায়ের উদ্দেশ্যে বৈধতা দেবে? ভাল আমি বলি যে এটি একটি ভাল জিনিস। আপনার UI- এ আপনার ব্যবসায়িক বিষয়গুলি বৈধ করার জন্য একমাত্র দায়বদ্ধতা থাকা উচিত নয়। আপনার ব্যবসার স্তর হবে নিজস্ব বৈধতা না।

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

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

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


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

16

আপনি এসকিউএলকে আপনার এএসপি / জেএসপি পৃষ্ঠাগুলির বাইরে রাখেন একই কারণে আপনি এটি করেন।

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

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


13

আমি একমত নই

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

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


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

না, এটি ভুল এবং ঠিক কী কারণে এতগুলি সাইট স্ক্যাল ইনজেকশনের ঝুঁকিতে পড়ে।
রেমি

7

উত্তরটি আপনার আবেদনের স্কেলের উপর নির্ভর করে।


সাধারণ সিআরইউডি (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন) অ্যাপ্লিকেশন

বেসিক ক্রড অ্যাপ্লিকেশনগুলির জন্য আপনার কোনও কার্যকারিতা নেই। সত্তাদের উপরে ডিটিও যুক্ত করা সময় নষ্ট হবে oud এটি স্কেলিবিলিটি না বাড়িয়ে জটিলতা বাড়িয়ে তুলবে।

এখানে চিত্র বর্ণনা লিখুন


মাঝারিভাবে জটিল অ-সিআরইউডি অ্যাপ্লিকেশন

প্রয়োগের এই আকারে আপনার কয়েকটি অস্তিত্ব থাকবে যার সত্যিকারের জীবনচক্র রয়েছে এবং কিছু ব্যবসায়িক যুক্তি তাদের সাথে যুক্ত।

এই ক্ষেত্রে ডিটিও যুক্ত করা কয়েকটি কারণে ভাল ধারণা:

  • উপস্থাপনা স্তর সত্তা রয়েছে এমন ক্ষেত্রগুলির কেবলমাত্র উপসেট দেখতে পারে। আপনি সত্তা encapsulate
  • ব্যাকএন্ড এবং ফ্রন্টেন্টের মধ্যে কোনও মিলন নেই
  • সত্তার মধ্যে আপনার যদি ব্যবসায়িক পদ্ধতি থাকে তবে ডিটিওতে নয় তবে ডিটিও যুক্ত করার অর্থ বাইরের কোডটি আপনার সত্তার অবস্থা নষ্ট করতে পারে না।

এখানে চিত্র বর্ণনা লিখুন


জটিল এন্টারপ্রাইজ অ্যাপ্লিকেশন

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

এখানে চিত্র বর্ণনা লিখুন


4

আমরা সার্ভারে এবং ইউআইতে একই মডেলটি ব্যবহার করছি। এবং এটি একটি ব্যথা। আমাদের এটি কোনও দিন রিফ্যাক্টর করতে হবে।

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

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

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


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

@ জোশ: পরামর্শের জন্য ধন্যবাদ। এটি আংশিকভাবে কাজ করতে পারে। আমি নিজে একটি জিইআইআই প্রোগ্রামার নই এবং জিইআইআই ধারণাগুলিতে খুব বেশি জড়িত নই। সমস্যাটি এমন ক্ষেত্রে হবে যেখানে ডেটা ম্যানিপুলেটেড এবং সার্ভারে ফিরে পাঠানো হয়েছে।
স্টিফান স্টেইনগার

3

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

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

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

ইন্টারফেসগুলি সঠিকভাবে মডেলিং এবং আক্রমণকারী ফাংশনাল কোরের জন্য সরবরাহ করা ইনপুট এবং দর্শন সম্পর্কে।


3

দাম্মি, আমি এই দৃ pers়তার সাথে শপথ করছি

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


2

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


1

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

এখন ধরা যাক টেলিফোন কল-ইন সিস্টেমের স্পিচ ইঞ্জিন কম্পিউটার থেকে সম্পূর্ণ ভিন্ন ধরণের কম্পিউটারে (উদাহরণস্বরূপ ম্যাক) কম্পিউটার চালায় যা কম্পিউটার (সম্ভবত উইন্ডোজ) চালায়।

অবশ্যই এই ফাঁদটিতে পড়ে সহজেই "ওয়েল আমার সংস্থায় আমরা কেবল ইংরেজিকেই যত্নশীল করি, ল্যাম্পে আমাদের ওয়েবসাইট চালিত করি (লিনাক্স, অ্যাপাচি, মাইএসকিউএল এবং পিএইচপি) এবং প্রত্যেকে ফায়ারফক্সের একই সংস্করণ ব্যবহার করে"। তবে 5 বা 10 বছরের মধ্যে কী হবে?



1

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

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


1

এখানে কেন ডোমেন সত্তাকে ভিউ থেকে আলাদা করা ভাল অভ্যাস বলে মনে হচ্ছে তার একটি বাস্তব উদাহরণ।

কয়েক মাস আগে আমি সিরিজের 3 গেজের মাধ্যমে নাইট্রোজেন, ফসফরাস এবং পটাসিয়ামের মানগুলি একটি মাটির নমুনায় দেখানোর জন্য একটি সাধারণ ইউআই তৈরি করেছি। প্রতিটি গেজের একটি লাল, সবুজ এবং লাল অংশ ছিল, অর্থাত আপনি প্রতিটি উপাদানগুলির খুব কম বা খুব বেশি পরিমাণে থাকতে পারেন, তবে মাঝখানে একটি নিরাপদ সবুজ স্তর ছিল।

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

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

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


-1

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

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


অনুচ্ছেদ 1: অপ্রয়োজনীয় বিমূর্ততা তৈরি করুন না (যেমন পুনরায় ব্যবহারযোগ্য উপাদানগুলি) যদি না আপনি এগুলিকে আলাদা আলাদা অ্যাপ্লিকেশনগুলিতে ভাগ করে না দেন। অনুচ্ছেদ 2: আমি আশ্চর্য হয়েছি যে জেনেরিক জিইউআইগুলি এতগুলি বিভিন্ন ডোমেন জুড়ে কীভাবে কাজ করে। মন্তব্য: এই শিল্পটি এতটাই ভেঙে গেছে, এটি আর
মজারও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.