আমি যদি টিডিডি করি তবে আমার ব্যক্তিগত পদ্ধতিগুলি এড়ানো উচিত?


99

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

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

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

এছাড়াও, এটি পরীক্ষার স্বার্থে পদ্ধতি যুক্ত করা খারাপ অভ্যাস হিসাবে বিবেচিত।

এর অর্থ কী টিডিডি এনক্যাপসুলেশন নিয়ে মতবিরোধে রয়েছে? উপযুক্ত ব্যালেন্স কী? আমি এখন আমার বেশিরভাগ বা সমস্ত পদ্ধতি জনসাধারণের দিকে ঝুঁকিতে ফেলেছি ...


9
সফটওয়্যার শিল্পে খারাপ অনুশীলন এবং বাস্তবতা বিভিন্ন প্রাণী। একটি আদর্শ পরিস্থিতি প্রায়শই ব্যবসায় জগতের বিকৃত বাস্তবতার চেয়ে বেশি নয়। যা বোঝায় তা করুন এবং অ্যাপ্লিকেশন জুড়ে এটি আটকে দিন। অ্যাপ্লিকেশন জুড়ে ছড়িয়ে থাকা মাসের স্বাদের চেয়ে আমি তার বদলে খুব খারাপ অভ্যাস করতাম।
অ্যারন ম্যাকআইভার

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

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


সুতরাং @ আপনি কি মনে করেন যে এই প্রশ্নের উত্তরটি আমার প্রশ্নের উত্তর থেকে উদ্ভূত প্রশ্নের সদৃশ হিসাবে এটি বন্ধ করা উচিত? * 8 ')
মার্ক বুথ

উত্তর:


50

প্রয়োগের উপর পরীক্ষার চেয়ে ইন্টারফেসের পরীক্ষার পছন্দ করুন।

এটি আমার বুঝতে পারছে যে ব্যক্তিগত পদ্ধতিগুলি অবিচ্ছেদ্য

এটি আপনার বিকাশের পরিবেশের উপর নির্ভর করে, নীচে দেখুন।

[ব্যক্তিগত পদ্ধতি] সম্পর্কে উদ্বিগ্ন হওয়া উচিত নয় কারণ সর্বজনীন এপিআই কোনও সামগ্রীর অখণ্ডতা যাচাই করার জন্য পর্যাপ্ত তথ্য সরবরাহ করবে।

এটা ঠিক, টিডিডি ইন্টারফেসটি পরীক্ষা করার দিকে মনোনিবেশ করে।

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

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

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

যেহেতু ইভেন্টগুলি ইন্টারফেস তাই এটি সেই ইভেন্ট যা আপনাকে সেই বস্তুর পরীক্ষা করার জন্য তৈরি করতে হবে।

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

এছাড়াও, এটি পরীক্ষার স্বার্থে পদ্ধতি যুক্ত করা খারাপ অভ্যাস হিসাবে বিবেচিত।

অবশ্যই, আপনার অভ্যন্তরীণ অবস্থা প্রকাশের বিষয়ে খুব সতর্ক হওয়া উচিত ।

এর অর্থ কী টিডিডি এনক্যাপসুলেশন নিয়ে মতবিরোধে রয়েছে? উপযুক্ত ব্যালেন্স কী?

একেবারে না.

টিডিডি আপনার ক্লাসগুলির বাস্তবায়ন পরিবর্তন করা উচিত না এগুলি সম্ভবত সরল করার জন্য ( পূর্বের দিক থেকে YAGNI প্রয়োগ করে )।

টিডিডি সহ সেরা অনুশীলনটি টিডিডি ছাড়াই সেরা অনুশীলনের অনুরূপ, আপনি কেবল কেন তাড়াতাড়ি এটি সন্ধান করতে পারেন কারণ আপনি ইন্টারফেসটি বিকাশের সাথে সাথে ব্যবহার করছেন।

আমি এখন আমার বেশিরভাগ বা সমস্ত পদ্ধতি জনসাধারণের দিকে ঝুঁকিতে ফেলেছি ...

