সমাধানটি যতটা সম্ভব জেনেরিক বা যতটা সম্ভব সুনির্দিষ্ট হওয়া উচিত?


124

বলুন আমার একটি সত্তা রয়েছে যার "টাইপ" বৈশিষ্ট্য রয়েছে। 20+ সম্ভাব্য প্রকার হতে পারে।

এখন আমাকে এমন কিছু বাস্তবায়ন করতে বলা হয়েছে যা A-> B থেকে টাইপ পরিবর্তন করতে দেয়, যা একমাত্র ব্যবহারের ক্ষেত্রে।

সুতরাং আমি কি এমন কিছু বাস্তবায়ন করব যা বৈধ প্রকারের যতক্ষণ না ধরণের নির্বিচারে পরিবর্তনের অনুমতি দেয়? বা আমি কি কেবলমাত্র প্রয়োজন অনুযায়ী এটি-> বি থেকে পরিবর্তিত হতে এবং অন্য ধরণের পরিবর্তন যেমন বি-> এ বা এ-> সি প্রত্যাখ্যান করতে পারি?

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

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

সম্পাদনা:

আমার অত-নির্দিষ্ট উদাহরণে আরও বিশদ যুক্ত করা: এই ক্ষেত্রে "জেনেরিক" সমাধানটির জন্য "নির্দিষ্ট" সমাধানের চেয়ে কম কাজ প্রয়োজন, কারণ নির্দিষ্ট সমাধানটি পুরানো ধরণের পাশাপাশি নতুন ধরণের ক্ষেত্রে বৈধতা প্রয়োজন, যখন জেনেরিক সমাধান শুধুমাত্র নতুন ধরণের বৈধতা নেওয়া দরকার।


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

2
@ টি.সর এটিকে উত্তর হিসাবে যুক্ত করুন এবং আমি উত্সাহিত করব :-)
ক্রিস্টোফ

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

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

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

উত্তর:


296

আমার থাম্ব বিধি:

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

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


1
YAGNI কি তা আপনি ব্যাখ্যা করতে পারেন?
বার্নহার্ড

7
@Bernhard সংযমের এটি প্রয়োজন তাই না । একটি খুব দরকারী সফ্টওয়্যার নকশা নীতি।
এঞ্জেল

4
"এ্যাটারে thing1, thing2, সম্ভবত কোনও অ্যারে ব্যবহার করার বিষয়ে চিন্তা করুন At পরিবর্তে thing1, thing2, thing3প্রায় অবশ্যই thing[]অ্যারে ব্যবহার করুন" " একাধিক ভেরিয়েবল বা একটি একক অ্যারের মধ্যে সিদ্ধান্ত নেওয়ার জন্য থাম্বের অনুরূপ নিয়ম।
জোকার_ভিডি

15
# 1 নিয়মের রাষ্ট্রের আর একটি উপায়: "আপনি একটি জিনিস সাধারণ করতে পারবেন না।"
ওয়েইন কনরাড

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

95

একটি নির্দিষ্ট সমাধানের জন্য [...] ভবিষ্যতে আরও কাজ করা প্রয়োজন যদি অনুরূপ প্রয়োজনের প্রয়োজন হয়

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

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

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

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


2
আমার কাছে এই উত্তরটি ওপি'র প্রসঙ্গে বোঝায় না। তিনি বলছেন যে তিনি এখন সাধারণীকরণে কম সময় এবং ভবিষ্যতে কম সময় ব্যয় করবেন, যদি না ভবিষ্যতে বাস্তবায়নের সুনির্দিষ্ট হওয়ার প্রয়োজন না হয়। আপনি "জেনারালাইজেশনে অতিরিক্ত প্রচেষ্টা বিনিয়োগ" এর বিরুদ্ধে বিতর্ক করছেন, অন্যদিকে ওপি সাধারণীকরণ না করলে কেবল অতিরিক্ত প্রচেষ্টা বিনিয়োগ করবে । (ভাবেন) .... অদ্ভুত: $
এমএসবি

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

2
এছাড়াও, জেনারেলাইজড সমাধান আরও জটিল হবে, সুতরাং এটির দ্বিতীয় ক্ষেত্রে আপনি যখন এটি খাপ খাইয়ে নেবেন, ততক্ষণে এটি আবার বুঝতে খুব বেশি সময় লাগবে।
AndreKR

