কোনও প্রকল্পের বিকাশ হওয়ার সাথে সাথে আমি প্রায়শই নতুন করে ডিজাইন করছি এমনটি কি খারাপ চিহ্ন?


39

আমি যখন প্রথম প্রোগ্রামিং শুরু করলাম, আমি ধরে নিয়েছিলাম যে আমি একদিন এমন এক জায়গায় পৌঁছে যাব যেখানে আমি বসে বসে সমস্ত ক্লাসের একটি ইউএমএল ডায়াগ্রামটি স্কেচ করে একটি প্রকল্প শুরু করব, তারপরে এটি বেশ দৃ to়ভাবে আটকে থাকবে। আমি এখন কয়েক বছর ধরে প্রোগ্রামিং করছি এবং এটি সেভাবে সরে যাচ্ছে না। আমি যখন কোনও প্রকল্পের মধ্য দিয়ে যাচ্ছি, আমি প্রায়শই বলছি

  • "আরে, আমাকে ক্লাস করা দরকার _ _ আমি এর আগে ভেবে দেখিনি।"
  • "অপেক্ষা করুন, এই ফাংশনটি এর পরিবর্তে সেই শ্রেণিতে হওয়া উচিত I'll আমি এটিকে সরিয়ে দেব।"
  • "এটি আসলে একের পরিবর্তে দুটি শ্রেণি হওয়া উচিত I'll আমি এটি ভাগ করব" "
  • "আমার এই তিনটি একা ক্লাসগুলি একটি বিমূর্ত শ্রেণীর উত্তরাধিকারী হওয়া উচিত make"
  • Etcetera, ইত্যাদি।

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

উত্তর:


41

এটি বিকাশের একটি সাধারণ অংশ। অবিচ্ছিন্ন ডিজাইনের মূল দুটি মূল হ'ল:

  1. আপনি সর্বজ্ঞানী নন, আপনি শুরুর আগে পুরো সিস্টেমটি শুরু থেকে শেষ পর্যন্ত জানতে পারবেন না।
  2. ডিজাইন স্থির নয়। এটি আরও বেশি প্রচলিত হয় যখন কোনও প্রকল্প দীর্ঘকাল ধরে ব্যবহৃত হয় এবং এখন যে সমস্যাগুলি সমাধান করছে তা হ'ল এটি প্রথম যখন লেখার সময় সমাধান করা হয়েছিল are

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

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


3
+1, এই কারণেই যখন আমি লোকেরা ডাটাবেসে সিরিয়ালকরণের কথা বলি তখন আমি সর্বদা ক্রিঙ করি -> এবং যদি আগামীকাল আপনার ক্লাসটি একাধিক অংশে বিস্ফোরিত হয়, তবে আপনি কীভাবে পুরানো কোডটি না রেখেই deserialize করবেন? আমি প্রোটোবুফ বিকল্পকে (স্টোরেজ / বার্তা বিনিময়ের জন্য উত্সর্গীকৃত ক্লাস) পছন্দ করি যেখানে আপনার মূল ক্লাসগুলি বিকশিত হতে পারে এবং আপনার কেবল সিরিয়ালাইজেশন / ডিসরিয়ালাইজেশন স্তরটি মানিয়ে নিতে হবে।
ম্যাথিউ এম।

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

1
@ কেভিন: আমাদের ধারনা করা একই ডাটাবেসগুলি আমাদের কাছে নেই, খনিতে কয়েক লক্ষ লক্ষ লাইন রয়েছে। মাইগ্রেশন হয় না একটি বিকল্প।
ম্যাথিউ এম।

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

12

আপনি যা করছেন জনপ্রিয়তাকে "রিফ্যাক্টরিং" হিসাবে উল্লেখ করা হয়। আপনি যদি কখনও এটি করা বন্ধ করেন তবে আপনি সমস্যায় পড়েছেন।

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


10

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

চতুর সফ্টওয়্যার বিকাশ সাধারণত জলপ্রপাত মডেল থেকে একেবারে পৃথক যে এটি উপযুক্ত করতে অনুশীলন আছে


5

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

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

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


6
পদক্ষেপ 1: ইউএমএল ডায়াগ্রাম তৈরি করুন। পদক্ষেপ 2: কোড লিখুন। পদক্ষেপ 3: ইউএমএল ডায়াগ্রামটি ছুঁড়ে ফেলে দিন যাতে কেউ কখনই এটি দেখে না এবং কোডটি আসলে কীভাবে কাজ করে সে সম্পর্কে বিভ্রান্ত হয়ে পড়ে।
কুবি

4

আপনি যা করছেন তা পুরোপুরি স্বাভাবিক (তবে আপনি প্রতিবার পুরোপুরি স্ক্র্যাচ থেকে শুরু না করে থাকেন)। আমি বিশ বছরেরও বেশি সময় ধরে এটি করেছি এবং এটি এখনও একটি পুনরাবৃত্তি প্রক্রিয়া।

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


2

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

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


0

এটিকে পুনরাবৃত্তি প্রক্রিয়া বলা হয় এবং এটি সমস্ত আধুনিক সফ্টওয়্যার বিকাশের কৌশলগুলির একটি প্রাথমিক ধারণা।

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