এটি বরং স্নানের জল দিয়ে শিশুটিকে বাইরে ফেলে দেওয়া হবে।

আপনার সমস্ত পদ্ধতি জনসাধারণের করার দরকার নেই যাতে আপনি টিডিডি উপায়ে বিকাশ করতে পারেন। আপনার ব্যক্তিগত পদ্ধতিগুলি সত্যই অচিরাচরযোগ্য কিনা তা দেখতে নীচের আমার নোটগুলি দেখুন।

ব্যক্তিগত পদ্ধতি পরীক্ষা করার জন্য আরও বিশদ চেহারা

ভাষা / পরিবেশের উপর নির্ভর করে যদি আপনাকে অবশ্যই কোনও শ্রেণির কিছু ব্যক্তিগত আচরণ পরীক্ষা করতে হবে তবে আপনার কাছে তিনটি বিকল্প থাকতে পারে:

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

স্পষ্টতই 3 য় বিকল্পটি সর্বোত্তম।

1) আপনি যে শ্রেণিতে পরীক্ষা দিতে চান তা পরীক্ষা করুন (আদর্শ নয়)

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

২) আপনি যে ব্যক্তিগত পদ্ধতিগুলি জনসাধারণের পদ্ধতি হিসাবে পরীক্ষা করতে চান তা প্রকাশ করুন (সত্যিই ভাল ধারণা নয়)

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

3) আরও ভাল পরীক্ষার পরিবেশ ব্যবহার করুন (সর্বোত্তম বিকল্প, যদি এটি উপলব্ধ থাকে)

ইক্লিপ্স ওয়ার্ল্ডে, 3 টুকরা ব্যবহার করে অর্জন করা যেতে পারে । সি # বিশ্বে আমরা আংশিক ক্লাস ব্যবহার করতে পারি । অন্যান্য ভাষা / পরিবেশের প্রায়শই একই রকম কার্যকারিতা থাকে, আপনার কেবল এটি সন্ধান করা উচিত।

অন্ধভাবে ধরে নিলে ১ বা ২. কেবলমাত্র বিকল্পগুলির ফলস্বরূপ উত্পাদন সফ্টওয়্যারটি পরীক্ষার কোড বা ন্যক্কারজনক ক্লাস ইন্টারফেসের দ্বারা স্ফীত হতে পারে যা জনসাধারণে তাদের নোংরা লিনেন ধুয়ে দেয়। * 8 ')

  • সব মিলিয়ে - যদিও বেসরকারী প্রয়োগের বিরুদ্ধে পরীক্ষা না করা ভাল better

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

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

পদ্ধতিটিকে ডিফল্ট / সুরক্ষিত করা এবং একই প্যাকেজ সহ একটি পরীক্ষা প্রকল্পে একটি পরীক্ষা তৈরির বিষয়ে কী?
রিচার্ড সাইফার

@ রিচার্ডসিফার এটি কার্যকরভাবে 2 এর সমান) যেহেতু আপনি আপনার পদ্ধতির চশমাটি যা আপনার পরীক্ষার পরিবেশে কোনও ঘাটতি পূরণ করতে চান তা পরিবর্তন করে চলেছেন, তাই অবশ্যই এখনও খারাপ অভ্যাস নয়।
মার্ক বুথ

75

অবশ্যই আপনার ব্যক্তিগত পদ্ধতি থাকতে পারে এবং অবশ্যই আপনি সেগুলি পরীক্ষা করতে পারেন।

হয় প্রাইভেট পদ্ধতি চালানোর জন্য কিছু উপায় রয়েছে, সেক্ষেত্রে আপনি সেভাবে এটি পরীক্ষা করতে পারেন, বা প্রাইভেটটি চালানোর কোনও উপায় নেই , সেক্ষেত্রে: হেক কেন আপনি এটি পরীক্ষা করার চেষ্টা করছেন, ঠিক জঘন্য জিনিস মুছুন!

আপনার উদাহরণে:

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

