প্রায় ৮ বছর ধরে আমার বেশিরভাগ প্রকল্পে হাইবারনেট ব্যবহার করার পরে, আমি এমন একটি সংস্থায় নেমেছি যা এর ব্যবহারকে নিরুৎসাহিত করে এবং অ্যাপ্লিকেশনগুলি কেবল সঞ্চিত পদ্ধতিগুলির মাধ্যমে ডিবির সাথে ইন্টারঅ্যাক্ট করতে চায়।
কয়েক সপ্তাহ ধরে এটি করার পরে, আমি যে অ্যাপ্লিকেশনটি তৈরি করতে শুরু করছি তার একটি সমৃদ্ধ ডোমেন মডেল তৈরি করতে সক্ষম হয়েছি এবং অ্যাপ্লিকেশনটি কেবল (ভয়াবহ) লেনদেনের স্ক্রিপ্টের মতো দেখাচ্ছে।
আমি খুঁজে পাওয়া কিছু সমস্যা হ'ল:
- সঞ্চিত প্রক্রিয়াগুলি কেবলমাত্র সর্বনিম্ন পরিমাণের ডেটা লোড করতে পারে বলে অবজেক্ট গ্রাফটি নেভিগেট করতে পারে না যার অর্থ কখনও কখনও আমাদের কাছে বিভিন্ন ক্ষেত্রের সাথে একই জিনিস থাকে। একটি উদাহরণ হ'ল: আমাদের কাছে গ্রাহকের কাছ থেকে সমস্ত ডেটা পুনরুদ্ধার করার জন্য এবং অন্য একটি অ্যাকাউন্টের তথ্য এবং গ্রাহকের কাছ থেকে কয়েকটি ক্ষেত্র পুনরুদ্ধার করার জন্য একটি সঞ্চিত পদ্ধতি রয়েছে।
- প্রচুর যুক্তি সহকারীর ক্লাসে শেষ হয়, তাই কোডটি আরও কাঠামোগত হয় (পুরানো সি স্ট্রাক্ট হিসাবে ব্যবহৃত সত্তা সহ)।
- আরও বিরক্তিকর স্ক্যাফোোল্ডিং কোড, কারণ কোনও কাঠামো নেই যা কোনও সঞ্চিত প্রক্রিয়া থেকে ফলাফল সেটগুলি বের করে এবং এটি কোনও সত্তায় রাখে।
আমার প্রশ্নগুলি হ'ল:
- কেউ কি একই পরিস্থিতিতে পড়েছেন এবং স্টোর প্রক্রিয়া পদ্ধতির সাথে একমত নন? আপনি কি করেছিলেন?
- সঞ্চিত পদ্ধতি ব্যবহার করে কি আসল উপকার পাওয়া যায়? "কেউ ড্রপ টেবিল ইস্যু করতে পারে না" এর মূর্খ বিন্দু বাদে।
- সঞ্চিত পদ্ধতি ব্যবহার করে একটি সমৃদ্ধ ডোমেন তৈরি করার কোনও উপায় আছে কি? আমি জানি যে ডিওএ / রেপোজিটরিগুলি ইনজেক্টে অবজেক্ট গ্রাফ নেভিগেট করতে সক্ষম হওয়ার জন্য এওপি ব্যবহার করার সম্ভাবনা রয়েছে। আমি এই বিকল্পটি পছন্দ করি না কারণ এটি ভুডুর খুব কাছাকাছি।
উপসংহার
প্রথমে, আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। আমি পৌঁছেছি যে সিদ্ধান্তে পৌঁছেছে যে ওআরএমগুলি ধনী ডোমেন মডেলগুলি তৈরি করতে সক্ষম করে না (যেমন কিছু লোক উল্লিখিত হয়েছে), তবে এটি (প্রায়শই পুনরাবৃত্তিযোগ্য) কাজের পরিমাণকে সহজ করে তোলে। নিম্নলিখিতটি উপসংহারের আরও বিশদ ব্যাখ্যা, তবে কোনও হার্ড ডেটার ভিত্তিতে নয়।
বেশিরভাগ অ্যাপ্লিকেশন অনুরোধ করে এবং অন্যান্য সিস্টেমে তথ্য প্রেরণ করে। এটি করার জন্য, আমরা মডেল পদগুলিতে (যেমন একটি ব্যবসায়িক ইভেন্ট) একটি বিমূর্ততা তৈরি করি এবং ডোমেন মডেল ইভেন্টটি প্রেরণ বা গ্রহণ করে receives ইভেন্টটি সাধারণত মডেল থেকে তথ্য একটি ছোট উপসেট প্রয়োজন, কিন্তু পুরো মডেল নয়। একটি অনলাইন শপ হিসাবে উদাহরণস্বরূপ, একটি পেমেন্ট গেটওয়ে কিছু ব্যবহারকারীর তথ্য এবং ব্যবহারকারীর কাছ থেকে মোট চার্জ দেওয়ার জন্য অনুরোধ করে, তবে ক্রয়ের ইতিহাস, উপলব্ধ পণ্য এবং সমস্ত গ্রাহক বেসের প্রয়োজন হয় না। সুতরাং ইভেন্টটির একটি ছোট এবং নির্দিষ্ট ডেটা সেট রয়েছে।
যদি আমরা কোনও অ্যাপ্লিকেশনটির ডেটাবেসটিকে একটি বাহ্যিক সিস্টেম হিসাবে গ্রহণ করি তবে আমাদের একটি বিমূর্ততা তৈরি করতে হবে যা আমাদের ডোমেন মডেল সত্তাকে ডাটাবেসে মানচিত্র তৈরি করতে দেয় ( যেমন নিমচিম্পস্কি উল্লিখিত , ডেটা-ম্যাপার ব্যবহার করে)। স্পষ্টত পার্থক্যটি হ'ল এখন আমাদের প্রতিটি মডেল সত্তার জন্য একটি ম্যাপিং হ্যান্ডক্রাফ্টের প্রয়োজন ডাটাবেসে (একটি লেগ্যাসি স্কিমা বা সঞ্চিত পদ্ধতি) অতিরিক্ত ব্যথা সহ যেহেতু দু'টি সিঙ্কে নেই, তাই একটি ডোমেন সত্তা আংশিকভাবে মানচিত্র তৈরি করতে পারে একটি ডাটাবেস সত্তা (উদাহরণস্বরূপ, ব্যবহারকারীর শংসাপত্রের ক্লাসে কেবল ব্যবহারকারী নাম এবং পাসওয়ার্ড রয়েছে এমন একটি ব্যবহারকারী টেবিলে ম্যাপ করা আছে যা অন্য কলামগুলিতে রয়েছে), অথবা একটি ডোমেন মডেল সত্তা একাধিক ডাটাবেস সত্তায় মানচিত্র করতে পারে (উদাহরণস্বরূপ যদি এক-থেকে- টেবিলে একটি ম্যাপিং, তবে আমরা কেবলমাত্র একটি শ্রেণিতে সমস্ত ডেটা চাই।
কয়েকটি সত্তা সহ একটি অ্যাপ্লিকেশনটিতে, সত্তাগুলি হস্তান্তর করার প্রয়োজন না হলে অতিরিক্ত কাজের পরিমাণ কম হতে পারে, তবে সত্তাগুলি সরিয়ে নেওয়ার শর্তাধীন প্রয়োজন হলে এটি বাড়বে (এবং আমরা কিছুটা অলসভাবে প্রয়োগ করতে চাই) লোড হচ্ছে ')। অ্যাপ্লিকেশনটির আরও সত্তা বাড়ার সাথে সাথে এই কাজটি কেবল বৃদ্ধি পায় (এবং আমার মনে হয় যে এটি অ-রৈখিকভাবে বৃদ্ধি পায়)। এখানে আমার ধারণা, আমরা কোনও ওআরএম পুনর্নবীকরণের চেষ্টা করি না।
বাহ্যিক ব্যবস্থা হিসাবে ডিবিকে চিকিত্সা করার একটি সুবিধা হ'ল আমরা যে পরিস্থিতিতে এমন একটি অ্যাপ্লিকেশন চলমান করতে চাই তার দুটি ভিন্ন সংস্করণ চাই, যার মধ্যে প্রতিটি অ্যাপ্লিকেশনটির আলাদা ম্যাপিং রয়েছে around উত্পাদনে অবিচ্ছিন্ন বিতরণের দৃশ্যে এটি আরও আকর্ষণীয় হয়ে ওঠে ... তবে আমি মনে করি ওআরএম এর মাধ্যমেও কিছুটা কম পরিমাণে এটি সম্ভব।
আমি সুরক্ষা দিকটি খারিজ করতে যাচ্ছি, এই ভিত্তিতে যে কোনও বিকাশকারী, এমনকি তার ডাটাবেসে অ্যাক্সেস না থাকলেও, কেবলমাত্র দূষিত কোড ইনজেকশনের মাধ্যমে কোনও সিস্টেমে সঞ্চিত সমস্ত তথ্য না থাকলে বেশিরভাগ প্রাপ্ত করতে পারেন eg আমি বিশ্বাস করতে পারি না যে আমি গ্রাহকদের ক্রেডিট কার্ডের বিশদটি লগ করে এমন লাইনটি সরিয়ে দিতে ভুলে গিয়েছি, প্রিয় প্রভু! )।
ছোট আপডেট (6/6/2012)
সঞ্চিত পদ্ধতি (কমপক্ষে ওরাকল এ) জিরো ডাউনটাইমের সাথে অবিচ্ছিন্ন সরবরাহের মতো কিছু করা বন্ধ করে দেয়, কারণ সারণীর কাঠামোর কোনও পরিবর্তন প্রক্রিয়া এবং ট্রিগারকে অকার্যকর করে দেবে। সুতরাং ডিবি আপডেট হওয়ার সময়, অ্যাপ্লিকেশনটি খুব কম থাকবে। ওরাকল এটিকে সংস্করণ-ভিত্তিক পুনঃনির্ধারণের জন্য একটি সমাধান সরবরাহ করে , তবে এই বৈশিষ্ট্য সম্পর্কে আমি যে কয়েকটি ডিবিএ জিজ্ঞাসা করেছি উল্লেখ করেছে যে এটি খারাপভাবে প্ররোচিত হয়েছিল এবং তারা এটি কোনও প্রোডাকশন ডিবিতে রাখবে না।