4
ডক, একপাশে, তবে কখনও অনুমান করতে পারবেন না যে আপনি একজন অ-নেটিভ স্পিকার। আপনার উত্তর সর্বদা ভাল লেখা এবং ভাল যুক্তিযুক্ত।
user949300

2
আমি যখন আপনার ভবিষ্যতের উত্তরগুলি পড়ছি তখন আমি আপনার উচ্চারণটি কল্পনা করব। :-)
user949300

64

টিএল; ডিআর: এটি আপনি কী সমাধান করার চেষ্টা করছেন তার উপর নির্ভর করে।

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

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

এগুলি আমার স্মৃতিগুলির একটি সামান্য বিষয়, তাই আমি তাদেরকে পুনর্ব্যক্ত করার সময় যদি আমি বাস্তবিক না হই তবে আমাকে ক্ষমা করুন। আমি কিছুটা মুহুর্তের অনুরাগী।

তিনি আমাকে এই বলেছিলেন:


"আমাদের কি কোনও সমস্যার সাধারণীকরণের জন্য যাওয়া উচিত, বা নির্দিষ্ট সুযোগে সমাধান করা উচিত? আপনি কি জিজ্ঞাসা করবেন? আচ্ছা, এটি একটি ... প্রশ্ন।"

গ্র্যাম্পস তার মুখের উপর তার চশমার অবস্থান ঠিক করার সময় একটি ক্ষণিক মুহূর্তের জন্য এটি সম্পর্কে চিন্তা করতে বিরতি নিয়েছিল। তিনি তার কম্পিউটারে একটি ম্যাচ -3 গেম খেলছিলেন, যখন তাঁর পুরানো সাউন্ড সিস্টেমে একটি ডিপ বেগুনিটির এলপি শুনছিলেন।

"ঠিক আছে, এটি আপনি কোন সমস্যার সমাধান করার চেষ্টা করছেন তার উপর নির্ভর করবে", তিনি আমাকে বলেছিলেন। "এটি বিশ্বাস করা লোভনীয় যে সমস্ত নকশার পছন্দগুলির জন্য একটি একক, পবিত্র সমাধান বিদ্যমান, তবে একটি নেই isn't সফ্টওয়্যার আর্কিটেকচার পনির মতো, আপনি দেখুন see"

"... পনির, গ্র্যাম্পস?"

"আপনার পছন্দের সম্পর্কে আপনি যা ভাবেন তা বিবেচ্য নয়, সর্বদা এমন কেউ আছেন যা ভাবেন যে এটি দুর্গন্ধযুক্ত"।

আমি এক মুহুর্তের জন্য বিভ্রান্তিতে ঝিমঝিম খেয়েছি, তবে আমি কিছু বলার আগেই গ্র্যাম্পস এগিয়ে গেল।

"আপনি যখন গাড়ী বানাচ্ছেন, আপনি কীভাবে কোনও অংশের জন্য উপাদানটি বেছে নেবেন?"

"আমি ... আমি অনুমান করি এটি জড়িত ব্যয় এবং অংশটি কী করা উচিত তার উপর নির্ভর করে, আমার ধারণা।"

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

প্রবীণ প্রোগ্রামারটি সামান্য লেগো ট্রেনের মডেলটির জন্য পৌঁছেছিল যা চালিয়ে যাওয়ার আগে তার টেবিলে রয়েছে।

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

".. আপনি শুধু ম্যাট্রিক্স উদ্ধৃতি করেছেন ? "

"কি?"

"কিছুই না, চলুন।"

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

গ্র্যাম্পস লেগো ট্রেনটিকে তার জায়গায় আবার রেখেছিল এবং তার ম্যাচ -3 গেমটিতে ফিরে আসে।

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


তাই সেখানে যদি আপনি এটি আছে. "এটা নির্ভর করে". সফ্টওয়্যার ডিজাইনের কথা চিন্তা করার সময় এটি সম্ভবত সবচেয়ে শক্তিশালী দ্বি-শব্দের এক্সপ্রেশন।


14
আমি নিশ্চিত যে গল্পটিতে কিছু কার্যকর রয়েছে তবে এটি পড়তে খুব কষ্ট হয়েছে, দুঃখিত
GoatInTheMachine

28
আপনার প্রথম পোস্ট অল্প মজা উপাখ্যান ছিল - এবং অবশ্যই এটা মতামত একটি ব্যাপার - কিন্তু যদি না আমি সত্যিই কারো লেখার ধরন পছন্দ করি আমি এই সত্যিই স্ব-অসংযত এবং একটি ব্যক্তিগত ব্লগ একটি বিট অনুপযুক্ত বাহিরে মত দীর্ঘ গল্প খুঁজে
GoatInTheMachine

