এটি একটি অস্পষ্ট প্রশ্ন, তবে এটি এমন কোনও বিষয় যা আমি কখনই অনুভব করিনি সঠিক নকশার বিষয়ে পড়ার সময় সন্তোষজনক উপায়ে উত্তর দেওয়া হয়েছে।
সাধারণত, যখন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, বিমূর্ততা, ফ্যাক্টরিং ইত্যাদি সম্পর্কে শিখার সময় ডিজাইনের পবিত্র ক্রেডিটি - এবং তারা যে কারণে সর্বদা দাবি করে যে আপনি বিকাশের কৌশলগুলি প্রশ্নবিদ্ধভাবে ব্যবহার করছেন - তা হ'ল এটি আপনার প্রোগ্রামটিকে "পরিবর্তন করা সহজ" করে তুলবে , "রক্ষণাবেক্ষণযোগ্য", "নমনীয়", বা এই জাতীয় উত্পাদনশীল-সাউন্ডিং ধারণাটি প্রকাশ করতে ব্যবহৃত প্রতিশব্দগুলির কোনও। আইভরগুলিকে ব্যক্তিগত হিসাবে চিহ্নিত করে, কোডকে অনেকগুলি ছোট, স্ব-অন্তর্ভুক্ত পদ্ধতিতে বিভক্ত করে, ইন্টারফেসগুলি সাধারণ রাখে, আপনি সম্ভবত পুরো আরাম এবং কৃপায় আপনার প্রোগ্রামটি পরিবর্তন করার দক্ষতা অর্জন করবেন।
অপেক্ষাকৃত ছোট পরিবর্তনগুলির জন্য, এটি আমার পক্ষে ভাল কাজ করেছে। পারফরম্যান্স বাড়ানোর জন্য কোনও শ্রেণীর দ্বারা ব্যবহৃত অভ্যন্তরীণ ডেটা স্ট্রাকচারের পরিবর্তনগুলি কখনও বড় অসুবিধা হয়ে ওঠেনি, এবং এপিআই থেকে পৃথক ব্যবহারকারী-ইন্টারফেসের শেষের কোনও পরিবর্তন নেই, যেমন একটি পাঠ্য এন্ট্রি সিস্টেমকে নতুন করে নকশা করা বা গেমপ্লে উপাদানগুলির জন্য গ্রাফিকগুলি ওভারহোলিংয়ের মতো ।
এই সমস্ত পরিবর্তনগুলি অন্তর্নিহিত স্বাবলম্বী বলে মনে হচ্ছে। এগুলির মধ্যে কোনওটিই আপনার প্রোগ্রামের উপাদানটির পরিবর্তন বা ডিজাইনে কোনও পরিবর্তন জড়িত নয় যতটা বাহ্যিক কোড সম্পর্কিত it আপনি প্রক্রিয়াগতভাবে বা একটি ওও স্টাইলে, বড় ফাংশন বা ছোট সহ লেখেন বা না থাকুন, আপনার কেবলমাত্র একটি মাঝারি ভাল ডিজাইন থাকলেও এগুলি করা সহজ পরিবর্তন।
যাইহোক, যখনই পরিবর্তনগুলি বড় এবং লোমশ হয়ে যায় - অর্থাত্ এপিআই-তে পরিবর্তিত হয় - আমার মূল্যবান "নিদর্শনগুলি" কখনই উদ্ধার করতে আসে না। বড় পরিবর্তনটি বড় থেকেই যায়, প্রভাবিত কোডটি প্রভাবিত থাকে এবং বহু ঘন্টা বাগ-স্প্যানিংয়ের কাজটি আমার সামনে থাকে।
তাই আমার প্রশ্ন হল এটি. উপযুক্ত ডিজাইনের সুবিধার্থে সক্ষম হতে কত বড় পরিবর্তন দাবি করে? আরও কিছু ডিজাইনের কৌশল আছে, না হয় আমার অজানা বা আমি প্রয়োগ করতে ব্যর্থ হয়েছি, যা সত্যই স্টিকি-সাউন্ডিং মডিফিকেশনকে সহজ করে তোলে, বা সেই প্রতিশ্রুতি (যা আমি অনেকগুলি বিভিন্ন দৃষ্টান্তে শুনেছি) কেবল একটি দুর্দান্ত ধারণা, সফটওয়্যার বিকাশের অপরিবর্তনীয় সত্য থেকে সম্পূর্ণ বিচ্ছিন্ন? আমি কি আমার টুলবেলেটে যুক্ত করতে পারি "পরিবর্তন সরঞ্জাম"?
বিশেষত, আমি যে সমস্যাগুলির মুখোমুখি হয়েছি যেগুলি আমাকে ফোরামে নিয়ে গেছে তা হ'ল: আমি একটি ব্যাখ্যাযুক্ত প্রোগ্রামিং ভাষা বাস্তবায়নে কাজ করে যাচ্ছি (ডি তে প্রয়োগ করা হয়েছে, তবে এটি প্রাসঙ্গিক নয়), এবং আমি সিদ্ধান্ত নিয়েছি যে আমার ক্লোজারগুলির যুক্তিগুলি হওয়া উচিত মূলশব্দ-ভিত্তিক, অবস্থানের পরিবর্তে বর্তমানে যেমন রয়েছে তেমন। এর জন্য বেনামে ফাংশন বলার জন্য বিদ্যমান বিদ্যমান কোডটি সংশোধন করা দরকার, যা ভাগ্যক্রমে, বরং এটি খুব ছোট কারণ আমি আমার ভাষার বিকাশ শুরু করছি (<2000 লাইন), তবে আমি যদি পরবর্তী পর্যায়ে এই সিদ্ধান্তটি নিয়ে থাকি তবে তা প্রচুর হবে। এমন পরিস্থিতিতে, ডিজাইনের যথাযথ দূরদর্শিতার দ্বারা আমি এই পরিবর্তনটি আরও সহজ করে তুলতে পারতাম বা কিছু (বেশিরভাগ) পরিবর্তন অভ্যন্তরীণ সুদূরপ্রসারী? আমি আগ্রহী যদি এটি কোনওভাবেই আমার নিজের ডিজাইনের দক্ষতার ব্যর্থতা হয় - যদি হয় তবে আমি '
স্পষ্টতই, আমি কোনওভাবেই ওওপি বা সাধারণত ব্যবহৃত অন্যান্য নিদর্শনগুলির সম্পর্কে সন্দেহবাদী নই। আমার জন্য তবে তাদের গুণাবলী কোড বেসগুলির রক্ষণাবেক্ষণের পরিবর্তে মূল লেখায় writing উত্তরাধিকার আপনাকে পুনরাবৃত্ত নিদর্শনগুলিকে ভালভাবে বিমূর্ত করতে দেয়, পলিমারফিজম আপনাকে মেশিন-বোঝা প্রভাব ( switch
বিবৃতিতে কোন শাখা) না দিয়ে মানব-বোঝা ফাংশন (কোন শ্রেণি) দ্বারা কোড পৃথক করতে দেয় এবং ছোট, স্ব-অন্তর্ভুক্ত ফাংশন আপনাকে অনুমতি দেয় খুব মনোরম "ডাউন-আপ" স্টাইলে লিখুন। তবে আমি তাদের নমনীয়তার দাবী সম্পর্কে সন্দেহবাদী।
foo metarg1: bar metarg2: baz
হিসাবে বিবেচনা করার ক্ষেত্রে এটি একটি সহজ বিষয় foo.metarg1_metarg2_(bar, baz)
। যাইহোক, আমার ভাষা, যা রানটাইম কিন্তু প্রভাবিত একটি বৃহত্তর পরিবর্তন, ডিকশনারি বেজড প্যারামিটার যথা তালিকা ভিত্তিক প্যারামিটার, করছে না আমার ভাষা নির্দিষ্ট বৈশিষ্ট্য আমি এই মুহূর্তে মধ্যে যেতে হবে না কারণে, পার্সার আসলে। যেহেতু আনর্ডারড-কীওয়ার্ড এবং অবস্থানগত তর্কগুলির মধ্যে কোনও স্পষ্ট ম্যাপিং নেই, তাই রানটাইমই মূল বিষয় issue