সার্ভিস লেয়ার বনাম ডিএও - উভয় কেন?


64

আমি স্প্রিংএমভিসি, হাইবারনেট এবং জাভা ওয়েব অ্যাপ্লিকেশন উদাহরণে কিছু ডাটাবেসের সাথে কাজ করছি।

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

আমার প্রশ্ন, পরিষেবা এবং ডিএও ক্লাস উভয়ই একই কাজ করে না? কেন আপনি তাদের উভয়ের প্রয়োজন হবে?

এই টিউটোরিয়ালটি আমি আসলে ব্যবহার করছিলাম: http://fruzenshtein.com/spring-mvc-security-mysql-hibernate/

উত্তর:


60

সাধারণত ডিএও যতটা সম্ভব হালকা এবং এটি কেবলমাত্র ডিবি সংযোগ সরবরাহ করার জন্য উপস্থিত থাকে, কখনও কখনও বিমূর্ত থাকে যাতে বিভিন্ন ডিবি ব্যাকএন্ড ব্যবহার করা যায়।

পরিষেবা স্তরটি ডিএও এবং ক্লায়েন্টকে এবং তার কাছে প্রেরিত ডেটাগুলিতে পরিচালনা করার জন্য যুক্তি সরবরাহ করার জন্য রয়েছে। খুব প্রায়শই এই 2 টুকরা এক সাথে একই মডিউলে এবং কখনও কখনও একই কোডে বান্ডিল করা হবে তবে আপনি এখনও এগুলিকে স্বতন্ত্র যৌক্তিক সত্তা হিসাবে দেখতে পাবেন।

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


1
আমি পরিষেবা এবং দাও স্তরগুলি এবং আপনার ব্যবসায়ের যুক্তিযুক্ত আপনার পরিষেবা স্তরকে পৃথক করার সাথে একমত।
পিটার ডেলানি

উল্লেখ নেই যে 1 টি পরিষেবা বেশ কয়েকটি ডিএও কল করতে পারে, উদাহরণস্বরূপ কোনও ব্যবহারকারীকে সংরক্ষণ করার সময় আপনি ইউজারডাও, ইউজারআর্ডারডাও ইত্যাদির সাথে কথা বলতে পারেন বা আমরা কি প্রতিটিটির জন্য একটি পরিষেবা তৈরি করতে পারি? এবং তারপর এই পরিষেবাগুলির সমস্ত কল করতে পারে?
ফার্মিন সিলভা

40

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

এছাড়াও, বসন্তে, সুরক্ষা আদর্শভাবে পরিষেবা স্তরে প্রয়োগ করা হয়। আপনি এইভাবে পরিবর্তন করতে চান না।


5
আরে, আমার প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ; এটি আপনার ব্লগের উত্সর্গ! দুর্দান্ত উদাহরণের জন্য ধন্যবাদ, লিখতে থাকুন।
জেফ

এটি কিছু সময়ের জন্য আমার মনকে উদ্বেগিত করছিল এবং আমি মনে করি অভিজ্ঞতা এই পরিস্থিতিতে সবচেয়ে বেশি সহায়তা করে। ধন্যবাদ.
উত্কু dezdemir

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

না। পরিষেবা স্তরের শ্রেণিতে একে অপরের উল্লেখ থাকতে পারে (প্রয়োজন হিসাবে) এবং তারা প্রয়োজনীয় পদ্ধতিগুলি কল করতে পারে।
লোকেশ

11

অ্যাডাম বিয়েন তাঁর বইয়ে এই বিষয়টির উল্লেখ করেছেন যে জেপিএ সত্তা ম্যানেজার ডিএওর একটি ভাল সার্বজনীন বাস্তবায়ন:

http://realworldpatterns.com/

জাভা EE বিশ্বে আপনার নিজের ডিএও লেখার দরকার নেই কারণ জেপিএ বাস্তবায়নের মধ্যে একটি রয়েছে। আপনাকে কেবল পরিষেবা স্তরটি লিখতে হবে।

