আরবিএসফুল সার্ভিসের কাঠামো জাভা স্প্রিংয়ের সাথে শুরুর জন্য Spring


12

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

আমার বর্তমান অনুমানটি হল আমার রেস্টস্টুল সার্ভিসে নিম্নলিখিত কাঠামো থাকবে:

  • ডাটাবেস ডেটা (এসকিউএল)।
  • একটি ওআরএম (আমি সিপিও নামক অপেক্ষাকৃত অপ্রচলিত ওআরএম ব্যবহার করছি, তবে এটি কেবলমাত্র বেশিরভাগ লোকের সাথে হাইবারনেটে প্রতিস্থাপন করা হবে)।
  • একটি জাভা ব্যবস্থাপক শ্রেণীর সাথে এমন পদ্ধতি যা ডেটা পাওয়ার জন্য ORM এর সাথে কথা বলে
  • একটি জাভা নিয়ামক শ্রেণি / শ্রেণি যা ম্যাপিংয়ের অনুরোধটি @ResponseBodyপরিচালনা করে এবং ইউআরএল এবং HTTP ক্রিয়াকলাপগুলির মাধ্যমে ডেটা পরিচালনা করা হয় তার ক্রিয়াগুলি পরিচালনা / পরিচালনা করতে ব্যবহার করে ( http://mysite.com/computers/dellGET "ডেল" শব্দের সাহায্যে অনুরোধ হতে পারে ইউআরএলে এমন একটি পরামিতি যা ডেল কম্পিউটারগুলি সম্পর্কিত কোনও জেএসওএন অ্যারের ফিরিয়ে দেবে)।
  • এই পরিষেবাটি স্প্রিং বুট দিয়ে করা উচিত, বা কোনওভাবে একা দাঁড়িয়ে থাকতে এবং অন্য কোনও অ্যাপ্লিকেশন থেকে স্বাধীন হতে সক্ষম হতে হবে।

এখন ধরে নিচ্ছি যে উপরেরটি সঠিক, তবে আমার কাছে (খুব বেসিক স্তরে) একটি রেস্ট্রফুল সার্ভিস ছিল যা কোনও অ্যাপ্লিকেশন ডেটা গ্রহণ ও ব্যবহার করতে পারে।

সুতরাং বলুন আমি তখন আমার ওয়েব অ্যাপ্লিকেশন আছে। ধরা যাক আমি কম্পিউটার হার্ডওয়্যার তথ্য সম্পর্কে একটি ওয়েব অ্যাপ তৈরি করছি এবং আমি এই ওয়েব অ্যাপটি তৈরি করতে স্প্রিং ব্যবহার করছি। আমার অনুমানগুলি এখানে:

  • জেএসপি হিসাবে আমার বেশ কিছু ভিউ থাকতে হবে, জেএসপিগুলিতে এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্ট অন্তর্ভুক্ত রয়েছে। জাভাস্ক্রিপ্ট এই অ্যাপ্লিকেশনটির নিয়ামককে প্রয়োজন অনুসারে (নীচে) এজেএক্স কলগুলি পরিচালনা করবে।
  • এই ওয়েব অ্যাপ্লিকেশনটির ইউআরএল অনুরোধগুলি এবং রাউটিং পরিচালনা করার জন্য তার নিজস্ব নিয়ামকও থাকবে এবং নিয়ামক তারপরে, ModelAndViewআরএসটিফুল সার্ভিসের নিয়ামককে "কথা বলার" জন্য এই লাইনগুলির সাথে অবজেক্ট বা কিছু ব্যবহার করবে, যা যা যা যা করা হচ্ছে তা প্রাপ্ত করবে obtain , প্রদর্শনের জন্য সেই ডেটা ভিউতে ফিরে যান (জাভাস্ক্রিপ্ট, জেএসপি, ইত্যাদি ...)।

আমি কি এখানে সঠিক পথে আছি? আমি বুঝতে পেরেছি যে RESTful পরিষেবাদির একটি প্রমাণীকরণের দিকটিও রয়েছে, তবে আমি এখনও ধারণাগতভাবে সেখানে নেই (এবং আমার প্রকল্পটি একটি ব্যক্তিগত নেটওয়ার্কে ব্যবহৃত হচ্ছে সুতরাং নিরাপত্তা এই মুহুর্তে অগ্রাধিকার নয়)।

কোন অন্তর্দৃষ্টি, সমালোচনা, জ্ঞান, প্রতিক্রিয়া, বা স্পষ্টকরণ প্রশংসিত হয়।

উত্তর:


19

আপনার বসন্তের বিশ্রামের অ্যাপ্লিকেশনটির জন্য কাঠামোর আমার প্রিয় একটি উদাহরণ এখানে।

1. স্তর পৃথককরণ, প্রতিটি স্তর একটি পৃথক মডিউল / প্রকল্প

  • REST এপিআই
    • হিসাবে প্যাকেজ যুদ্ধ (হতে পারে বয়াম যদি আপনি ব্যবহার করছেন বসন্ত বুট এমবেডেড সার্ভারের সাথে। স্প্রিং বুট ডক পরিষ্কারভাবে ব্যাখ্যা কি ভাবে সেটি কলে-স্থাপন করতে বয়াম পণ্য । এটি মারাত্মক সহজ।)
    • এটিতে বিশ্রাম নিয়ন্ত্রণকারী রয়েছে যা অনুরোধ / প্রতিক্রিয়াগুলি পরিচালনা করে handle
    • নীচে পরিষেবা মডিউল উপর নির্ভর করে
  • সেবা
    • বয়াম হিসাবে প্যাকেজড
    • ব্যবসায়িক যুক্তি বিমূর্ততা, এই স্তরের ডেটাসোর্সের সাথে কীভাবে যোগাযোগ করবেন তার কোনও ধারণা নেই।
    • এটি রেস্ট কন্ট্রোলারগুলিতে স্বীকৃত হবে
    • নীচে ডিএও / সংগ্রহস্থল মডিউল নির্ভর করে
  • দাও / সংগ্রহস্থলের প্রয়োগ
    • বয়াম হিসাবে প্যাকেজড
    • সরাসরি ডেটা উত্সের সাথে কথা বলে, অপারেশনগুলি সাধারণত CRUD হিসাবে পরিচিত। এটি সাধারণ জেডিবিসি, জেপিএ, এমনকি ফাইল অ্যাক্সেস হতে পারে।
    • নীচে ডোমেন মডিউল উপর নির্ভর করে
  • ডোমেইন
    • বয়াম হিসাবে প্যাকেজড
    • এটিতে আপনার ডোমেন মডেল রয়েছে, সাধারণত POJO ক্লাস থাকে। আপনি যদি ওআরএম ব্যবহার করে থাকেন তবে সেগুলি ওআরএম সত্তা।
    • এটিতে ডিটিওও (ডেটা ট্রান্সফার অবজেক্ট) থাকতে পারে, যা এখনও উত্তপ্ত বিতর্কের মধ্যে রয়েছে। এটি ব্যবহার করুন বা না আপনার কল।
  • আপনি আরও মডিউল যুক্ত করতে পারেন যেমন ইউটিলিটি, তৃতীয় পক্ষের ইন্টিগ্রেশন ইত্যাদি the

2. বিল্ড / ডিপেন্ডেন্সি ম্যানেজমেন্ট সরঞ্জাম (খুব প্রয়োজনীয় আইএমএইচও)

এগুলিতে প্রচুর পরিমাণ রয়েছে, গুগল অনুসন্ধান আপনাকে দেখাবে। আমি ব্যক্তিগতভাবে স্পেনের সাথে মাভেনকে পছন্দ করি । এটি কেবল উপরের প্রকল্প কাঠামোর জন্য কাজ করে।
আরও মনে রাখবেন যে আপনি যদি মভেন ব্যবহার করছেন তবে একটি প্যারেন্ট মডিউল রয়েছে যা বিভাগ 1 এ আলোচনা করা সমস্ত মডিউলগুলিকে একত্রিত করে All সমস্ত বুলেট পয়েন্টের মডিউলগুলিও মভেন মডিউলগুলির সাথে সম্পর্কিত।

৩. আপনার বিশেষ প্রকল্পের জন্য চিন্তাভাবনা

যেহেতু আপনি বিশ্রাম ব্যবহার করছেন তাই আমি আপনাকে সুপারিশ করব যে আপনি জেএসপিটিকে নিজের মতামত হিসাবে ব্যবহার করবেন না। আপনি আপনার মতামত হিসাবে সরল এইচটিএমএল 5 + জাভাস্ক্রিপ্ট বা অ্যাঙ্গুলারজেএস এর মতো কিছু জনপ্রিয় কাঠামো ব্যবহার করতে পারেন।
আপনি যদি জেএসপি ব্যবহারের জন্য জেদ করেন তবে আপনার অন্য একটি যুদ্ধের (ওয়েব অ্যাপ) প্রবর্তন করতে হবে যার নিয়ন্ত্রণকারী এবং জেএসপি রয়েছে। কন্ট্রোলার ডেটা পাবেন (সাধারনত জসন / এক্সএমএল ফর্ম্যাট) এবং তারপরে এগুলি আপনার মডেলগুলিতে পার্স করুন (পিওজিও) যাতে আপনার জেএসপি এগুলি আপনার নিয়ামকের কাছ থেকে নিতে পারে এবং প্রদর্শন করতে পারে। জেএসপি থেকে ডেটা পোস্ট করা বিপরীত, আমি এখানে বাদ দিয়েছি।

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


1
ডোমেনটি সাধারণত ব্যবসায়িক যুক্তিযুক্ত স্তর। ডোমেনটি সাধারণত পরিষেবাগুলি যুক্ত স্তর হিসাবেও বিবেচিত হয়। ডোমেন অবজেক্টগুলি সরল POJOs নয়, ডোমেন অবজেক্টে যুক্তি বৈধতা এবং এর মতো ব্যবসায়ের যুক্তি থাকতে হবে। স্তরটির অন্য কোনও নামকরণ করা সম্ভবত ভাল। একাধিক উত্স থেকে আপনার ডোমেন অবজেক্টগুলিতে ডেটা স্থানান্তর করার জন্যও প্রায়শই ভাণ্ডার স্তর ব্যবহৃত হয়।
অ্যান্ডি

পরিষেবা এবং সংগ্রহস্থল মডিউলগুলিও বসন্তের প্রকল্পগুলি হবে?
গ্লেন ভ্যান শিল

1
@ গ্লেনভ্যানশিল নং, পুরো প্রকল্পটি তৈরি হওয়ার পরে এটি স্প্রিং প্রকল্পগুলি হবে না /, রেপো / পরিষেবা স্তরটি ক্লাসপথে অন্তর্ভুক্ত করা হবে। @Autowireফলে কাজ করবে।
মিনজুন ইউ

@ মিনজুন ইউ সাফ জবাবের জন্য ধন্যবাদ! তবে আপনার রেপো / পরিষেবাটির জন্য পরিষেবা, সংগ্রহশালা বা উপাদান টীকাগুলির জন্য মেভেন নির্ভরতা হিসাবে বসন্তের দরকার আছে আমি ঠিক আছি?
গ্লেন ভ্যান শিল

1
@ গ্লেনভানশিল আপনি যদি পিতামাতা মডিউলের pom.xml- তে সমস্ত বসন্তের মেভেন নির্ভরতা রাখেন তবে শিশু মডিউলগুলিতে (রেপো / পরিষেবা মডিউল) কোনও বসন্ত সম্পর্কিত নির্ভরতা যুক্ত করার দরকার নেই। বসন্তে একাধিক মডিউল প্রকল্পগুলি বিন্যাসের এটি একটি উপায়। উদ্দেশ্য আপনার কোডটি সংগঠিত করা। যদি আপনার প্রকল্পটি এত বড় না হয় এবং আগাম ভবিষ্যতে কোনও পরিবর্তন না ঘটে, আপনি "মুল" নামক একই মডিউলে ডোমেন, রেপো, পরিষেবা একত্রিত করতে পারেন। এটি আরও পরিষ্কার দেখায়।
মিনজুন ইউ

2

@ মিনজুন.ওয়াইয়ের বেশিরভাগ উত্তরের সাথে একমত হওয়ার পরেও আমি মনে করি যে আমি আরইএসটি এবং ওয়েব পৃষ্ঠার স্তরের দিকে কিছুটা আলাদা পন্থা নিয়ে যাব। আপনার প্রশ্নটি আমার পড়া থেকে, আমি মনে করি আপনি একটি ওয়েব ইন্টারফেস এবং একটি REST ইন্টারফেস উভয়ই বাইরের বিশ্বে প্রকাশ করতে চাইছেন। ডাটাবেস থেকে POJO গুলি পড়ে, তথ্যটিকে JSON এ রূপান্তরিত করে, এবং জেএসপিদের দ্বারা গ্রাহ্য করার জন্য POJO- তে ফিরিয়ে নেওয়া খুব কম।

আমি পরিষেবা স্তরটিকে সমস্ত আসল কাজ করার পক্ষে এবং ওয়েব অ্যাপ (জেএসপি) এবং আরইএসটি নিয়ন্ত্রণকারীটির জন্য পৃথক "উপস্থাপনা" স্তর যুক্ত করার পক্ষে চাই favor এগুলি পৃথক নিয়ন্ত্রক হবে, যার মধ্যে পরিষেবাটি ইনজেকশনের ব্যবস্থা করা হবে। বিকল্পভাবে, কেবলমাত্র একটি আরএসটি পরিষেবা নিয়ে যান এবং পূর্ববর্তী উত্তর অনুসারে ক্লায়েন্টের পক্ষে সমস্ত উপস্থাপনা যুক্তি তৈরি করুন।

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

বিটিডাব্লু, আমি বিল্ড এবং নির্ভরতা পরিচালনার সরঞ্জামগুলির সাথে গতি বাড়ানোর প্রয়োজনটিকে আরও জোরদার করব। আপনার প্রকল্পটি কোনও যুক্তিসঙ্গত আকারে বাড়ার পরে আপনার সেগুলি প্রয়োজন। মাভেন, জেনকিনস এবং নেক্সাসের মতো ফ্রি সরঞ্জামগুলি রিলিজ ম্যানেজমেন্টকে কোনও সমস্যা কম করে of

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.