কেন অচল হতে হবে? যদি কোনও ইভেন্টের প্রতিক্রিয়া হিসাবে পদ্ধতিটি আহ্বান করা হয়, কেবলমাত্র পরীক্ষার মাধ্যমে বস্তুটিকে একটি উপযুক্ত ইভেন্ট ফিড করা উচিত।

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

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

সুতরাং, সাধারণত ব্যক্তিগত পদ্ধতিগুলি কেবল তখনই উপস্থিত হয় যখন তারা ইতিমধ্যে পরীক্ষিত পাবলিক পদ্ধতিগুলি থেকে আহরণ করা হয় এবং এভাবে ইতিমধ্যে পরীক্ষিতও হয়।


3
পাবলিক পদ্ধতির মাধ্যমে পরীক্ষার সময়টি 99% ভাল কাজ করে। আপনার একক পাবলিক পদ্ধতির পিছনে কয়েকশ বা হাজার লাইন জটিল কোডের পিছনে থাকা এবং মধ্যবর্তী সমস্ত রাজ্যগুলির বাস্তবায়ন নির্দিষ্টকরণের সময়টির 1% হ'ল চ্যালেঞ্জ। জনসাধারণের পদ্ধতি থেকে সমস্ত প্রান্তের মামলাগুলি আঘাত করার চেষ্টা করা জটিল হয়ে উঠলে এটি বেদনাদায়ক হয়ে ওঠে। পর্যায়ক্রমে, এনক্যাপসুলেশন ভেঙে এবং ব্যক্তিগত হিসাবে আরও বেশি পদ্ধতি উদ্ঘাটিত করার মাধ্যমে, বা পরীক্ষাগুলি কল করার জন্য একটি ক্লেজ ব্যবহার করে প্রাইভেট পন্থাগুলি সরাসরি কুৎসিত হওয়া ছাড়াও নখরযুক্ত পরীক্ষার ক্ষেত্রে ফলাফল বলে।
ড্যান নীলি

24
বড়, জটিল ব্যক্তিগত পদ্ধতিগুলি একটি কোড গন্ধ। একটি বাস্তবায়ন যা এত জটিল যে এটি কার্যকরভাবে উপাদান উপাদানগুলিতে বিভক্ত হতে পারে না (পাবলিক ইন্টারফেস সহ) টেস্টিবিলিটির একটি সমস্যা যা সম্ভাব্য নকশা এবং আর্কিটেকচারাল সমস্যাগুলি প্রকাশ করে। প্রাইভেট কোড বিশাল যেখানে ক্ষেত্রে 1% সাধারণভাবে পচন এবং প্রকাশের জন্য পুনরায় কাজ করে লাভবান হবে।
এসলট

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

ক্লাসে কমপক্ষে internalপদ্ধতিগুলি বা সর্বজনীন পদ্ধতিগুলি internalসরাসরি প্রায়শই পরীক্ষা করা উচিত। ভাগ্যক্রমে। নেট সমর্থন করে InternalsVisibleToAttribute, কিন্তু তা না করে, এই পদ্ধতিটি পরীক্ষা করা পিআইটিএ হবে।
কোডসইনচাউস

25

আপনি যখন আপনার কোডটিতে একটি নতুন ক্লাস তৈরি করেন, আপনি কিছু প্রয়োজনীয়তার উত্তর দেওয়ার জন্য এটি করেন। প্রয়োজনীয়তাগুলি কোডটি কী করতে হবে তা নয়, কীভাবে তা বলেএটি কেন সহজেই পাবলিক পদ্ধতির স্তরে পরীক্ষাগুলি ঘটে তা বোঝা সহজ করে তোলে।

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

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

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


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

6

এটি আমার বুঝতে পারছে যে ব্যক্তিগত পদ্ধতিগুলি অবিচ্ছেদ্য

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

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

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


5

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

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


এটি একটি দুর্দান্ত ধারণা-- "... এমন কারখানা রয়েছে যা বস্তুর সর্বজনীন পদ্ধতির সাথে অবজেক্টের ওয়্যার আপ ইভেন্টগুলি তৈরি করে test এটি পরীক্ষা করা সহজ। "
পুতুল

