কোড এবং ডেটা পৃথকীকরণ কীভাবে একটি অভ্যাসে পরিণত হয়েছিল?


29

দয়া করে প্রশ্ন মনোযোগ দিয়ে পড়ুন: এটা জিজ্ঞেস কিভাবে না কেন

আমি সম্প্রতি এই উত্তরটি পেয়েছি , যা অনাবশ্যক তথ্য সংরক্ষণের জন্য একটি ডাটাবেস ব্যবহার করার পরামর্শ দেয়:

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

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

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

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

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

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

1: যদি কেউ এমন স্বাতন্ত্র্যও তৈরি করতে পারে। আমি আপনার দিকে তাকাচ্ছি, লিস্প প্রোগ্রামাররা।


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

3
আমি মনে করি উদ্ধৃতিটির লেখক যা বোঝাতে চেয়েছিলেন তা হল যাদুসংখ্যাগুলি সত্যই পরিবর্তনযোগ্য নয়।
পিটার বি

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

3
কোড এবং ডেটা পৃথক করার জন্য একটি বড় প্রযুক্তিগত কারণ হ'ল ডেটা পরিবর্তনের সময় কোডটি পুনরায় কম্পাইল করতে হবে না। সুতরাং, আমি প্রশ্ন করব যে এটি স্ক্রিপ্টিং ভাষাগুলিতে একই পরিমাণে প্রযোজ্য কিনা।
user16764

1
@ মিশেলপলুকনিস: এবং এটি একটি ডেটাবেজে রাখা একটি জাল সমাধান। ডাচ জন্য পরিবর্তন প্রয়োজন? শূন্য (একটি ডিবি পরিবর্তনও নয়)। ফ্রেঞ্চ / জার্মানের জন্য পরিবর্তনগুলি দরকার? কমপক্ষে আইএসও -8859-1 সমর্থন। (ডিবির চেয়ে বেশি) গ্রীক / রাশিয়ান ভাষা পরিবর্তন দরকার? ইউনিকোড সমর্থন (ডিবি-র চেয়ে বেশি)। প্রকৃতপক্ষে, আমি এমন কোনও ভাষা নিয়ে ভাবতে পারি না যেখানে ডিবি কোনওরকম সহায়তা করে।
এমসাল্টাররা

উত্তর:


22

কোড থেকে ডেটা আলাদা করার অনেকগুলি ভাল কারণ রয়েছে এবং না করার কিছু কারণ রয়েছে। নিম্নলিখিত মাথায় আসে।

সময়ানুবর্তিতা। কখন ডাটা মান জানা যায়? কোডটি যখন লিখিত হয়, লিঙ্কযুক্ত, প্রকাশ, লাইসেন্স, কনফিগার, সম্পাদন শুরু করা বা চলাকালীন তখন কি এটি লেখা হয়? উদাহরণস্বরূপ, এক সপ্তাহে দিনের সংখ্যা (7) তাড়াতাড়ি জানা গেলেও ইউএসডি / এউডি বিনিময় হারটি বেশ দেরিতে জানা যাবে।

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

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

উদ্বেগ বিচ্ছেদ. সঠিকভাবে কাজ করার জন্য অ্যালগরিদম পাওয়া কী ডেটা ব্যবহার করা উচিত তা বিবেচনা করে সবচেয়ে ভাল separated অ্যালগরিদমগুলি পরীক্ষা করার জন্য ডেটাগুলির প্রয়োজন, সেগুলির অংশ না হয়ে। Http://c2.com/cgi/wiki?ZeroOneInfinityRule এছাড়াও দেখুন ।

আপনার প্রশ্নের উত্তরে এটি কোনও নতুন জিনিস নয়। মূল নীতিগুলি 30 বছরেরও বেশি সময়ে পরিবর্তিত হয়নি এবং সেই সময়ে বারবার সম্পর্কে লেখা হয়েছে। আমি বিষয়টিতে কোনও বড় প্রকাশনা স্মরণ করতে পারি না কারণ এটি সাধারণত বিতর্কিত হিসাবে বিবেচিত হয় না, কেবল নতুনদের কাছে ব্যাখ্যা করার মতো কিছু। এখানে আরও কিছু রয়েছে: http://c2.com/cgi/wiki?SeparationOfDataAndCode

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

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


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

এটি আমার অভিজ্ঞতার অংশ নয়, তাই আমি আপনাকে বলতে পারি না। আমি আমার উত্তরে কয়েকটা প্যারা যুক্ত করেছি।
ডেভিড.পিএফএফএক্স

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