16
@ টি.সর বিদ্বেষীদের কথা শোনেন না, আপনার পোস্টটি কোনও গুরুের কাছ থেকে দরকারী পরামর্শের রত্ন। +1
এলএলএএমএনওয়াইপি

7
"সফটওয়্যার আর্কিটেকচার পনির মতো" অংশটি খাঁটি দুর্দান্ত ছিল। আসলে, এই উত্তরটি একটি রত্ন!
ম্যাথিউ গুইন্ডন

3
হয়তো এই উত্তরটিও পনির মতো? ;) তবে দয়া করে, "ছোট্ট টালক" "স্মার্টটাক" হওয়া উচিত, এবং হ্যাঁ, আমি সেই লোক হয়েছি , দুঃখিত।
ফেডারেশন এস।

14

প্রাথমিকভাবে, আপনার ভবিষ্যদ্বাণী করার চেষ্টা করা উচিত যে সম্ভবত এমন পরিবর্তন ঘটবে কিনা - কেবলমাত্র লাইনের নীচে দূরবর্তী সম্ভাবনা নয়।

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


13

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

একটি অজানা অঞ্চল বিকাশকারী কাজ করছে সে সম্পর্কে আমার পয়েন্টকে সম্বোধন করার জন্য একটি বই রয়েছে Is এতে নিষ্কাশিত দরকারী বিমূর্ততা সহ নির্দিষ্ট ডোমেন থাকে।


একটি কংক্রিট সমস্যা সম্পর্কে প্রশ্নটি পরিষ্কার is
রিবল্ড এডি

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

7
"স্ট্যাকওভারফ্লো উত্তরটি যতটা সম্ভব জেনেরিক বা যতটা সম্ভব সুনির্দিষ্ট হওয়া উচিত?"
লিন্ডন হোয়াইট

@ লিন্ডনহাইটের একটি স্ট্যাকওভারফ্লো প্রশ্নটি যতটা সম্ভব জেনেরিক হওয়া উচিত (খুব বিস্তৃত!) বা যতটা সম্ভব সুনির্দিষ্ট (যা ব্যর্থতা বলা হয়!)? হা।

4

আপনার প্রশ্নের শরীরের প্রকৃতি দেওয়া, আমি এটি সঠিকভাবে বুঝতে পেরেছি বলে ধরে নিলাম, আমি আসলে এটিকে জেনেরিক বনাম নির্দিষ্ট সমাধানগুলি সম্পর্কে প্রশ্নের চেয়ে বেশি কেন্দ্রীয় সিস্টেমের বৈশিষ্ট্যগুলির একটি নকশা প্রশ্ন হিসাবে দেখছি।

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

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

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


"আপনি কোড না করেন এমন সমস্ত বাগ আপনি মিস করেছেন" " (বাস্কেটবলের পোস্টার থেকে: আপনি নেবেন না সমস্ত শট মিস)

3

এই নির্দিষ্ট সমস্যার জেনেরিক উত্তর দেওয়া কঠিন ;-)

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

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

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


3
  1. হাইব্রীড। এটি একটি / বা প্রশ্ন হতে হবে না। আপনার প্রয়োজন কেবলমাত্র নির্দিষ্ট রূপান্তরটি প্রয়োগ করার সময় আপনি সাধারণ ধরণের রূপান্তরগুলির জন্য API ডিজাইন করতে পারেন। (কেবলমাত্র নিশ্চিত হয়ে নিন যে কেউ যদি আপনার সাধারণ এপিআইটিকে অসমর্থিত রূপান্তর দিয়ে কল করে তবে এটি একটি "সমর্থিত নয়" ত্রুটি স্থিতিতে ব্যর্থ হয়েছে))

  2. পরীক্ষামূলক. এ-> বি রূপান্তরকরণের জন্য, আমাকে একটি (বা একটি ছোট সংখ্যা) পরীক্ষা লিখতে হবে। জেনেরিক x-> y রূপান্তরকরণের জন্য, আমাকে পরীক্ষার পুরো ম্যাট্রিক্স লিখতে হতে পারে। সমস্ত রূপান্তরগুলি একটি একক জেনেরিক বাস্তবায়ন ভাগ করে নিলেও এটি যথেষ্ট পরিমাণে কাজ।

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

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

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

    জেনেরিক এবং নির্দিষ্ট রূপান্তর উভয়ই এমনভাবে প্রয়োগ করা যেতে পারে যা কেবল ধীরে ধীরে ধরণের বিবরণগুলির সাথে মিলিত হয়, তবে আমি এই বিষয়ে উদ্বিগ্ন হব না। এর মধ্যে যদি একটি আলগাভাবে কাপল উপায়ে সম্পন্ন করা যায় তবে অন্যটির জন্য দৃ coup় সংযোগের প্রয়োজন হয়, তবে গেটের ঠিক বাইরে outিলে .ালা-কাপল পদ্ধতির পক্ষে এটি একটি শক্ত যুক্তি।


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

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

