আমি এইভাবে কাজ করি (স্ট্রুটস 2 + হাইবারনেট):
আমার স্ট্রটস অ্যাকশনগুলি কেবল ওয়েব ব্রাউজারে তথ্য প্রদর্শন করার জন্য দায়বদ্ধ। ভাবছি না।
ব্যবহারকারী -> ক্রিয়া -> পরিষেবা -> সংগ্রহস্থল -> ডেটা অ্যাক্সেস
বা:
আমি দেখতে চাই -> কীভাবে দেখুন -> কী করবেন -> কীভাবে পাবেন -> কোথায় পাবেন
সুতরাং, প্রথম স্তরে (দেখুন) আমার কাছে এরকম কিছু রয়েছে:
public String execute () {
try {
CourseService cs = new CourseService();
Course course = cs.getCourse(idCourse);
} catch (NotFoundException e) {
setMessageText("Course not found.");
} catch (Exception e) {
}
return "ok";
}
আপনি যেমন দেখেন, আমার "ভিউ" ভাবেন না। এটি একটি নির্দিষ্ট কোর্সটি (কোর্স পরিচালনা করার জন্য) একটি পরিষেবা চাইছে। এই পরিষেবাটি আরও অনেক কিছুই করতে পারে, যেমন রিপোর্ট, সেরেস এবং আরও অনেক কিছু। ফলাফলগুলি সর্বদা একটি তালিকা বা একটি নির্দিষ্ট অবজেক্ট (উদাহরণস্বরূপ)। পরিষেবাগুলি আসল মেশিন, নিয়ম প্রয়োগ করে এবং সংগ্রহস্থল অ্যাক্সেস করে (ডেটা পরিচালনা করতে)।
সুতরাং, আমি যদি আমার পরিষেবাদি, সংগ্রহশালা এবং ডিএওএসকে বিভিন্ন লাইব্রেরিতে রাখি তবে আমি এটি কোনও পাঠ্য-ভিত্তিক প্রোগ্রামে বা উইন্ডো ভিত্তিক ডেস্কটপ সিস্টেমে কিছুই পরিবর্তন না করে ব্যবহার করতে পারি।
পরিষেবাটি কী করতে হবে তা জানে তবে কীভাবে প্রদর্শন করতে হয় তা জানে না। দৃশ্যটি কীভাবে প্রদর্শন করতে হয় তা জানে তবে কী করতে হবে তা জানে না। পরিষেবা / সংগ্রহস্থলগুলির সাথে একই: পরিষেবাটি ডেটা প্রেরণ করে এবং অনুরোধ করে, তবে ডেটা কোথায় এবং কীভাবে তা গ্রহণ করা যায় তা জানে না। সংগ্রহস্থলগুলি "মেক আপ" করে তোলে কাঁচা ডেটা অবজেক্টগুলিকে বিসাইনে করে যাতে পরিষেবাটি কাজ করতে পারে।
কিন্তু সংগ্রহস্থল ডাটাবেস সম্পর্কে কিছুই জানে না। ডেটাবেস ধরণের (মাইএসকিউএল, পোস্টগ্রিসকিউএল, ...) ডিএও-তে উদ্বেগ প্রকাশ করে।
আপনি যদি ডেটাবেস পরিবর্তন করতে চান তবে আপনি ডিএও পরিবর্তন করতে পারবেন এবং এটি অবশ্যই উপরের স্তরগুলিকে প্রভাবিত করবে না। আপনি যদি আপনার ডেটা ম্যানেজমেন্ট আপডেট করতে চান তবে আপনি সংগ্রহস্থল পরিবর্তন করতে পারেন, তবে এটি অবশ্যই ডিএও এবং উপরের স্তরগুলিকে প্রভাবিত করবে না। আপনি যদি আপনার যুক্তি পরিবর্তন করতে চান তবে আপনি পরিষেবাদি পরিবর্তন করতে পারেন, তবে এটি উপরে বা নীচের স্তরগুলির সাথে জঞ্জাল হওয়া উচিত নয়।
এবং আপনি দর্শন, এমনকি প্রযুক্তি (ওয়েব, ডেস্কটপ, পাঠ্য) কিছু পরিবর্তন করতে পারেন তবে এটি নীচের কিছুতে স্পর্শ করে না।
ব্যবসায়িক যুক্তি হ'ল পরিষেবা। তবে কীভাবে এটির সাথে ইন্টারঅ্যাক্ট করবেন তা দেখতে হয়। এখন কি বোতাম দেখাতে হবে? ব্যবহারকারী এই লিঙ্কটি দেখতে পাবে? আপনার সিস্টেমটি কনসোল-ভিত্তিক প্রোগ্রাম বলে মনে করুন: আপনি যদি ভুল ব্যবহারকারী #> myprogram -CourseService -option=getCourse -idCourse=234
এই আদেশটি লেখার জন্য কীগুলি টিপতে বা চয়ন করতে চান তবে আপনাকে অস্বীকার করতে হবে ?
ওয়েব-ভিত্তিক সিস্টেমে কথা বলা (স্ট্রুটস + জাভাইই) আমার একটি পৃথক জিইউআই কন্ট্রোলার প্যাকেজ রয়েছে। ক্রিয়াকলাপে আমি লগইন করা ব্যবহারকারীকে দেই এবং ক্লাসটি আমাকে বোতামগুলি দেয় (বা কোনও ইন্টারফেস উপাদান যা আমি চাই) দেয়।
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
এবং
private List<ActionButton> actionButtons;
এটি পরিষেবাগুলি থেকে দূরে রাখতে ভুলবেন না। এটি ভিউ স্টাফ। স্ট্রটস অ্যাকশনে এটি রাখুন। কোনও ইন্টারফেস ইন্টারঅ্যাকশন অবশ্যই প্রকৃত ব্যবসায়ের কোড থেকে সম্পূর্ণ পৃথক হওয়া উচিত, সুতরাং আপনি যদি আপনার সিস্টেমটি পোর্ট করেন তবে যা প্রয়োজন হবে না তা কাটা সহজ হবে।