সলাইড অনুসরণ করে কি প্রযুক্তি স্ট্যাকের শীর্ষে একটি কাঠামো লেখার দিকে পরিচালিত করে?


70

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

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

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

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


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

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

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


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

উত্তর:


84

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

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

অন্যান্য বিকাশকারীদের প্রয়োজন হতে পারে নমনীয়তা সরবরাহ করুন

পরিবর্তে, নমনীয়তা অন্যান্য বিকাশকারীদের প্রদান আসলে প্রয়োজন যত তাড়াতাড়ি তারা এটি প্রয়োজন হিসাবে , কিন্তু তার আগে নয়।

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

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

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


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

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

3
"আমরা পুনরায় ব্যবহারযোগ্য কোডটি লেখার চেষ্টা করার আগে আমাদের ব্যবহারযোগ্য কোডটি লিখতে হবে" - খুব জ্ঞানী!
গ্রাহাম

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

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

49

আমার অভিজ্ঞতা থেকে, কোনও অ্যাপ লেখার সময় আপনার কাছে তিনটি পছন্দ রয়েছে:

  1. প্রয়োজনীয়তাগুলি সম্পূর্ণ করার জন্য কোডটি লিখুন,
  2. জেনেরিক কোড লিখুন যা ভবিষ্যতের প্রয়োজনীয়তাগুলির প্রত্যাশার পাশাপাশি বর্তমান প্রয়োজনীয়তাগুলি পূরণ করে,
  3. কোডটি লিখুন যা কেবলমাত্র বর্তমান প্রয়োজনীয়তা পূরণ করে, তবে অন্য প্রয়োজন মেটাতে পরে পরিবর্তন করা সহজ।

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

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

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

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


এই সাইটে আমার প্রিয় উত্তর!
দ্যাটিক্যাটহিস্পেরার

আমি নিশ্চিত না যে আপনি কীভাবে এই সিদ্ধান্তে পৌঁছলেন যে 1) 3 এর চেয়ে বেশি পরীক্ষা করা কঠিন)। পরিবর্তনগুলি করা আরও কঠিন, নিশ্চিত, তবে আপনি পরীক্ষা করতে পারবেন না কেন? যদি কিছু হয় তবে সফ্টওয়্যারটির এককমন্বিত টুকরোটি আরও সাধারণের চেয়ে প্রয়োজনীয়গুলির বিরুদ্ধে পরীক্ষা করা আরও সহজ।
মিস্টার লিস্টার

@ মিস্টারলিস্টার দুটি হাতের মুঠোয়, ১. এর চেয়ে তিনটি পরীক্ষা করা আরও কঠিন কারণ সংজ্ঞাটি বোঝায় যে এটি "এমনভাবে লেখা হয়নি যা অন্যান্য প্রয়োজন মেটাতে পরে পরিবর্তন করা সহজ" "
বুথ

1
+0; IMVHO আপনি 'ও' (উন্মুক্ত-বন্ধ) যেভাবে কাজ করেন তার ভুল ব্যাখ্যা দিচ্ছেন (একটি সাধারণ উপায়ে হলেও)। উদাহরণস্বরূপ দেখুন কোডব্লগ.জোনসকেট.উক / ২০১৩ / ০৩ /১ //২ - এমনকি ছোট কোডবেসেও কোডের স্ব-সংযুক্ত ইউনিট (যেমন ক্লাস, মডিউল, প্যাকেজ, যা কিছু) রয়েছে সে সম্পর্কে আরও বেশি, যা বিচ্ছিন্নভাবে পরীক্ষা করা যায় এবং যুক্ত করা যায় / প্রয়োজন দেখা দেয় হিসাবে সরানো। এর একটি উদাহরণ হ'ল ইউটিলিটি পদ্ধতির একটি প্যাক - আপনি তাদের যেভাবে বান্ডিল করেন তা নির্বিশেষে সেগুলি 'বন্ধ' হওয়া উচিত, অর্থাত্ স্বনির্ভর হওয়া উচিত এবং 'উন্মুক্ত' অর্থাত্ কোনও উপায়ে প্রসারিত।
ভ্যাক্সকুইস

বিটিডাব্লু, এমনকি চাচা ববও এক পর্যায়ে চলেছেন: "[উন্মুক্ত-বদ্ধ] এর অর্থ হ'ল আপনার কোডটি এমন একটি অবস্থানে আনার জন্য প্রচেষ্টা করা উচিত, যখন আচরণ প্রত্যাশিত উপায়ে পরিবর্তিত হয়, আপনাকে ঝাড়ফুঁক করতে হবে না সিস্টেমের সমস্ত মডিউল পরিবর্তন। আদর্শভাবে, আপনি নতুন কোড যুক্ত করে, এবং খুব কম বা কোনও পুরানো কোড পরিবর্তন করে নতুন আচরণ যুক্ত করতে সক্ষম হবেন ” <<- এটি স্পষ্টতই এমনকি ছোট অ্যাপ্লিকেশনগুলিতে প্রযোজ্য, যদি সেগুলি কখনও সংশোধন বা স্থির করার উদ্দেশ্যে থাকে (এবং, আইএমভিএইচও, যা সাধারণত ক্ষেত্রে, ESP যখন সংশোধন করা হয়েছে বিষয়ে। মৃদুহাস্য )
vaxquis