3

সমাধানটি যতটা সম্ভব জেনেরিক বা যতটা সম্ভব সুনির্দিষ্ট হওয়া উচিত?

এটি কোনও উত্তরযোগ্য প্রশ্ন নয়।

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

  1. প্রথম-আদেশের আনুমানিকতা: ড্যানিয়েল প্রাইডেন, ডক ব্রাউন, এবং অন্যান্য হিসাবে বর্ণিত তিনটির স্বাভাবিক YAGNI নিয়ম ।

    এটি একটি সাধারণভাবে দরকারী হিউরিস্টিক কারণ এটি সম্ভবত আপনি সেরা করতে পারেন যা ডোমেন এবং অন্যান্য ভেরিয়েবলের উপর নির্ভর করে না

    সুতরাং, প্রাথমিক অনুমানটি হ'ল: আমরা সুনির্দিষ্ট কিছু করি।

  2. দ্বিতীয়-অর্ডার আনুমানিক: সমাধান ডোমেন সম্পর্কে আপনার বিশেষজ্ঞ জ্ঞানের উপর ভিত্তি করে , আপনি বলছেন

    এই ক্ষেত্রে "জেনেরিক" সমাধানটির জন্য "নির্দিষ্ট" সমাধানের চেয়ে কম কাজ প্রয়োজন

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

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

  3. তৃতীয়-ক্রমের আনুমানিকতা: আপনার সমস্যার ডোমেন জ্ঞান কি সহজতম সমাধানটি আসলে সঠিক বলে প্রস্তাব দিচ্ছে, বা আপনি প্রচুর স্থানান্তরকে অর্থহীন বা ভুল হতে দিচ্ছেন?

    যদি সহজ-তবে-জেনেরিক সমাধানটি সমস্যাযুক্ত মনে হয় বা আপনি এই ঝুঁকিগুলি বিচার করার ক্ষমতা নিয়ে আত্মবিশ্বাসী না হন, অতিরিক্ত কাজ করা এবং আপনার প্রাথমিক অনুমানের সাথে থাকা সম্ভবত ভাল।

  4. চতুর্থ অর্ডার আনুমানিক: গ্রাহক আচরণ সম্পর্কে আপনার জ্ঞান, বা এই বৈশিষ্ট্যটি কীভাবে অন্যদের সাথে সম্পর্কিত, বা প্রকল্প পরিচালনার অগ্রাধিকারগুলি, বা ... অন্য কোনও কঠোরভাবে প্রযুক্তিগত বিবেচনা আপনার বর্তমান কার্যনির্বাহী সিদ্ধান্তকে সংশোধন করে?


2

সাধারণ উত্তর দিয়ে উত্তর দেওয়া সহজ প্রশ্ন নয়। অনেক উত্তর 3 টি বা একটি অনুরূপ কিছু নিয়মের চারপাশে নির্মিত হিউরিস্টিকস দিয়েছে। থাম্বের এই জাতীয় নিয়মের বাইরে পা রাখা কঠিন।

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

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

