ডিডিডি - বিপুল সংখ্যক শিশু সহ মোটের মূল


10

আমি এই প্রশ্নটি প্রবর্তন করে বলব যে আমি ডিডিডি-তে তুলনামূলকভাবে নতুন তাই আমি এখানে কিছু মৌলিক ভুল করতে পারি!

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

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

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

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

লোকেরা কীভাবে এই ধরণের পরিস্থিতি পরিচালনা করে? আপনি কি সামগ্রিক মূলের জন্য সম্ভাব্য বিশাল সংখ্যক শিশুকে লোড করার স্মৃতি এবং পারফরম্যান্সের প্রভাবগুলি গ্রহণ করেছেন?

উত্তর:


9

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

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

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


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

7

tl; dr - আপনার প্রয়োজনে নিয়মগুলি ভঙ্গ করুন। ডিডিডি সব সমস্যার সমাধান করতে পারে না; আসলে এটি যে অবজেক্ট আইডিয়া দেয় তা হ'ল ভাল পরামর্শ এবং একটি ভাল শুরু, তবে কিছু ব্যবসায়িক সমস্যার জন্য সত্যই খারাপ পছন্দ। এটি কীভাবে করা যায় তার একটি ইঙ্গিত বিবেচনা করুন।


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

আপনি যখন প্রয়োজন তখনই বাচ্চাদের (লেনদেন) লোড করে আলস্য সমাধান করতে পারেন।

তবে কি এমন শব্দের মতো আপনি ইতিমধ্যে জানেন যে সমস্যাটি সমাধানের জন্য আপনি একটি ট্রানজেকশন রিপোসিটোরি ব্যবহার করতে পারেন।

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

সুতরাং আপনি অনুমতি সেট আপ করতে পারেন, তবে তারপরে আপনাকে পৃথক প্রক্রিয়া হিসাবে 'অ্যাকাউন্ট' চালাতে হবে।

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

কেউ বলতে পারে 'তাড়াতাড়ি অপ্টিমাইজ করবেন না'। এখানে এক্ষেত্রে, আপনি উত্তরটি জানেন তবে - এমন কোনও পদ্ধতির জালিয়াতি করার জন্য পর্যাপ্ত পরিমাণে লেনদেন হবে যা অ্যাকাউন্টের মাধ্যমে তাদের সবকটি চিরতরে রাখবে।

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

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

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

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

আরনান রোটেম-গাল-ওজ-এর "এসওএ প্যাটার্নস" বইটি এ সম্পর্কে অনেক প্রশ্নের জবাব দেয়। যখন প্রয়োজন দেখা দেয় তখন বাইরে থেকে পরিষেবাদি থেকে ডেটাগুলিকে নিজের সময়ে প্রতিলিপি করতে 'অ্যাক্টিভ সার্ভিস প্যাটার্ন' ব্যবহার সহ (অনেকগুলি আরপিসির প্রয়োজন হত, বা লিঙ্কটি বিশ্বাসযোগ্য নয় / প্রকাশ / সাবস্ক্রাইব ইকোসিস্টেমটিতে নয়) in

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

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

বাহ, দীর্ঘ ছিল।


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