5

আপনার ব্যক্তিগত পদ্ধতি ব্যবহার করে ত্যাগ করার দরকার নেই। এগুলি ব্যবহার করা একেবারে যুক্তিসঙ্গত, তবে পরীক্ষার দৃষ্টিকোণ থেকে এনক্যাপসুলেশন না ভেঙে বা আপনার ক্লাসে পরীক্ষা-নির্দিষ্ট কোড যুক্ত না করে সরাসরি পরীক্ষা করা শক্ত। কৌশলটি হ'ল যে জিনিসটি আপনি জানেন তা আপনার অন্ত্রকে কাঠবিড়াল করে তুলবে কারণ আপনি মনে করছেন যে আপনি নিজের কোডটি বিশিষ্ট করেছেন।

এই জিনিসগুলি যা আমি মনে রাখার চেষ্টা করি এবং একটি কার্যক্ষম ভারসাম্য অর্জন করি।

  1. আপনি যে ব্যক্তিগত পদ্ধতি এবং বৈশিষ্ট্যগুলি ব্যবহার করেন তার সংখ্যা হ্রাস করুন। আপনার ক্লাসটি করার জন্য আপনার প্রয়োজনীয় জিনিসগুলি বেশিরভাগ ক্ষেত্রেই প্রকাশ্যে প্রকাশের প্রয়োজন হয়, তাই আপনার সেই চালাক পদ্ধতিটি ব্যক্তিগত করার প্রয়োজন কি না তা নিয়ে ভাবুন।
  2. আপনার ব্যক্তিগত পদ্ধতিতে কোডের পরিমাণ কমিয়ে আনুন - আপনার যাহাই হউক না কেন সত্যিই করা উচিত - এবং অপ্রত্যক্ষভাবে পরীক্ষা করুন যেখানে আপনি অন্যান্য পদ্ধতির আচরণের মাধ্যমে পারেন। আপনি কখনই ১০০% পরীক্ষার কভারেজ পাওয়ার আশা করেন না, এবং সম্ভবত আপনাকে ডিবাগারের মাধ্যমে কয়েকটি মান পরীক্ষা করতে হবে। ব্যতিক্রমগুলি ছুঁড়ে ফেলার জন্য ব্যক্তিগত পদ্ধতিগুলি ব্যবহার করে সহজেই পরোক্ষভাবে পরীক্ষা করা যেতে পারে। ব্যক্তিগত সম্পত্তিগুলিকে ম্যানুয়ালি বা অন্য কোনও পদ্ধতির মাধ্যমে পরীক্ষা করার প্রয়োজন হতে পারে।
  3. যদি অপ্রত্যক্ষ বা ম্যানুয়াল চেকিং আপনার সাথে ভাল না বসে তবে একটি সুরক্ষিত ইভেন্ট যুক্ত করুন এবং কোনও ব্যক্তিগত সামগ্রী প্রকাশ করার জন্য একটি ইন্টারফেসের মাধ্যমে অ্যাক্সেস করুন। এটি কার্যকরভাবে এনক্যাপসুলেশনের নিয়মগুলিকে "বাঁক" দেয় তবে আপনার পরীক্ষাগুলি কার্যকর করে এমন কোড শিপ করার প্রয়োজনীয়তা এড়িয়ে যায়। অপূর্ণতাটি হ'ল এটি প্রয়োজনে ইভেন্টটি বরখাস্ত করা হবে তা নিশ্চিত করতে কিছুটা অতিরিক্ত অভ্যন্তরীণ কোড তৈরি করতে পারে।
  4. আপনি যদি মনে করেন যে কোনও পাবলিক পদ্ধতি "সুরক্ষিত" পর্যাপ্ত নয়, তবে কীভাবে ব্যবহার করা যায় তা সীমাবদ্ধ করার জন্য আপনার পদ্ধতিতে কোনও ধরণের বৈধতা প্রক্রিয়া প্রয়োগ করতে পারেন কিনা তা দেখুন। সম্ভাবনাগুলি হ'ল আপনি যখন এটির মাধ্যমে চিন্তা করছেন তখন আপনার পদ্ধতিগুলি বাস্তবায়নের আরও ভাল উপায় সম্পর্কে ভাবেন বা আপনি অন্য শ্রেণিটি আকার নিতে শুরু করবেন।
  5. আপনার জনসাধারণের পদ্ধতিগুলির জন্য যদি আপনার প্রচুর ব্যক্তিগত পদ্ধতি "স্টাফ" করে থাকে, তবে সেখানে নতুন শ্রেণি উত্তোলনের জন্য অপেক্ষা করতে পারে। আপনি এটি আলাদাভাবে পৃথক শ্রেণীর হিসাবে সরাসরি পরীক্ষা করতে পারেন, তবে ক্লাসের মধ্যে এটি একটি ব্যবহৃত যৌগিক হিসাবে ব্যক্তিগতভাবে প্রয়োগ করুন।

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