আপনি সর্বদা "_____ খারাপ! হুল্ক স্ম্যাম!" - তার মানে এই নয় যে এটি সত্য। প্রায়শই এই ধরণের জিনিস (যেমন "'গোটো' খারাপ! হাল্ক স্ম্যাশ!") কেন বা কেন ব্যতিক্রম সেগুলি না শিখিয়েই নতুনদের শিখিয়ে দেওয়া হয়।
আমাদানন ইনক।

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

8

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

অনুমতি

যদি ডেটা হার্ড-কোডড থাকে তবে আপনাকে সেই ডেটা সম্পাদনা করার জন্য উত্স ফাইলটি সম্পাদনা করতে হবে। এর অর্থ যে:

  • কেবল ডেভলপাররা ডেটা সম্পাদনা করতে পারে। এটি খারাপ - ডেটা এন্ট্রি এমন কিছু নয় যা বিকাশকারীর দক্ষতা এবং জ্ঞান প্রয়োজন।

  • অ-বিকাশকারী উত্স ফাইল সম্পাদনা করতে পারে। এটি খারাপ - তারা উত্স ফাইলটি এমনকি এটি না জেনে স্ক্রু করতে পারে!

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

সম্পাদনা

সুতরাং, ডেটা কে সম্পাদনা করতে পারে সে সম্পর্কে এটিকে আলাদা করে সঞ্চয় করা ভাল। কেমন হয় কিভাবে তারা ডেটা পরিবর্তন বা সম্পাদনা করব? আপনার কাছে যদি প্রচুর ডেটা থাকে তবে এটি হাতে লিখে টাইপ করা বিরক্তিকর এবং ত্রুটিযুক্ত ছাঁটাই। এর জন্য কিছুটা ইউআই করা আরও ভাল! এমনকি যদি আপনাকে এখনও সমস্ত কিছু টাইপ করতে হয়, আপনাকে ফর্ম্যাটটির বয়লার-প্লেট টাইপ করতে হবে না, সুতরাং আপনি ফর্ম্যাটটি গোলমাল করবেন এবং পুরো ফাইলটি স্ক্রু করুন!

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

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

আরোহী

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

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

অনুসন্ধান

আপনার কাছে প্রচুর ডেটা রয়েছে - এটি কেবল প্রাকৃতিক আপনি এটির মাধ্যমে অনুসন্ধান করতে চাইবেন।

  • আপনি যদি এটি একটি ডাটাবেসে সঞ্চয় করেন - আপনি ডাটাবেস ক্যোয়ারী ভাষা ব্যবহার করতে পারেন।

  • আপনি যদি এটি কোনও এক্সএমএল ফাইলে সঞ্চয় করেন - আপনি এক্সপথ ব্যবহার করতে পারেন।

  • আপনি যদি এটি JSON / YAML এ সঞ্চয় করেন - আপনি এটি আপনার পছন্দসই স্ক্রিপ্টিং ভাষার আরপিএল এ লোড করতে এবং এটি অনুসন্ধান করতে পারেন।

  • এমনকি আপনি যদি এটি সরল পুরাতন পাঠ্য ফাইলে সংরক্ষণ করেন তবে এটির একটি কাঠামো রয়েছে বলে আপনার প্রোগ্রামটি এটি সনাক্ত করতে আপনি গ্রেপ / সেড / অজক ব্যবহার করতে পারেন recognize

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

কোডের মাধ্যমে অনুসন্ধানের জন্য সরঞ্জামগুলি রয়েছে তবে তারা হার্ড কোডিং ডেটা নয়, ঘোষণাগুলি সন্ধানের জন্য ভাল।

বলা হচ্ছে যে...

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

আমার কাছে একটি ক্লাস ছিল যখন "ম্যাজিক নম্বর" সম্পর্কে আমাদের খুব কড়া নিয়ম ছিল - আমাদের কোডে আমাদের কোনও নম্বর থাকতে পারে না। তার মানে আমাদের এমন জিনিসগুলি করতে হয়েছিল:

#define THE_NUMBER_ZERO 0
//....
for(int i=THE_NUMBER_ZERO;i<cout;++i){
//....

যা একেবারেই হাস্যকর! হ্যাঁ, 0প্রযুক্তিগতভাবেই "ডেটা", তবে এটি বাকী forলুপের মতোই কোডের অংশ মাত্র ! সুতরাং যদিও আমরা এটি ডেটা হিসাবে উপস্থাপন করতে এবং কোড থেকে পৃথক করতে পারি, তার অর্থ এই নয় যে আমাদের উচিত । আমরা কোডের অভ্যন্তরে ডেটা ছেড়ে যেতে চাই না, তবে এটি সত্যিকার অর্থে কোনও ডেটা নয় - বাকি কোডের চেয়ে বেশি কিছু নয়, যা সংকেত এবং শূন্যগুলির সাথেও সংকলিত ...


7

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

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

এবং আপনি যখন এটি সম্পর্কে ভাবেন তখন ওওপি হ'ল এই চিন্তাভাবনার প্রসার। এক সাথে বাঁধাই করা ডেটা এবং আচরণ আপনাকে প্রোগ্রামের ডেটার ভিত্তিতে প্রোগ্রামের আচরণ পরিবর্তন করতে দেয় allow


2
স্বাভাবিক কারণ, স্বর তালিকা পরিবর্তন হতে চলেছে।
সিএওও

13
@cHao i18n পদক্ষেপের সাথে সাথেই তা হয়ে যায়।
মনিকা পুনরায়

2
i18n আপনার মাথা ভাঙ্গতে পারে - জাভা মধ্যে কিছু বিপথগামী উদাহরণগুলি দেখুন javaspecialists.eu/archive/Issue209.html
ররি হান্টার

2
@ অ্যাঙ্গিউ: যদিও আই 18 ই পদক্ষেপের সাথে সাথেই, আপনি যাইহোক স্ক্রু হয়ে গেছেন । এর জন্য আপনার কোড দরকার; নির্লজ্জ সমাধান এমনকি ইংরেজিতেও প্রতিটি কেস পরিচালনা করতে অক্ষম। ( ïএক সেকেন্ডের জন্য ভুলে যান ; আসুন সম্পর্কে কথা বলুন yএবং w!) তালিকাটি কোনও ডাটাবেসে সরিয়ে নেওয়া এটি ঠিক করতে পারে না, এবং এটি আসলে ক্ষতিকারক - এটি জটিলতা যা ভুল হলে অনর্থক হবে, তবে আপনি তা করবেন না এমনকি জেনে রাখুন "ভুল" কী তা যদি না আপনি গ্রাউন্ড আপ থেকে আই 18 এন জন্য ডিজাইন করেন। আপনি ইতিমধ্যে বুঝতে পেরেছেন যে স্বরগুলির একটি তালিকা এটি যেভাবেই কাটবে না।
সিএওও

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

5

উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটির ফাংশন স্বর গণনা করা হয় তবে স্বর = "আইইউউ" এতে কী দোষ আছে?

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

আপনি স্বরগুলি উল্লেখ করেছেন = "আইওউ", যদি আমি মাঝে মাঝে "y" চান তবে আমার পুরো প্রোগ্রামটি পুনরায় তৈরি করতে হবে? আমি কোডটি সংশোধন করেছি এখনই কি আমি সহজেই সংস্করণগুলি আপগ্রেড করতে পারি? যদি কোনও ত্রুটি হয়, আমি এটির কারণ হয়েছি, বা প্রোগ্রামটি ভেঙে গেছে?

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

আপনি যখন YAML বা টেক্সট ফাইল বা বোবা ডাটাবেসে ডেটা আলাদা করে রাখেন যেন আপনি কোড থেকে কোনও টিউমার সরিয়ে ফেলছেন

কেউ কেউ এটিকে বিপরীত হিসাবে দেখেন, এটি হ'ল আপনি আপনার মূল্যবান ডেটা থেকে কোডের টিউমারটি সরিয়ে দিচ্ছেন, দেখুন: ভাল প্রোগ্রামার সম্পর্কে টরভাল্ডসের উক্তি


4
টরভাল্ডস উক্তিটি ডেটা নয়, ডাটা স্ট্রাকচারকে বোঝায়।
user949300

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

1
যদি আপনি স্বর কী তার সংজ্ঞাটিতে মৌলিক পরিবর্তন করেন তবে আপনাকে সমস্ত স্বয়ংক্রিয় পরীক্ষাগুলি পুনরায় চালু করার প্রয়োজন হবে। সিস্টেমে কোনও ডিফল্ট সিস্টেমে কনফিগারেশন ফাইল পরিবর্তিত হলে পরীক্ষাগুলি পুনরায় চালু করার ক্ষমতা খুব কমই পাওয়া যায়। সুতরাং এই ধরনের সংজ্ঞাগুলি সিস্টেমের মধ্যে তৈরি করা দরকার; তাদের মধ্যে নির্বাচন করার জন্য একটি কনফিগারেশন বিকল্প সহ দুটি হার্ড কোডিং সেট হিসাবে সম্ভবত।
soru

টরভাল্ডসের উক্তিটির জন্য +1। আমি এই অনুভূতির সাথে একমত: পুতুলের উদাহরণে, আমি মনে করি যে সমস্যাটি হ'ল পুতুলের কাছে লোকেরা যে তথ্য রাখতে চান তার প্রতিনিধিত্ব করার জন্য একটি ভাল ডেটা কাঠামো নেই। ডেটা স্ট্রাকচারগুলি ঠিক করার পরিবর্তে, পুতুল বিকাশকারীরা দৃserted়ভাবে জানিয়েছিলেন যে "কোডের ডেটা" সমস্যা (কেন? এটাই প্রশ্ন!) এবং হায়েরা বিকাশ করেছে , যা আমি সমস্যাটিকে অন্য কোথাও সরিয়ে নিয়ে যাওয়ার চেয়ে সামান্যই দেখছি, এবং অতিরিক্ত এটি অসম্ভবকে পরিণত করে তোলে ডেটা সঙ্গে আচরণ জড়িত।
ফিল ফ্রস্ট

2

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

এখন, আমি এখনও মনে করি এটি একটি নির্বোধ সিদ্ধান্ত ছিল এবং যদি আমাদের হাতে অবকাঠামো না থাকে তবে আমি কেবল এটি করতাম না।

তবে আমার পক্ষে পক্ষে যুক্তিযুক্ত কয়েকটি যুক্তি হ'ল:

  • আপনার যদি কোনও ডাটাবেস মানসিকতা থাকে, তবে এসকিউএল ডাটাবেসে রেফারেন্স ডেটা রাখার ফলে আপনি এতে রিপোর্টের জন্য যোগ দিতে পারবেন।
  • আপনার যদি অ্যাডমিন ইউটিলিটি থাকে বা ডাটাবেসে অ্যাক্সেস থাকে তবে আপনি রানটাইমের সময় মানগুলি টুইঙ্ক করতে পারেন। (যদিও এটি আগুন দিয়ে খেলতে পারে))

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

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


