লেনদেনের সাথে বিজনেস লজিককে ডিবি-লজিক থেকে আলাদা করা


11

স্থাপত্য

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

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

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

এই সমস্যার পরিষ্কার সমাধান কী হবে?


লেনদেন সমস্যার কারণে FileBOকল করতে পারি না FolderBO.edit(newDate)?
স্পটড

জাভাতে কি # ট্রানজেকশনস্কোপের সমকক্ষ থাকে না?
ইভান

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

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

উত্তর:


5

আপনি কীভাবে আপনার লেনদেনগুলি কেটে ফেলেন তা আসলে ব্যবসায়ের যুক্তি। সুতরাং আপনার ডিএও স্তরটি transactআপনার উল্লিখিত পদ্ধতিটির জন্য (এবং সম্ভবত পছন্দ মতো commitএবং এর জন্য rollback) একটি ডিবি ফ্রেমওয়ার্ক স্বাধীন API সরবরাহ করতে দিন । তারপরে আপনি এটিকে আপনার ডিও ডাটাবেস বা আপনার ডিবি কাঠামোর উপর নির্ভরশীল না করে আপনার বিও স্তর থেকে ব্যবহার করতে পারেন।


4

দেখে মনে হচ্ছে অবজেক্টিফাই পারমাণবিক জাতীয় লেনদেনের জন্য ডিজাইন করা হয়েছে ( গুগল অ্যাপ্লিকেশন ইঞ্জিন লেনদেন )। এটি আপনাকে লেনদেন পরিচালনার নিজস্ব বিমূর্ততা বিকাশের জন্য দাবি করবে ।

এক্ষেত্রে. বিমূর্ততা চলে যায় আমি লেনদেন পরিচালনকে উপরের স্তরগুলিতে কীভাবে উপস্থাপন করব?

@ ডকব্রাউন দৃষ্টিভঙ্গি প্রদত্ত আর্কিটেকচার ( স্তরযুক্ত আর্কিটেকচার ) এ প্রয়োগ করার জন্য আমার কাছে দ্রুত এবং পরিস্কার সমাধান দেখায় ।

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

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

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

প্রদত্ত আর্কিটেকচারে প্রয়োগ করা হবে, দেখতে এই রকম হবে:

FileService -> FileBO : new EditFileTransaction().execute()
                           |-> ofy().transact(...)
                           |--> FileDAO.actionA()
                           |--> FolderDAO.actionA()
                           |-> [ofy().commit(...)|ofy().rollback()]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.