জটিলতা কখন সরানো উচিত?


14

প্রয়োজন আগে ডিজাইনের নিদর্শনগুলি প্রয়োগ করার আগে অকাল সময়ে জটিলতার পরিচয় করানো ভাল অনুশীলন নয়।

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

তবে একবার সেই জটিলতাটি চালু হয়ে গেলে এবং চ্যাম্পের মতো কাজ করা কখন আপনি এটি সরিয়ে দেবেন?

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

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

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

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

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

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

তবে আমি 2 (সম্পর্কিত) বিষয় সম্পর্কে যত্নশীল

  1. আমি কিছুটা যত্ন নিই যে কোডটি বোঝার চেষ্টা করার সময় নতুন রক্ষণকারীকে কিছুটা আরও কঠিন চিন্তা করতে হবে। জটিলতা জটিলতা এবং আমি আমার পরে আসা মনো মনোবলকে রাগ করতে চাই না।

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

তাই ...

সাধারণভাবে পূর্বে প্রয়োজনীয় জটিলতাগুলি কার্যকর হওয়া সত্ত্বেও মুছে ফেলা উচিত ছিল এবং জটিলতার জন্য historতিহাসিকভাবে প্রমাণিত প্রয়োজন রয়েছে তবে ভবিষ্যতে এটির প্রয়োজন হবে এমন কোনও ইঙ্গিত আপনার নেই?

এমনকি উপরের প্রশ্নের উত্তরটি যদি "না" হিসাবে দেওয়া হয় তবে প্রতিযোগী (বা অপরিচিত) কে প্রকল্পটি বন্ধ করে দিলে এই "অ-প্রয়োজন" জটিলতাটি সরিয়ে ফেলা কি বুদ্ধিমানের কাজ নয়?

উত্তর:


7

কিছু উপায়ে, আমি মনে করি এটি মূলত একটি ব্যবসায়ের সিদ্ধান্ত এবং কোডের উপর ভিত্তি করে অগত্যা নয়। কিছু বিষয় বিবেচনা করুন:

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

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

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


6

এই কোডটি মুছে ফেলা হচ্ছে না এবং ক্লায়েন্টকে বিবেচনা করা উচিত এবং তার জন্য অর্থ প্রদানের প্রয়োজন এমন কোনও বৈশিষ্ট্য কোডিংয়ে ভবিষ্যতের স্বাচ্ছন্দ্যের জন্য এটিকে সহজ কিছু দিয়ে প্রতিস্থাপন করা হচ্ছে না?

অন্য বিকাশকারী আপনার কাছ থেকে কিছু শিখতে পারে এমন দরকারী কিছু হতে পারে তবে অন্য ক্লায়েন্টের অ্যাপ্লিকেশনটিকে এটিতে প্লাগ করতে সন্ধানের প্রতিক্রিয়া সম্ভবত নেই is

প্রতিযোগীর কোড সম্পর্কে গসিপ করা এমন কিছু নয় যা আপনি প্রতিরোধ করতে পারেন। তারা ক্লায়েন্টকে নেতিবাচকভাবে নিয়োগের চেষ্টা করতে বোকামি দেখাবে।


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

3

একটি সাধারণ বক্তব্য হ'ল: "যদি এটি না ভেঙে যায় তবে এটি সংশোধন করবেন না"।

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

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


2

প্রথমত, যদি অ্যাপ্লিকেশনটি একবারে নতুন মালিকের দ্বারা নেওয়া হয়ে থাকে, তবে এটি আবার ঘটতে পারে। এবং পরবর্তী মালিক আবার সেই জটিলতা ব্যবহার করা শুরু করতে পারেন যা এই মুহূর্তে উপকৃত হয় না।

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

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


1

সাধারণভাবে পূর্বে প্রয়োজনীয় জটিলতাগুলি কার্যকর হওয়া সত্ত্বেও মুছে ফেলা উচিত ছিল এবং জটিলতার জন্য historতিহাসিকভাবে প্রমাণিত প্রয়োজন রয়েছে তবে ভবিষ্যতে এটির প্রয়োজন হবে এমন কোনও ইঙ্গিত আপনার নেই?

না।

এমনকি যদি উপরের প্রশ্নের সাধারণভাবে "না" উত্তর দেওয়া হয় তবে কোনও প্রতিযোগী (বা অপরিচিত) কে প্রকল্পটি বন্ধ করে দিলে এই "অ-প্রয়োজনীয়" জটিলতাটি সরিয়ে ফেলা কি বুদ্ধিমানের কাজ নয়?

না। নিম্ন অগ্রাধিকারের কাজগুলি ঠিক করার জন্য আপনার সময় নষ্ট করা কেন? কোডটি সেখানে থাকার জন্য কোনও ক্ষতি নেই।

আপনার প্রশ্নের হিসাবে: জটিলতা কখন সরানো উচিত?

আমার গ্রহণটি হ'ল, যদি এটি না ভেঙে যায় তবে এটি ঠিক করবেন না


0

জটিলতা অপসারণ করতে সক্ষম হতে নিম্নলিখিতগুলি অবশ্যই সত্য:

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

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

0

আমি মনে করি এখানে কাজের আরও বড় কিছু আছে ... স্কেলাবিলিটি

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

সুতরাং, আমি বলি কোডটি রাখুন এবং এটি নথি করুন। অ্যাপ্লিকেশনটি কীভাবে কাজে লাগানো যায় তার এটি একটি বৈশিষ্ট্য।


0

সাধারণভাবে পূর্বে প্রয়োজনীয় জটিলতাগুলি কার্যকর হওয়া সত্ত্বেও মুছে ফেলা উচিত ছিল এবং জটিলতার জন্য historতিহাসিকভাবে প্রমাণিত প্রয়োজন রয়েছে তবে ভবিষ্যতে এটির প্রয়োজন হবে এমন কোনও ইঙ্গিত আপনার নেই?

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

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

এমনকি উপরের প্রশ্নের উত্তরটি যদি "না" হিসাবে দেওয়া হয় তবে প্রতিযোগী (বা অপরিচিত) কে প্রকল্পটি বন্ধ করে দিলে এই "অ-প্রয়োজন" জটিলতাটি সরিয়ে ফেলা কি বুদ্ধিমানের কাজ নয়?

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

যদি প্রয়োজনীয়তাগুলি পরিবর্তিত হয়, তবে আপনি কোডটি (বা সার্জিকভাবে প্যাটার্নটি সরিয়ে ফেলতে কাজের পরিমাণ) ভেঙে ফেলতে পারেন এমন ঝুঁকির কারণে আপনি এটিকে ছেড়ে দিয়ে ন্যায়সঙ্গত করতে পারেন।


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

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

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

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

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