ডাব্লুসিএফ / এসওএ - সাধারণ অনুরোধগুলির জন্য কেন আমি প্যারামিটার অবজেক্ট তৈরি করব


12

আমাদের সংস্থাটি মোটামুটি বড় এসওএ উদ্যোগ শুরু করছে। আমরা এখন অনেকগুলি জিনিস ঠিকঠাক করছি: ভাল যোগাযোগ আছে; সরঞ্জামের জন্য উপযুক্ত যেখানে অর্থ; এবং উত্তরণে আমাদের সহায়তা করার জন্য আমরা কিছু ভাল দক্ষতা এনেছি।

আমরা সেই মানগুলি বিকাশের চেষ্টা করছি যা আমরা একটি গোষ্ঠী হিসাবে অনুসরণ করতে পারি, এবং প্রস্তাবিত মানগুলির মধ্যে একটি আমাকে কিছুটা বিরক্ত করছে:

আমরা সেই প্যাটার্নটিতে প্রমিতকরণ করেছি যেখানে প্রতিটি ক্রিয়াকলাপ একটি অনুরোধের অবজেক্ট গ্রহণ করে এবং প্রতিক্রিয়া অবজেক্টটি প্রদান করে।

আমি বুঝতে পারি যে এটি অনেক লোকের কাছে কম-বেশি একটি আদর্শ পদ্ধতির, তবে আমি জিজ্ঞাসা করছি কেন আমাকে বিরক্ত করা উচিত? (আমি প্রাপ্ত জ্ঞানের সাথে তেমন ভাল নই, আমার কিছু কেন দরকার)।

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

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

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

আমার প্রশ্ন হ'ল কেন আমাকে স্বয়ংক্রিয়ভাবে অনুরোধ এবং প্রতিক্রিয়াগুলি মোড়ানো উচিত যখন:

  • এটি সহজ পরিষেবাগুলিকে কম ভাবপূর্ণ করে তোলে
  • আপনি কোনও জটিল পরিষেবার জন্য যাইহোক এটি করবেন
  • ডাব্লুসিএফ যাইহোক একটি অনুরোধ / প্রতিক্রিয়া বার্তা তৈরি করে

আমি এই পদ্ধতির পক্ষে নিম্নলিখিত যুক্তি খুঁজে পেয়েছি:

এটি objectচ্ছিক পরামিতিগুলিকে অনুরোধের বস্তুতে পিছলে যাওয়ার অনুমতি দিয়ে সংস্করণটিকে সমর্থন করে।

দিনের আগে, আমি বেশ কিছুটা COM করেছিলাম এবং আমি এটি সংস্করণকরণের জন্য প্রায় একটি বিরোধী-প্যাটার্ন হিসাবে বিবেচনা করব। কিছু জিনিসগুলির জন্য, আমি মনে করি এটি সাহায্য করবে তবে আমি আশা করি এটি যেখানে সাহায্য করবে সেখানে আপনার ইতিমধ্যে কোনও প্যারামিটার অবজেক্ট রয়েছে।

এটি সাধারণ ডেটা এবং আচরণকে একটি বেস শ্রেণিতে বিচ্ছিন্ন করার অনুমতি দেয়

এটি আমার সাথে কিছুটা ওজন বহন করে।

এটি একটি আরপিসির স্টাইল আচরণ থেকে এবং মেসেজিং আচরণের দিকে লোককে দূরে সরিয়ে দেয়

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

আমি সম্ভবত 300 পদ্ধতির স্বাক্ষরগুলিকে পুনর্বিবেচনা করতে দেখছি, সুতরাং এটি ব্যথা একটি অ-ক্ষুদ্র পরিমাণ। আমি বাস্তবায়নের ক্ষেত্রে ধারাবাহিকতার একটি বিশাল ফ্যান, তাই আমি ব্যথা নিতে ইচ্ছুক, এটি কেবল এটি জানতে সাহায্য করবে যে শেষ পর্যন্ত এটি সমস্ত মূল্যবান হবে।

উত্তর:


3

আমি মনে করি সংস্করণটি সম্ভবত সেরা যুক্তি। যখন আপনার কোনও বিদ্যমান অপারেশন চুক্তি রয়েছে

int GetPersons(int countryId);

আপনি যেটি উন্নত করতে চান, উদাহরণস্বরূপ পরে অন্য ফিল্টার দ্বারা

int GetPersons(int countryId, int age);

আপনাকে একটি নতুন অপারেশন চুক্তি এবং একটি নতুন নাম লিখতে হবে যেহেতু এটি অনন্য হতে হবে। অথবা আপনি নামটি রেখেছেন এবং পুরানো ভি 1 এর পিছনে সামঞ্জস্যের জন্য এখনও আপনার পরিষেবাটির একটি নতুন ভি 2 প্রকাশ করবেন।

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

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

এটি সাধারণ ডেটা এবং আচরণকে একটি বেস শ্রেণিতে বিচ্ছিন্ন করার অনুমতি দেয়

এটি সাবধান হওয়ার মতো কিছু। উত্তরাধিকার এবং ডেটা চুক্তি ভালভাবে একসাথে যায় না। এটি কাজ করে, তবে আপনাকে চুক্তির সমস্ত ज्ञात সাব টাইপগুলি নির্দিষ্ট করতে হবে যা তারের উপর দিয়ে যেতে পারে, অন্যথায় ডেটা কন্ট্রাক্ট সিরিয়ালাইজার অজানা প্রকারের বিষয়ে অভিযোগ করতে ব্যর্থ হয়।

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

সামগ্রিকভাবে, সংস্করণ ছাড়াও, আমি সত্যিই এটি সেভাবে করার জন্য হত্যাকারী কারণটি খুঁজে পাচ্ছি না।


আমি মনে করি যে কারণটি আমি গ্রহণ করি
অ্যান্ডি ডেভিস

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

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

0

ডেটা ট্রান্সফার অবজেক্টে মার্টিন ফওলারের নোটগুলি এখানে উপযুক্ত, আমি মনে করি।

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

সমাধানটি হ'ল একটি ডেটা ট্রান্সফার অবজেক্ট তৈরি করা যা কলটির জন্য সমস্ত ডেটা ধরে রাখতে পারে। সংযোগটি জুড়ে যাওয়ার জন্য এটি সিরিয়ালিয়াল হওয়া দরকার। সাধারণত একটি এসেম্বলার ডিটিও এবং যে কোনও ডোমেন অবজেক্টের মধ্যে ডেটা স্থানান্তর করতে সার্ভার সাইডে ব্যবহৃত হয়।

অনুরোধগুলির ক্ষেত্রেও একই প্রযোজ্য। আরপিসির ক্ষেত্রে, এবং কেন এটি খারাপ:

প্রাকৃতিক চেহারার ইন্টারফেসগুলি কি লোকেরা ভুলে যাওয়ার প্রবণতা তৈরি করে যে তারা দূরবর্তী পরিষেবাটি কল করছে?

আমি মনে করি এটি সত্য, তবে মূল কারণ নয়। আরপিসি এড়ানোর আরেকটি কারণ হ'ল এটি দৃ clients়ভাবে সংযুক্ত ক্লায়েন্ট এবং পরিষেবাগুলিকে উত্সাহিত করতে পারে।


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

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