আমি কয়েকটি কংক্রিট উদাহরণ দিতে পারি যেখানে আপনার প্রশ্নের প্রসঙ্গে ভিত্তিতে একটি নির্দিষ্ট উত্তর রয়েছে answer আপনি সেফটি-ক্রিটিকাল সফ্টওয়্যারটি লিখছেন সেই ক্ষেত্রে বিবেচনা করুন। এর অর্থ হল প্রতিশ্রুতি অনুযায়ী পণ্যটি সম্পাদন করে তা নিশ্চিত করতে আপনার একটি পরীক্ষার দল দাঁড়িয়েছিল। এই পরীক্ষার কয়েকটি দলের কোডের মাধ্যমে প্রতিটি একক সম্ভাব্য পাথ পরীক্ষা করা প্রয়োজন। আপনি যদি তাদের সাথে কথা বলেন, আপনি দেখতে পাবেন যে আপনি যদি আচরণটি সাধারণীকরণ করেন তবে আপনি তাদের পরীক্ষার ব্যয়গুলিতে $ 30,000 যুক্ত করবেন কারণ তাদের এই সমস্ত অতিরিক্ত পাথ পরীক্ষা করতে হবে। সেক্ষেত্রে, না সাধারণ কার্যকারিতা যোগ, আপনি কাজ কারণ এটি 7 বা 8 বার প্রতিলিপি আছে এমনকি যদি। সংস্থার অর্থ সাশ্রয় করুন এবং অনুরোধটি যা বলেছেন ঠিক তেমন করুন।

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


1

হুম ... উত্তরের জন্য বেশি প্রসঙ্গ নেই ... পূর্ববর্তী উত্তরগুলি প্রতিধ্বনিত করে, "এটি নির্ভর করে"।

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

প্রায়শই গ্রহণযোগ্যতার মানদণ্ড ব্যাখ্যার সাপেক্ষে, তবে ভাল কিউএ স্টাফরা প্রয়োজনীয় কার্যকারিতাটি হ্রাস করে কার্যের জন্য উপযুক্ত মানদণ্ড লিখতে পারে।

এমন কি ডোমেন বিধিনিষেধ রয়েছে যা "এ" থেকে "সি" বা অন্য কোনও বিকল্পে পরিবর্তিত হতে দেয় না, কেবল "এ" থেকে "বি" তে পরিণত হয়? বা এটি কেবল একটি সংকীর্ণভাবে বর্ণিত প্রয়োজনীয়তা যা "সামনের চিন্তাভাবনা" নয়?

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

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


1

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

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

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


0

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

নীতিগতভাবে, হ্যাঁ তবে এটি অগত্যা জেনেরিক সমাধানগুলিতে নেতৃত্ব দেয় না

সফটওয়্যার বিকাশে দুটি ধরণের বিষয় রয়েছে, যতদূর আমি উদ্বিগ্ন, যেখানে আপনার ভবিষ্যতের পরিবর্তনের প্রত্যাশা করা উচিত:

  • 3 য় পক্ষ দ্বারা ব্যবহৃত গ্রন্থাগারগুলি, এবং
  • সামগ্রিক সফ্টওয়্যার আর্কিটেকচার।

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

আপনার ক্ষেত্রে, আপনি একটি নির্দিষ্ট সমস্যার জন্য একটি সুনির্দিষ্ট সমাধানের জন্য জিজ্ঞাসা করছেন, যার ভবিষ্যতে কোনও প্রভাব নেই। এই ক্ষেত্রে, YAGNI এবং DRY শুটিংয়ের জন্য ভাল মটোস:

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

অন্যান্য আধুনিক অনুশীলনের সাথে একত্রিত (যেমন নিরাপদে চুল্লি চালানোর পক্ষে ভাল পরীক্ষার কভারেজ) এর অর্থ আপনি দ্রুত লিখিত, চর্বিহীন, গড় কোড যা শেষ হওয়ার সাথে সাথে বৃদ্ধি পায় with

কোন জেনেরিক সলিউশনের মতো কোন শব্দটি যাওয়ার উপায়?

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

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


0

সমস্যাটি সম্পর্কে চিন্তাভাবনার ভিন্ন উপায় হ'ল কী বোঝায় তা বিবেচনা করা।

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

পরিচালনা যখন অন্য ব্যক্তিকে কোনও বৈশিষ্ট্যে অ্যাক্সেসের অনুমতি দেওয়ার সিদ্ধান্ত নিয়েছে, আমরা কেবল একটি পতাকা পরিবর্তন করে এটি করতে সক্ষম হয়েছি।

স্পষ্টতই নির্দিষ্ট ধরণের রূপান্তরটি বোধগম্য হয়। এডিশনাল ধরণের রূপান্তরগুলি কী বোঝায়?

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

যদি আবেদনটি একটি সুনির্দিষ্ট নিয়ন্ত্রিত অঞ্চলে থাকে (একটি চিকিত্সা বা আর্থিক অ্যাপ্লিকেশন) আপনার নকশায় আরও বেশি লোককে জড়িত করার চেষ্টা করুন।

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