3
দোকান পদ্ধতি সম্পর্কে ভাল মন্তব্য, যেখানে এক্সএমএল সম্পাদনা করা "ঠিক আছে" তবে কোডে একই জিনিস সম্পাদনা করা একটি বিরাট ঝামেলা।
user949300

স্ক্রিন গ্রন্থে, যেখানে এমন সমস্ত ডাটাবেসে ছিল এমন সমস্ত দোকানে কাজ করা হয়েছিল। ব্যবহারকারীর ইন্টারফেস কোড বাদে, ডাটাবেসের মধ্যে কেবল একটাই ছিল না ডাটাবেসের অবস্থান এবং শংসাপত্রগুলি ...
7'14

3
এটি সর্বদা নির্বাক শোনায়, একদিন, কেউ জিজ্ঞাসা করে যে "আমরা এটি ব্যবহারকারী এক্স এর জন্য পুনরায় কনফিগার করতে পারি যিনি এটির দাবি করছেন", এবং তার পরে এটি এত নির্বোধ বলে মনে হয় না। অভিশাপ গ্রাহক :)
gbjbaanb

2
... এবং যদি সেই দিনটি "কখনই" হয় না, তবে এটি দীর্ঘ সময়
রব

2

আমাকে একটি সম্পূর্ণ গুরুতর পাল্টা প্রশ্ন জিজ্ঞাসা করি: আপনার দৃষ্টিতে, "ডেটা" এবং "কোড" এর মধ্যে পার্থক্য কী?

যখন আমি "ডেটা" শব্দটি শুনি, তখন আমার মনে হয় "স্থিতি"। সংজ্ঞা অনুসারে ডেটা হ'ল অ্যাপ্লিকেশনটি নিজেই পরিচালনা করার জন্য তৈরি করা জিনিস এবং তাই অ্যাপ্লিকেশনটি সংকলনের সময় কখনই জানতে পারে না। হার্ড-কোড ডেটা সম্ভব নয় , কারণ আপনি এটিকে হার্ড-কোড করার সাথে সাথেই এটি আচরণে পরিণত হয় - ডেটা নয়।

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

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

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

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

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