8

আপনার যে দৃষ্টিকোণটি রয়েছে তা ব্যক্তিগত অভিজ্ঞতা থেকে ঝুঁকতে পারে। এটি স্বতঃস্ফূর্ত তথ্যগুলির পিছলে slাল যা পৃথকভাবে সঠিক, তবে ফলাফলটি অনুমান করা হয় না, যদিও এটি প্রথম নজরে সঠিক বলে মনে হয়।

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

এর অর্থ হ'ল আপনি যখন ফ্রেমওয়ার্ক এবং আরও ছোট গ্রন্থাগারগুলির সাথে ইন্টারঅ্যাক্ট করেন, আপনি যে ভাল অনুশীলন কোডটি ব্যবহার করেন তার সাথে আরও বড় ফ্রেমওয়ার্কগুলি পাওয়া যায় be

এই ত্রুটি খুব সাধারণ, উদাহরণস্বরূপ আমার দ্বারা চিকিত্সা করা প্রতিটি ডাক্তার অহংকারী ছিল। অতএব আমি সিদ্ধান্তে পৌঁছেছি যে সমস্ত ডাক্তার অহংকারী। এই ভুলগুলি সর্বদা ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে একটি কম্বল অনুকরণ তৈরি করে ভোগ করে।

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


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

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

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

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

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

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


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

এটি একটি আকর্ষণীয় বিষয় এবং এটি (আমার অভিজ্ঞতায়) মূল কারণ কেন লোকেরা এখনও ভাল অনুশীলন এড়ানো ন্যায়সঙ্গত করার চেষ্টা করে।

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

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

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

তদুপরি, পরিবর্তনের জন্য অপ্রত্যাশিতভাবে আরও বেশি কাজের প্রয়োজন হয় যা আপনি প্রথমে ভাস্বরভাবে নির্মিত কোডবেসগুলিতে ভেবেছিলেন তার চেয়ে আপনার বিকাশের সময়টিকে দু'টির পরিবর্তে তিন সপ্তাহের দিকে ঠেলে দেবে।

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

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

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

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


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

আপনি ওপির অভিজ্ঞতাটিকে "ভ্রান্তি" হিসাবে অস্বীকার করছেন। গঠনমূলক নয়।
সর্বোচ্চ 630

@ সর্বোচ্চ 30৩০ আমি এটি অস্বীকার করছি না। আমি কেন ওপির পর্যবেক্ষণগুলি বৈধ তা ব্যাখ্যা করে উত্তরের একটি ভাল অংশ ব্যয় করেছি।
ফ্ল্যাটার

1
@ Igneous01 সলাইড একটি কাঠামো নয়। সলাইড একটি বিমূর্ততা, যা সাধারণত কোনও কাঠামোর মুখোমুখি হয়। যেকোন ধরণের বিমূর্ততা প্রয়োগ করার সময় (এসওএলআইডি সহ) সর্বদা যুক্তিযুক্ততার একটি লাইন থাকে। আপনি কেবল বিমূর্ততার জন্য বিমূর্ত করতে পারবেন না, আপনি এমন কোডগুলি নিয়ে যুগে যুগে কাটাবেন যা এতটা জেনারেলাইজড মেনে চলা কঠিন। আপনি যা যুক্তিসঙ্গতভাবে সন্দেহ করেন তার কেবল বিমূর্ততা ভবিষ্যতে আপনার পক্ষে কার্যকর হবে। তবে, আপনি যেমন আপনার বর্তমান ডাটাবেস সার্ভারের সাথে আবদ্ধ হন তা ধরে নেওয়ার ফাঁদে পড়বেন না। আগামীকাল কোন নতুন ডাটাবেস প্রকাশ হবে তা আপনি কখনই জানেন না।
ফ্ল্যাটার

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

7

SOLID কী করে সহজ কোডটিকে ফ্রেমওয়ার্ক কোডে পরিণত করে? আমি কোনওভাবেই সলাইডের পক্ষে স্ট্যান নই তবে আপনি এখানে কী বোঝাতে চেয়েছেন তা সত্য নয়।

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

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


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


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

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

4
@ Igneous01 এই যুক্তিটি ব্যবহার করে আপনি গ্রাহক এবং সেটটারগুলিও পরিত্যাগ করতে পারেন, কারণ আপনি প্রতিটি পরিবর্তনশীল সেটারের জন্য পৃথক শ্রেণি তৈরি করতে পারেন এবং প্রতিটি গেটারের জন্য একটি করে বর্গ তৈরি করতে পারেন। আইই: class A{ int X; int Y; } class A_setX{ f(A a, int N) { a.X = N; }} class A_getX{ int f(A a) { return X; }} class A_setY ... etc.আমি মনে করি আপনি এটি আপনার কারখানার দাবিতে খুব মেটা দৃষ্টিকোণ থেকে দেখছেন। সূচনাটি ডোমেন সমস্যার কোনও দিক নয়।
অ্যারন

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