অ্যাপ্লিকেশন পরিষেবা স্তর কলিং ডাটাবেস ফাংশন। খারাপ স্থাপত্য?


11

দৃশ্যপট:

  • স্ট্যাক: জাভা, স্প্রিং, হাইবারনেট।
  • মডেল: ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশন।
  • প্যাটার্ন: মডেল-ভিউ-কন্ট্রোলার (এমভিসি)।

পরিষেবা স্তর শ্রেণীর তিনটি আচরণ রয়েছে:

  1. কিছু পরিষেবাদির পদ্ধতিগুলির মধ্যে ব্যবসায়িক নিয়ম থাকে এবং প্রয়োগের জন্য অধ্যবসায় দেয়। ভালো লেগেছে:

    EntityManager.save (সত্তা);

  2. কিছু পরিষেবা কেবল একটি ডাটাবেস ফাংশনকে কল করে (পরামিতিগুলি পাস করে) যেমন:

    CallableStatement cls = con.prepareCall ("database কল ডাটাবেস ফাংশন (আরগস);");

  3. কিছু পরিষেবাদির উভয় আচরণের সাথে পদ্ধতি রয়েছে ।

আমার প্রশ্নগুলো:

  1. অ্যাপ্লিকেশন পরিষেবাগুলি কল করতে সরাসরি সমস্যা আছে - সরাসরি - ডাটাবেস ফাংশন? এটি কি খারাপ অভ্যাস হিসাবে বিবেচিত হয় না? এই জাতীয় প্রকল্পের জন্য প্রযোজ্য কোনও আর্কিটেকচার মডেল কী হবে?
  2. একই পরিষেবাতে আচরণের মিশ্রণে কোনও সমস্যা আছে কি? যেমন লেনদেন এবং ধারাবাহিকতা?
  3. রক্ষণাবেক্ষণের ক্ষেত্রে, এই এনক্যাপসুলেশনটি কী বিকাশকারীকে এটি অস্পষ্ট করে তোলে যে তারও ডাটাবেসের ফাংশনগুলি পরিবর্তন করা উচিত? কীভাবে এড়ানো যায়?
  4. এই দৃশ্যটি কি বিশ্বজুড়ে অন্যান্য অ্যাপ্লিকেশনগুলিতে ঘটে বা এটি কেবল একটি স্থাপত্য ত্রুটি ছিল?

এই প্রশ্নটি একই রকম তবে ঠিক একই নয় .. সফ্টওয়্যারেনজিনিং.স্ট্যাকেক্সেঞ্জার.কমেসেশনস
180012/

উত্তর:


7

অ্যাপ্লিকেশন পরিষেবাগুলি কল করতে সরাসরি সমস্যা আছে - সরাসরি - ডাটাবেস ফাংশন? এটি কি খারাপ অভ্যাস হিসাবে বিবেচিত হয় না?

আমার মনে হয় আছে। আপনি অ্যাপ্লিকেশন পরিষেবাতে ডাটাবেস ইন্টার্নাল সম্পর্কে একটি জ্ঞান রাখছেন। যে কোনও উপায়ে ডাটাবেস পরিবর্তন করা (স্টোরেজ ইঞ্জিন পরিবর্তন করা বা কোনও ক্ষেত্রের নামকরণ বা সূচি তৈরি করা) আপনার অ্যাপ্লিকেশন পরিষেবা পরিবর্তন করতে পারে এবং এটি এসআরপি লঙ্ঘন করে ।

এই জাতীয় প্রকল্পের জন্য প্রযোজ্য কোনও আর্কিটেকচার মডেল কী হবে?

নীচে মন্তব্য দেখুন।

একই পরিষেবাতে আচরণের মিশ্রণে কোনও সমস্যা আছে কি? যেমন লেনদেন এবং ধারাবাহিকতা?

প্রযুক্তিগত সমস্যা আছে বলে আমি বিশ্বাস করি না, তবে একটি যৌক্তিক সমস্যা আছে। আপনি কেবল অ্যাপ্লিকেশনটিতে দুটি পদ্ধতির মিশ্রণ করেছেন যা এটিকে অস্পষ্ট, কম কাঠামোগত, পরিবর্তনের সাথে খাপ খাইয়ে নেওয়া শক্ত করে তোলে। এসআরপি লঙ্ঘন সম্পর্কে উপরের মন্তব্যগুলি দেখুন।

রক্ষণাবেক্ষণের ক্ষেত্রে, এই এনক্যাপসুলেশনটি কী বিকাশকারীকে এটি অস্পষ্ট করে তোলে যে তারও ডাটাবেসের ফাংশনগুলি পরিবর্তন করা উচিত?

অবশ্যই এটি।

কীভাবে এড়ানো যায়?

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

এই দৃশ্যটি কি বিশ্বজুড়ে অন্যান্য অ্যাপ্লিকেশনগুলিতে ঘটে বা এটি কেবল একটি স্থাপত্য ত্রুটি ছিল?

আমার মনে হয় আমাদের বিশ্বে সবকিছু ঘটে;)


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

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

1
এই রেখার জন্য +1 আমি মনে করি আমাদের পৃথিবীতে সবকিছু ঘটে;)
লিনাক্সুনিল

@ লিনাক্সুনিল এসআরপিকে আর্কিটেকচারের সমস্ত স্তরে সম্মান করা উচিত। আমার ক্ষেত্রে আমি পরিষেবা স্তরে এসআরপি বলতে চাইছি, পদ্ধতি স্তরে নয়। @ জিমি জেমস হ্যাঁ বেশিরভাগ ওআরএম সঞ্চিত পদ্ধতিতে ভাল কাজ করে না। তবে কখনও কখনও সঞ্চিত প্রক্রিয়া প্রয়োজনীয় হয়।
ভ্লাদিস্লাভ রাস্ট্রুসনি

3

আপনি যা বলেছিলেন সে অনুযায়ী একটি পরিষেবা স্তর রয়েছে সুতরাং যে স্থাপত্য নিদর্শনটি উপযুক্ত বলে মনে হয় তা হ'ল স্তরযুক্ত আর্কিটেকচার। আরও রেফারেন্স

হ্যাঁ, সাধারণত ডেটা অ্যাক্সেস স্তর ছাড়া অন্যটিতে সরাসরি ডাটাবেস কল করা খারাপ অভ্যাস, এইভাবে ব্যবসায়ের স্তরটি কেবল ডাটাবেসের বিমূর্ততা অ্যাক্সেস করে।

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

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


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

এটা কি এক নীতিমালা নয়?
জে পিচার্ডো

3
ন। SOLID এ "এস" হ'ল এস ইনগেল দায়িত্বশীলতার অধ্যক্ষ (এসআরপি)। তবে উদ্বেগগুলি আলাদা করা, যা আপনি সুপারিশ করছেন এটি ডেটা অ্যাক্সেস লজিক থেকে পরিষেবা যুক্তিকে আলাদা করার জন্য একটি বৈধ কারণ। ভ্লাদিস্লাভের অন্য উত্তরে সিঙ্গল দায়বদ্ধতার অধ্যক্ষের উল্লেখ রয়েছে। স্পষ্টতই, কনসার্নগুলির এসআরপি এবং পৃথকীকরণ ওয়াইন এবং পনির মতো ভালভাবে একসাথে চলে।
গ্রেগ বার্গার্ট 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.