4

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

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

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


4

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


3

ব্যক্তিগত ব্যবহারের পরিবর্তে ডিফল্ট পরিবর্তনকারী। তারপরে আপনি এই পদ্ধতিগুলি পৃথকভাবে পরীক্ষা করতে পারেন, কেবল সর্বজনীন পদ্ধতির সাথে মিলিত নয়। এটির জন্য আপনার পরীক্ষাগুলির আপনার প্রধান কোডের মতো প্যাকেজ কাঠামো থাকা দরকার।


... ধরে নিচ্ছি এটি জাভা।
দাউদ ইবনে কারিম

বা internalইন নেট।
কোডসইনচায়োস

2

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

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


2

এর অর্থ কী টিডিডি এনক্যাপসুলেশন নিয়ে মতবিরোধে রয়েছে? উপযুক্ত ব্যালেন্স কী? আমি এখন আমার বেশিরভাগ বা সমস্ত পদ্ধতি জনসাধারণের দিকে ঝুঁকে পড়েছি।

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

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

আমি মনে করি টিডিডি শুরু করার সময় এটি সবসময় তাত্ক্ষণিকভাবে স্পষ্ট হয় না - আপনি অভ্যন্তরীণভাবে কী পদ্ধতিগুলি পরীক্ষা করে দেখছেন না - আপনি ক্লাসের কম দানাদার উদ্বেগগুলি পরীক্ষা করছেন। সুতরাং, আপনি সেই পদ্ধতিটি DoSomethingToFoo()কোনও বারটি ইনস্ট্যান্ট করে পরীক্ষা করে দেখছেন না , তার উপর একটি পদ্ধতি কল করেন, এর মধ্যে দুটিতে যুক্ত হন ইত্যাদি You're (অথবা না). এটি আপনার পরীক্ষার সাধারণ প্যাটার্ন: "যখন আমি পরীক্ষায় আমার ক্লাসে এক্স করি, আমি পরবর্তীতে ওয়াই পর্যবেক্ষণ করতে পারি"। ওয়াইয়ের কাছে এটি কীভাবে আসে তা পরীক্ষার উদ্বেগের কোনও নয়, এবং এটিই এনক্যাপসুলেটেড এবং এই কারণেই টিডিডি এনক্যাপসুলেশনের সাথে মতবিরোধে নয়।


2

ব্যবহার এড়াতে? নং
এড়িয়ে চলুন দিয়ে শুরু ? হ্যাঁ.

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

আপনি যেমন সরাসরি ব্যক্তিগত পদ্ধতি পরীক্ষা করতে পারবেন না ঠিক তেমনভাবে আপনি বিমূর্ত ক্লাসে পদ্ধতিগুলি পরীক্ষা করতে পারবেন না, তবে সে কারণেই আপনি বিমূর্ত ক্লাস এবং প্রাইভেট পদ্ধতিগুলি শুরু করেন না; আপনি কংক্রিটের ক্লাস এবং পাবলিক এপিআই দিয়ে শুরু করেন এবং তারপরে আপনি যেমন যান তেমন সাধারণ কার্যকারিতা।

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