আমি বসন্ত কাঠামোর সাথে হাইবারনেট ব্যবহার করার প্রবণতা এবং এটি ঘোষণামূলক লেনদেনের সীমাবদ্ধতা ক্ষমতাগুলি (যেমন, @ ট্রান্সজেকশনাল )।
যেমনটি আমরা সবাই জানি, হাইবারনেট যতটা সম্ভব আক্রমণাত্মক এবং স্বচ্ছ হতে চেষ্টা করে , তবে সম্পর্ক নিযুক্ত করার সময় এটি কিছুটা চ্যালেঞ্জিং প্রমাণ করে lazy-loaded
।
স্বচ্ছতার বিভিন্ন স্তরের সাথে আমি বেশ কয়েকটি ডিজাইনের বিকল্প দেখতে পাচ্ছি।
- সম্পর্কগুলি অলস বোঝা না করে তৈরি করুন (যেমন,
fetchType=FetchType.EAGER)
- এটি অলস লোডিংয়ের সম্পূর্ণ ধারণাটিকে লঙ্ঘন করে ..
- ব্যবহার করে সংগ্রহ শুরু করুন
Hibernate.initialize(proxyObj);
- এটি ডিএওতে তুলনামূলকভাবে উচ্চ সংযুক্তিকে বোঝায়
- যদিও আমরা একটি ইন্টারফেসের সাথে সংজ্ঞা দিতে পারি
initialize
, অন্য বাস্তবায়নগুলি কোনও সমতুল্য সরবরাহের গ্যারান্টিযুক্ত নয়।
- ক্রমাগত করার লেনদেনের আচরণ যোগ করুন
Model
(হয় ব্যবহার বস্তু নিজেদের গতিশীল প্রক্সি বা@Transactional
)- আমি গতিশীল প্রক্সি পদ্ধতির চেষ্টা করি নি, যদিও আমি কখনও মনে করি নি যে তারা অবিচ্ছিন্ন অবজেক্টগুলিতে নিজেরাই @ ট্রানজেকশনাল কাজ করবে। সম্ভবত সেই হাইবারনেটের কারণে প্রক্সির অপারেশন চলছে।
- যখন লেনদেন আসলে ঘটে থাকে তখন নিয়ন্ত্রণের ক্ষতি
- অলস / অলস API উভয়ই সরবরাহ করুন, যেমন,
loadData()
এবংloadDataWithDeps()
- অ্যাপ্লিকেশনটিকে কখন কখন নিয়মিত নিয়োগ করতে হয় তা জানাতে বাধ্য করে, আবার শক্ত করে মিলিত হয়
- পদ্ধতি ওভারফ্লো,,
loadDataWithA()
....,loadDataWithX()
- নির্ভরতাগুলির জন্য অনুসন্ধানের জন্য বল প্রয়োগ করুন, যেমন কেবলমাত্র
byId()
ক্রিয়াকলাপ সরবরাহ করে providing- প্রচুর নন-অবজেক্ট ভিত্তিক রুটিনগুলির প্রয়োজন, যেমন
findZzzById(zid)
, এবং তারgetYyyIds(zid)
পরিবর্তে insteadz.getY()
- লেনদেনের মধ্যে যদি একটি বৃহত প্রসেসিং ওভারহেড থাকে তবে এটি প্রতিটি একেকটি সংগ্রহে একের পর এক আনতে কার্যকর হতে পারে।
- প্রচুর নন-অবজেক্ট ভিত্তিক রুটিনগুলির প্রয়োজন, যেমন
- এর অংশ করতে আবেদন @Transactional শুধুমাত্র পরিবর্তে দাও
- নেস্টেড লেনদেনের সম্ভাব্য বিবেচনা
- লেনদেন পরিচালনার জন্য অভিযোজিত রুটিনগুলির প্রয়োজন (যেমন, যথেষ্ট পরিমাণে ছোট)
- ছোট প্রোগ্রাম্যাটিক প্রভাব, যদিও বড় লেনদেনের ফলাফল হতে পারে
- ডায়নামিক আনার জন্য প্রোফাইলগুলি সরবরাহ করুন , যেমন,
loadData(id, fetchProfile);
- অ্যাপ্লিকেশনগুলি অবশ্যই কখন প্রোফাইলটি ব্যবহার করবে তা অবশ্যই জানতে হবে
- এওপি ধরণের লেনদেন, উদাহরণস্বরূপ, বিরতিমূলক ক্রিয়াকলাপ এবং প্রয়োজনে লেনদেন সম্পাদন
- বাইট-কোড ম্যানিপুলেশন বা প্রক্সি ব্যবহারের প্রয়োজন
- লেনদেন সম্পাদিত হলে নিয়ন্ত্রণের ক্ষতি
- কালো যাদু, বরাবরের মতো :)
আমি কোন বিকল্প মিস করেছি?
lazy-loaded
আপনার অ্যাপ্লিকেশন ডিজাইনে সম্পর্কের প্রভাব হ্রাস করার চেষ্টা করার সময় আপনার পছন্দের পদ্ধতির কোনটি ?
(ওহ, এবং জন্য দুঃখিত শেষ পরীক্ষিত ওয়েবসাইট )