আপনি কি নিম্নলিখিত ফর্ম্যাটটি চিনতে পারেন?

{
    name: 'Jane Doe',
    age: 27,
    interests: ['cats', 'shoes']
}

আমি নিশ্চিত বেশিরভাগ লোকেরা তা করে; এটা JSON । এবং এখানে জেএসএন সম্পর্কে আকর্ষণীয় জিনিসটি: জাভাস্ক্রিপ্টে এটি স্পষ্টভাবে কোড এবং অন্য প্রতিটি ভাষায় এটি স্পষ্টভাবে ফর্ম্যাট করে ডেটা। প্রায় প্রতিটি একক মূলধারার প্রোগ্রামিং ভাষার "পার্সিং" JSON এর জন্য কমপক্ষে একটি গ্রন্থাগার রয়েছে।

আমরা যদি কোনও জাভাস্ক্রিপ্ট ফাইলে কোনও ফাংশনের অভ্যন্তরে সেই একই একই বাক্য গঠন ব্যবহার করি তবে এটি সম্ভবত কোড ব্যতীত অন্য কিছু হতে পারে না। এবং তবুও, আমরা যদি সেই জেএসওএন নিয়ে যাই, এটি কোনও .jsonফাইলে নিক্ষেপ করে , এবং এটি একটি জাভা অ্যাপ্লিকেশনে পার্স করি, হঠাৎ এটি "ডেটা"। আসলেই কি তা বোঝা যায়?

আমি তর্ক করেন যে, "ডেটা-নেস" বা "কনফিগারেশন-অন্তরীপ" বা "কোড-অন্তরীপ" সহজাত হয় কি বর্ণনা করা হচ্ছে, না কিভাবে বর্ণনা হচ্ছে।

যদি আপনার প্রোগ্রামটির জন্য 1 মিলিয়ন শব্দের একটি অভিধানের প্রয়োজন হয়, বলুন, একটি এলোমেলো পাসফ্রেজ তৈরি করুন, আপনি কি এটিকে কোড করতে চান:

var words = new List<string>();
words.Add("aa");
words.Add("aah");
words.Add("ahhed");
// snip 172836 more lines
words.Add("zyzzyva");
words.Add("zyzzyvas");

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

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

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

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

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

সুতরাং, সংক্ষেপে:

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

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

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

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


1

আমি এই ক্লাসিক নিবন্ধটি ওরেন আইনির (ওরফে আয়েন্দে রাহিয়েন) পড়ার পরামর্শ দিচ্ছি

http://ayende.com/blog/3545/enabling-change-by-hard-coding-everything-the-smart-way

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

এইভাবে আপনি সম্ভাব্যভাবে পার্সিং / ব্যাখ্যার জটিলতাগুলি এড়াতে পারেন ("তবে অন্য কেউ আমার ওয়াইএএমএল / জেএসওএন" পার্স করে - নির্দিষ্ট এপিআই কলগুলিতে পার্সড পাঠ্যকে ম্যাপিং ব্যাখ্যার ফর্ম হতে পারে), এবং "ডেটার মধ্যে অন্য পদক্ষেপের জটিলতা এড়ানো" "এবং এর ব্যবহার।

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


1

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

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

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

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

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

"ডেটা" এবং "কোড" এর বিভাজন সম্ভবত তুচ্ছ (ফাংশন আর্গুমেন্ট) হতে পারে বা আপনি নিজেকে আক্রমণাত্মক ("ডেটা") হিসাবে আক্রমণকারীদের আচরণ করতে দেখবেন।

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

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

এখানে অ-স্পষ্ট যে কোনও কিছুই সম্ভবত "থিওরি-ডেডলক" এর একটি মামলা: একটি ইন্টারফেসকে অন্য ইন্টারফেসকে রেফারিংয়ের মতো লেখার মতো ... এবং এই সমস্ত ইন্টারফেসটি কনফিগার করার জন্য শেষে আপনার একটি ঝরঝরে xML- ফাইল রয়েছে এবং নির্ভরতা আপনার শ্রেণি-ইন্টারফেস-গণ্ডগোলের মধ্যে injুকিয়ে দেওয়া।

কেবল আশা করি, আপনি যে এক্সএমএল-পার্সারটি প্রয়োজন তখন কাজ করার জন্য কোনও এক্সএমএল-কনফিগার প্রয়োজন না ...

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