আপনার নিজের ডিএও স্তরটি কার্যকর করা 15 বছর আগের অত্যন্ত দুর্বল জে 2 ই ই আর্কিটেকচারের একটি হ্যাংওভার, তবে এখনও অনেকে এটি করতে বাধ্য হন feel এই কাস্টম ডিএও স্তরগুলি প্রায়শই ফরেনডিং ফাংশন ছাড়া আর কিছুই সরবরাহ করে না যা এন্টি ম্যানেজারে সম্পর্কিত পদ্ধতিটিকে কল করে।

সুতরাং আপনার প্রশ্নের উত্তর দিতে, হ্যাঁ আপনার একটি পরিষেবা স্তর এবং একটি ডিএও প্রয়োজন, তবে আপনাকে কেবল পরিষেবা স্তরটি লিখতে হবে।


2
আমি এটি নিশ্চিত নই যে এটি স্প্রিংয়ের ক্ষেত্রে প্রযোজ্য কিনা - মডেলটির জন্য সর্বদা একটি কাস্টম ডিএও করা দরকার। হতে পারে আপনার বিবৃতি "আপনার নিজের ডিএও লেখার প্রয়োজন প্রায় নেই" EJB পাত্রে / অ্যাপ্লিকেশন সার্ভারে বিশেষভাবে প্রযোজ্য?
ডন চ্যাডল

1
আপনার নিজের (ডিএও / ডিএওআইপিএল) লেখার জন্য এটি আরও ভাল, যদিও এটি কেবল সত্ত্বা ম্যানেজারে মানচিত্র তৈরি করবে - থ্যাটস কারণ ভবিষ্যতে আপনি পরিষেবা লেয়ার কোড পরিবর্তন না করেই অন্য একটি ডিএও বাস্তবায়ন যুক্ত করতে পারেন ।
আহেমেডেবিলিবিব

@ যজলিমাকলো কি পার্থক্য আছে কি বদলাবে?
Alex78191

4

আমি সাধারণত ডিএও'র সমস্ত ডিবি নির্দিষ্ট কোড (ক্যোয়ারী) এবং পরিষেবাগুলিতে লেনদেন পরিচালনা এবং ব্যবসায়িক যুক্তি রাখি put এটি পরিষেবা পদ্ধতিগুলিকে একাধিক দাও জুড়ে পদ্ধতিগুলি আহ্বান করতে এবং এগুলি সমস্ত একই লেনদেনের মধ্যে রাখতে দেয়। আমার মতে, এটি দাও-র জুড়ে আরও ভাল কোড পুনরায় ব্যবহারের মঞ্জুরি দেয়।


2

আমি খুঁজে পেয়েছি যে পরিষেবা স্তরটি বেশিরভাগ ক্ষেত্রে অপ্রয়োজনীয় জটিলতা যুক্ত করে। তত্ত্ব অনুসারে দাও স্তরটিতে ব্যবসায়ের যুক্তি এড়াতে হবে তবে শেষ পর্যন্ত এটি বিভ্রান্তির দিকে পরিচালিত করে, এমনকি কিছু লোক দাও স্তরটিকে সম্পূর্ণরূপে অপসারণ করতে ব্যর্থ হয়েছে কারণ তারা মনে করে যে এটির কোনও মূল্য নেই। http://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer

তবে আপনার যদি একাধিক ব্যবসায়িক লজিক থাকে তবে হ্যাঁ এটি একটি ভাল ধারণা। পরিষেবা স্তর তৈরি করা কতটা জরুরি?


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

@ লেনি গডবার হ্যাঁ, আমি জানি আপনার অনুভূতি আইএমওর ডিএও / সংগ্রহস্থল স্তর থাকা ভাল কারণ এর অসুবিধাগুলি আরও বেশি কারণ আপনি বলছিলেন যে এটি একাধিক ডেটা উত্স পাওয়া খুব সাধারণ
যিশু

-1

আইএমএইচও সার্ভিস স্তরটিকে নিয়ামক এবং ডিএও স্তরটির মধ্যে একটি স্তর হিসাবে বিবেচনা করা যেতে পারে। এই পরিষেবা স্তরটি হ'ল যেখানে আমরা ব্যবসায়ের যুক্তি যুক্ত করতে পারি এবং এমনকি ভিউ দ্বারা রেন্ডার করাতে হবে তার জন্য নির্দিষ্ট একটি রিটার্ন অবজেক্ট তৈরি করতে পারি।

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