আসুন জাভা ভিত্তিক ওয়েব অ্যাপ্লিকেশন আর্কিটেকচার শেয়ার করি!
ওয়েব অ্যাপ্লিকেশনগুলির জন্য প্রচুর বিভিন্ন আর্কিটেকচার রয়েছে যা জাভা ব্যবহার করে প্রয়োগ করা যেতে পারে। এই প্রশ্নের উত্তরগুলি তাদের পক্ষে মতামত সহ বিভিন্ন ওয়েব অ্যাপ্লিকেশন ডিজাইনের লাইব্রেরি হিসাবে কাজ করতে পারে। যদিও আমি উপলব্ধি করেছি যে উত্তরগুলি বিষয়ভিত্তিক হবে, আসুন আমরা যতটা উদ্দেশ্যমূলক হতে চেষ্টা করি এবং আমাদের তালিকাভুক্ত উপকারিতা এবং বুদ্ধি প্রেরণা দেয়।
আপনার আর্কিটেকচারের বর্ণনা দেওয়ার জন্য আপনি যে বিশদ স্তরটি পছন্দ করেন তা ব্যবহার করুন। আপনার উত্তরের যে কোনও মূল্য হতে পারে তার জন্য আপনাকে আর্কিটেকচারে বর্ণিত প্রধান প্রযুক্তিগুলি এবং ধারণাগুলি কমপক্ষে বর্ণনা করতে হবে। এবং সর্বশেষে তবে সর্বনিম্ন নয়, কখন আমরা আপনার স্থাপত্যটি ব্যবহার করব?
আমি শুরু করব...
স্থাপত্যের ওভারভিউ
আমরা সূর্য থেকে জাভা ইই, জাভা পার্সেস্টন এপিআই, সার্ভলেট এবং জাভা সার্ভার পৃষ্ঠাগুলির মতো ওপেন স্ট্যান্ডার্ডের ভিত্তিতে একটি 3-স্তরের আর্কিটেকচার ব্যবহার করি।
- অধ্যবসায়
- ব্যবসায়
- উপহার
স্তরগুলির মধ্যে সম্ভাব্য যোগাযোগ প্রবাহগুলি প্রতিনিধিত্ব করে:
Persistence <-> Business <-> Presentation
উদাহরণস্বরূপ যার অর্থ হল যে উপস্থাপনা স্তরটি কখনও কল করে না বা জেদী ক্রিয়াকলাপ সম্পাদন করে না, এটি সর্বদা এটি ব্যবসায় স্তর দ্বারা করে does এই আর্কিটেকচারটি একটি উচ্চ প্রাপ্যতা ওয়েব অ্যাপ্লিকেশনগুলির চাহিদা পূরণের উদ্দেশ্যে।
অধ্যবসায়
( সিআরইউডি ) জেদী ক্রিয়াকলাপ তৈরি, পড়ুন, আপডেট করুন এবং মুছুন সম্পাদন করে। আমাদের ক্ষেত্রে আমরা ( জাভা পার্সেন্টিশন এপিআই ) জেপিএ ব্যবহার করছি এবং আমরা বর্তমানে হাইবারনেটকে আমাদের অধ্যবসায় সরবরাহকারী হিসাবে ব্যবহার করি এবং এর অ্যান্টিটি ম্যানেজারটি ব্যবহার করি ।
এই স্তরে একাধিক ক্লাস, যেখানে সত্ত্বা একটি নির্দিষ্ট ধরনের সঙ্গে প্রতিটি বর্গ পুলিশ (ক শপিং কার্ট এর সাথে সম্পর্কিত অর্থাত সত্ত্বা একটি একক অধ্যবসায় বর্গ দ্বারা পরিচালিত পেতে পারে) করা হয়েছে বিভক্ত করা হয় ব্যবহার করা একের পর এবং শুধুমাত্র এক পরিচালক ।
উপরন্তু এই স্তর এছাড়াও সঞ্চয় করে JPA সত্ত্বা যা কিছু মত Account
, ShoppingCart
ইত্যাদি
ব্যবসায়
ওয়েব অ্যাপ্লিকেশন কার্যকারিতার সাথে যুক্ত সমস্ত যুক্তি এই স্তরে অবস্থিত। এই কার্যকারিতাটি কোনও গ্রাহক যে তার / তার ক্রেডিট কার্ড ব্যবহার করে অনলাইনে কোনও পণ্যের জন্য অর্থ দিতে চায় তার জন্য অর্থ স্থানান্তর শুরু করতে পারে। এটি ঠিক নতুন ব্যবহারকারী তৈরি করা, কোনও ব্যবহারকারীকে মুছে ফেলা বা ওয়েব ভিত্তিক গেমের যুদ্ধের ফলাফল গণনা করাও হতে পারে।
এই স্তরে একাধিক শ্রেণীতে ভাগ করা হয় এবং এই ক্লাস সাথে সটীক হয় @Stateless
একটি পরিণত Stateless সেশন সিম (SLSB)। প্রতিটি এসএলএসবিকে একজন ম্যানেজার বলা হয় এবং উদাহরণস্বরূপ বলা যায় ম্যানেজারকে ক্লাস টিকা দেওয়া যেতে পারে AccountManager
।
যখন AccountManager
সিআরইউডি অপারেশন করার দরকার হয় তখন এটির জন্য যথাযথ কল হয় AccountManagerPersistence
, যা অধ্যবসায় স্তরের শ্রেণি। দুটি পদ্ধতির মোটামুটি স্কেচ AccountManager
হতে পারে:
...
public void makeExpiredAccountsInactive() {
AccountManagerPersistence amp = new AccountManagerPersistence(...)
// Calls persistence layer
List<Account> expiredAccounts = amp.getAllExpiredAccounts();
for(Account account : expiredAccounts) {
this.makeAccountInactive(account)
}
}
public void makeAccountInactive(Account account) {
AccountManagerPersistence amp = new AccountManagerPersistence(...)
account.deactivate();
amp.storeUpdatedAccount(account); // Calls persistence layer
}
আমরা ধারক ব্যবস্থাপক লেনদেনগুলি ব্যবহার করি যাতে আমাদের নিজের স্বতন্ত্রের লেনদেন করতে হয় না। হুডের নীচে মূলত যা ঘটে তা হ'ল এসএলএসবি পদ্ধতিতে প্রবেশের সময় আমরা কোনও লেনদেন শুরু করি এবং পদ্ধতিটি বেরোনোর অবিলম্বে এটি (বা এটি রোলব্যাক) প্রতিশ্রুতিবদ্ধ। এটি কনফিগারেশন ওভার কনভেনশনের একটি উদাহরণ, তবে আমাদের ডিফল্ট, আবশ্যক, ছাড়া আর কোনও প্রয়োজন নেই।
এখানে সূর্যের জাভা EE 5 টি টিউটোরিয়ালটি এন্টারপ্রাইজ জাভাবীনের (ইজেবি) এর প্রয়োজনীয় লেনদেনের বৈশিষ্ট্যটি ব্যাখ্যা করে :
যদি ক্লায়েন্ট কোনও লেনদেনের মধ্যে চলছে এবং এন্টারপ্রাইজ বিনের পদ্ধতিটি আহ্বান করে, পদ্ধতিটি ক্লায়েন্টের লেনদেনের মধ্যেই কার্যকর করে। যদি ক্লায়েন্ট কোনও লেনদেনের সাথে যুক্ত না হয় তবে ধারকটি পদ্ধতিটি চালানোর আগে একটি নতুন লেনদেন শুরু করে।
প্রয়োজনীয় বৈশিষ্ট্যটি ধারক-পরিচালিত লেনদেনের সীমাবদ্ধতার সাথে চলমান সমস্ত এন্টারপ্রাইজ শিম পদ্ধতিগুলির জন্য অন্তর্ভুক্ত লেনদেনের বৈশিষ্ট্য। আপনার অন্য কোনও লেনদেনের বৈশিষ্ট্যটি ওভাররাইড করার প্রয়োজন না হলে আপনি সাধারণত প্রয়োজনীয় বৈশিষ্ট্যটি সেট করেন না। কারণ লেনদেনের বৈশিষ্ট্যগুলি ঘোষিত, আপনি পরে এগুলি সহজেই পরিবর্তন করতে পারেন।
উপহার
আমাদের উপস্থাপনা স্তর ... উপস্থাপনার দায়িত্বে আছে! এটি ব্যবহারকারীর ইন্টারফেসের জন্য দায়ী এবং এইচটিএমএল পৃষ্ঠাগুলি তৈরি করে এবং জিইটি এবং পোস্ট অনুরোধের মাধ্যমে ব্যবহারকারীর ইনপুট গ্রহণ করে তথ্য প্রদর্শন করে। আমরা বর্তমানে পুরানো সার্লেটের + জাভা সার্ভার পৃষ্ঠাগুলি ( জেএসপি ) সংমিশ্রণটি ব্যবহার করছি।
ব্যবহারকারীর অনুরোধকৃত ক্রিয়াকলাপ সম্পাদন করতে এবং ওয়েব পৃষ্ঠায় প্রদর্শন করার জন্য তথ্য গ্রহণের জন্য স্তরটি ব্যবসায়ের স্তর পরিচালকদের পদ্ধতিগুলি কল করে । কখনও কখনও ব্যবসায়ের স্তর থেকে প্রাপ্ত তথ্য কম জটিল প্রকারের String
এবং int
ইজারগুলির মতো হয় এবং অন্য সময়ে জেপিএ সত্তা ।
আর্কিটেকচারের সাথে পেশাদার এবং কনস
পেশাদাররা
- এই স্তরে অধ্যবসায়ের একটি নির্দিষ্ট পদ্ধতির সাথে সম্পর্কিত সমস্ত কিছুর অর্থ হ'ল আমরা ব্যবসায় স্তরটিতে পুনরায় কিছু না লিখে, জেপিএকে অন্য কোনও কিছুর মধ্যে পরিবর্তন করতে পারি।
- আমাদের উপস্থাপনা স্তরটিকে অন্য কোনও কিছুর মধ্যে অদলবদল করা সহজ এবং আমরা আরও ভাল কিছু আবিষ্কার করতে পারলে সম্ভবত এটিই সম্ভব।
- ইজেবি কনটেইনারটি লেনদেনের সীমানা পরিচালনা করতে দেওয়া দুর্দান্ত।
- সার্লেটের + জেপিএ ব্যবহার করা সহজ (শুরু করা) এবং প্রযুক্তিগুলি প্রচুর সার্ভারে ব্যাপকভাবে ব্যবহৃত হয় এবং প্রয়োগ করা হয়।
- জাভা EE ব্যবহার করলে আমাদের সঙ্গে একটি উচ্চ প্রাপ্যতা সিস্টেম তৈরি করার জন্য করা অনুমিত হয় ভারসাম্য বজায় রাখার এবং উপর ব্যর্থ । উভয়ই আমরা অনুভব করি যে আমাদের অবশ্যই থাকতে হবে।
কনস
- জেপিএ ব্যবহার করে আপনি প্রায়শই
@NamedQuery
জেপিএ সত্তা শ্রেণিতে টীকাগুলি ব্যবহার করে নামযুক্ত ক্যোয়ারী হিসাবে ব্যবহৃত প্রশ্নগুলি সংরক্ষণ করতে পারেন । আমাদের আর্কিটেকচারের মতো আপনার যদি অধ্যবসায়ী ক্লাসে দৃistence়তার সাথে সম্পর্কিত যতটা সম্ভব সম্ভব হয়, এটি জেপিএ সত্তাগুলিও অন্তর্ভুক্ত করার জন্য আপনার অনুসন্ধানগুলি পেতে পারে এমন জায়গাগুলি ছড়িয়ে দেবে। অধ্যবসায় ক্রিয়াকলাপ পর্যালোচনা করা কঠিন এবং এইভাবে বজায় রাখা আরও কঠিন। - আমাদের অধ্যবসায় স্তরের অংশ হিসাবে আমাদের জেপিএ সত্তা রয়েছে। কিন্তু
Account
এবংShoppingCart
, এগুলি কি আসলে ব্যবসায়ের জিনিস নয়? আপনার এই ক্লাসগুলিকে স্পর্শ করতে হবে এবং তাদের এমন সত্তায় রূপান্তর করতে হবে যা জেপিএ কীভাবে পরিচালনা করতে জানে সেভাবে এটি করা হয় is - জেপিএ সত্তা, যা আমাদের ব্যবসায়িক অবজেক্টও ডেটা ট্রান্সফার অবজেক্টস ( ডিটিও'র ) এর মতো তৈরি করা হয়, যা মান অবজেক্টস (ভিও) হিসাবে পরিচিত। এটি অ্যানিমিক ডোমেন মডেলটির ফলস্বরূপ কারণ ব্যবসায়িক সামগ্রীর অ্যাক্সেসর পদ্ধতি ছাড়া নিজস্ব কোনও যুক্তি নেই। সমস্ত যুক্তি ব্যবসায়িক স্তরে আমাদের পরিচালকদের দ্বারা করা হয়, যার ফলে আরও প্রক্রিয়াগত প্রোগ্রামিং শৈলীর ফলাফল হয়। এটি ভাল অবজেক্ট ওরিয়েন্টড ডিজাইন নয়, তবে সম্ভবত এটি কোনও সমস্যা নয়? (সমস্ত অবজেক্টের পরেও কেবল প্রোগ্রামিং দৃষ্টান্ত নয় যা ফলাফল সরবরাহ করেছে))
- ইজেবি এবং জাভা ইই ব্যবহার করা কিছুটা জটিলতার পরিচয় দেয়। এবং আমরা বিশুদ্ধরূপে হুল বিড়াল ব্যবহার করতে পারবেন না (একটি EJB মাইক্রো-ধারক যোগ নয় বিশুদ্ধরূপে হুল বিড়াল)।
- সার্লেটের + জেপিএ ব্যবহার করে প্রচুর সমস্যা রয়েছে। এই সমস্যাগুলি সম্পর্কে আরও তথ্যের জন্য গুগল ব্যবহার করুন।
- ব্যবসায়ের স্তর থেকে বেরিয়ে আসার সময় লেনদেনগুলি বন্ধ থাকায় আমরা
fetch=FetchType.LAZY
উপস্থাপনা স্তরটির অভ্যন্তর থেকে যখন প্রয়োজন (ব্যবহার করে ) প্রয়োজন হয় তখন ডাটাবেস থেকে লোড করার জন্য কনফিগার করা জেপিএ সত্তা থেকে কোনও তথ্য লোড করতে পারি না । এটি একটি ব্যতিক্রম ট্রিগার করবে। এই ধরণের ক্ষেত্রগুলি সহ একটি সত্তা ফেরত দেওয়ার আগে আমাদের অবশ্যই প্রাসঙ্গিক গেটেরকে কল করতে হবে। আরেকটি বিকল্প হ'ল জাভা পার্সিস্টেন্স কোয়েরি ল্যাঙ্গুয়েজ ( জেপিকিউএল ) ব্যবহার করা এবং এFETCH JOIN
। তবে এই দুটি অপশনই কিছুটা জটিল।