কোনও পদ্ধতির প্যারামিটার তালিকায় কোনও অবজেক্ট বা অবজেক্ট শনাক্তকারী থাকতে হবে?


10

আমাদের দলগুলি নিম্নলিখিত আলোচনা করছে:

ধরা যাক আমাদের নিম্নলিখিত দুটি পদ্ধতি রয়েছে:

public Response Withdraw(int clubId, int terminalId,int cardId, string invoice, decimal amount);

public Response Withdraw(Club club, Terminal terminal,Card card, string invoice, decimal amount);

ওভার-দ্য ওয়্যারটি কী পাঠিয়েছে তা কেবল আইডিএস।

এক পক্ষ বলেছে যে প্রথম পদ্ধতিটি সঠিক, কারণ আমাদের কাছে কেবলমাত্র টার্মিনাল এবং ক্লাবের আইডি রয়েছে এবং এটি পরিষ্কার হওয়া উচিত যে আমাদের আর কিছু নেই, এটি আমার দৃষ্টিভঙ্গি।

অন্য পক্ষটি বলে যে দ্বিতীয় পদ্ধতিটি সঠিক কারণ এটি আরও নমনীয়।

আমরা অবজেক্ট প্যারামিটার ধারণার সাথে পরিচিত, অন্য পক্ষটিও মনে করে যে বস্তুর পরামিতিগুলির বৈশিষ্ট্য হিসাবে বস্তু থাকা উচিত।

সঠিক পন্থা কোনটি?

সম্ভবত আরও একটি তৃতীয়াংশ আরও আছে?


কি? ...........
জেমস

1
প্রসঙ্গ? ওয়েব সেবা? WCF?
কোডসইনচওস

1
@ জেমস - দুঃখিত আমি দ্রুত এই প্রশ্নটি লিখেছিলাম, আপনি কি আমাকে বলতে পারেন যা বোঝা যাচ্ছে না তাই আমি এটি সম্পাদনা করতে পারি?
মিথির

@ কোডস ইনচোস পদ্ধতিগুলি হ'ল বিএল পদ্ধতিগুলি
হ'ল

উত্তর:


10

উত্তরটি প্রসঙ্গ নির্ভর।

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

যদি ক্লায়েন্টের কেবলমাত্র এইডস সহজেই পাওয়া যায়, তবে সম্ভবত দ্বিতীয় পদ্ধতিটি আরও ভাল, কারণ আপনি যদি চান না যে আপনি যদি সত্যিই আইডির প্রয়োজন হয় তবে ক্লায়েন্টকে objects সমস্ত বস্তুকে একত্রিত / লোড করতে হবে।

একটি বিকল্প হ'ল উভয় পদ্ধতি সরবরাহ করা , যাতে ক্লায়েন্টটি কোনটি ব্যবহার করবেন তা চয়ন করতে পারেন (এটি আপনার এপিআইকে বিশৃঙ্খলা না করে given

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

শেষ অবধি, আপনার পদ্ধতির স্বাক্ষরগুলি পদ্ধতিটি কী করে তার সুনির্দিষ্ট দ্বারা নির্ধারণ করা উচিত নয় (আপনার ক্ষেত্রে, ঠিক তারের উপর দিয়ে কী যায়)। এপিআই এর বিমূর্ত ধারণা করা উচিত তাই যদি বাস্তবায়ন পরিবর্তন হয়, আপনি ত্রুটিযুক্ত না হন।


3
+1 আমি কেবল আরও একটি পয়েন্ট যুক্ত করব: দূরবর্তীভাবে বলা পদ্ধতিগুলির জন্য ("তারের উপরে"?), উত্তীর্ণ বস্তুগুলি বিস্তৃত বস্তু গাছকে গভীরভাবে সিরিয়ালকরণ করতে পারে। আপনি যখন রিমোট-কল পেওলডের আকার সম্পর্কে উদ্বিগ্ন হন তখন আইডিগুলি অবজেক্টগুলির জন্য দুর্দান্ত বিকল্প।
রস প্যাটারসন

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

আমি মাঝখানে দেখা করব এবং পরামিতি তালিকায় একটি ইন্টারফেস ব্যবহার করব। তারপরে আপনার ক্লাবটি একটি ক্লাব হতে পারে তবে ভবিষ্যতে এটিও একটি সাউনা।
পিটার বি

13

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

দ্বিতীয় উদাহরণে, টার্মিনালটি যখন প্রত্যাশিত হয় তখন কোনও ক্লাব পাস করা অসম্ভব - এটি আপনাকে একটি সংকলনের সময় ত্রুটি দেয়।

তবুও, আমি এখনও তাকান হবে string invoice। একটি চালান আসলেই একটি স্ট্রিং হয়? কী amountমানে? এটি সম্ভবত আর্থিক মান।

আপনি আপনার প্রশ্নে উল্লেখ করেছেন "ওয়্যার-ও-দ্য ওয়্যারটি কেবল আইডস are" এটি সঠিক, তবে এই প্রয়োজনীয়তাটি আপনার ডোমেনকে জঞ্জাল করতে দেবেন না।

এই পদ্ধতির পক্ষে আমি যে সর্বোত্তম ব্যাখ্যাটি দেখেছি তা হ'ল অবজেক্ট ক্যালিস্টেনিক্সের নিয়ম 3 তে :

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


সুতরাং দ্বিতীয় পদ্ধতির prefered হয়? এমনকি কোনও আইডি সম্পত্তি পূরণের কোনও ক্লাব অবজেক্ট থাকলেও?
মিথির

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

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

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

5
@ জেমস: ম্যাটডাভি যা বলেছেন তা একটি সুপ্রতিষ্ঠিত সত্য। তিনি বলছেন না যে দেশীয় প্রকারভেদগুলি খারাপ, তিনি কী বলছেন: মথড (ক্লাব, টার্মিনাল, কার্ড, স্ট্রিং) এর চেয়ে ক্লায়েন্টের দ্বারা বোঝা এবং ব্যবহার করা কিছু ম্যাথথ (ইনট, ইনট, ইনট, স্ট্রিং, দশমিক) , দশমিক)
সি_মেকার

2

এটির কোনও সঠিক উত্তর নেই। উভয় বিকল্প কাজের জন্য সঠিক হতে পারে। যাইহোক প্রায় কোনওভাবেই, চালানের যুক্তিটি আমার ব্রাউডে ফ্যুরো উত্থাপন করেছিল, কোডটি পড়ে কী হয় তা আমার কাছে কোনও ক্লু নেই।

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

আপনি চিহ্নিত হিসাবে এটি "তারের ওপরে" ব্যয় করতে হবে। কেবল সনাক্তকারী প্রেরণ করে তা এড়ানো আপনার অন্য কোথাও ব্যয় করে। সুতরাং যেটি আপনাকে সবচেয়ে কম কষ্ট দেয়, এখন (বা পরে হতে পারে ...) ভাল বনাম খারাপের সূচক।

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