কোডিংয়ের এই পদ্ধতিটি বর্ণনা করার জন্য কি কোনও প্রতিষেধক রয়েছে? [বন্ধ]


26

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

ErrorLog.Log(ex, "friendly message");

তিনি ঠিক একই কাজটি সম্পাদনের জন্য অন্যান্য বিভিন্ন উপায় যুক্ত করেছিলেন। ই জি

SomeClass.Log(ex, "friendly message");

যা কেবল ঘুরে ফিরে প্রথম পদ্ধতিটিকে কল করে। এটি কোনও অতিরিক্ত সুবিধা ছাড়াই জটিলতার মাত্রা যুক্ত করে। এটি বর্ণনা করার জন্য কি কোনও বিরোধী-নিদর্শন রয়েছে?


36
"খারাপ কোডিং" এটি কভার করে;)
ওডে

12
নির্ভর করে। এটি কি লগিং লাইব্রেরির জন্য একটি মোড়ক? যদি কখনও সুযোগ
রিগ

3
@ লরতাব্যাক: "বাকলভা কোড" এর সাথে সমস্যাটি হ'ল এটি একাটি ভাল এবং সুস্বাদু বলে মনে হয় এবং তাই এটি পছন্দসই।
হতাশ

10
আপনি যখন তাদের যুক্ত করেন তখন এই প্রোগ্রামারটি কী বলবে কেন তারা এই পদ্ধতিগুলি যুক্ত করছে? তাদের যুক্তি বোঝার দ্বারা তাদের শিক্ষিত করা সহজ হওয়া উচিত।
কিথ

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

উত্তর:


54

কিছু খারাপ কোডিং অভ্যাসকে এন্টিপ্যাটার্ন বলা ভাল তবে এটি যুক্তিসঙ্গতভাবে ব্যাপকভাবে ছড়িয়ে পড়ে।

বাকি আমরা কেবল "আবর্জনা কোড" বলি ...


যদি আমি এই বিশেষ খারাপ অভ্যাসের জন্য কোনও নাম প্রস্তাব করি তবে এটি হবে "অবসেসিভ অ্যাবস্ট্রাকশন ডিসঅর্ডার" :-)


9
আমি সর্বদা "ইন্দিরিশন হেল" ব্যবহার করেছি।
ড্যান নীলি

27

না, এটি বিরোধী নিদর্শন নয় তবে আমি নিম্নলিখিত বিষয়গুলি উত্থাপন করব।

একক দায়বদ্ধতা লঙ্ঘন

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

একটি is-aসম্পর্ক লঙ্ঘন

বেস ক্লাসগুলি এমন কোনও সরঞ্জামবাক্স নয় যেখানে আপনি বেশ কয়েকটি সুবিধাজনক পদ্ধতি যুক্ত করতে পারেন।

বেস ক্লাসের প্রয়োগগুলি কার্যকরভাবে দম্পতিরা সমস্ত উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলিতে করে।

এটি কম্পোজিশনের সাথে তুলনা করুন।


1
"একক দায়িত্ব ইস্যু"? SRP? সম্ভবত আপনি একক দায়িত্ব নীতি লিখতে চেয়েছিলেন? শুধু এখানে দুটি সংযোগ। :)
zxcdw

8

এটি এটি গ্রহণযোগ্য করে তোলে না তবে এটি কেবল একটি অসম্পূর্ণ পুনঃসংশোধক হতে পারে। সম্ভবত সোমারক্লাস.লগ () এর নিজস্ব যুক্তি ছিল যা প্রথমে প্রয়োগ করা হয়েছিল। এবং পরে তারা বুঝতে পেরেছিল যে তাদের ত্রুটি-লগ.লগ () ব্যবহার করা উচিত। সুতরাং যেখানে সোমারক্লাস.লগ () বলা হয়েছে সেখানে 100 টি স্থান পরিবর্তন করার পরিবর্তে তারা কেবল ত্রুটি-লগ.লগ () -কে অর্পণ করেছেন। ব্যক্তিগতভাবে আমি সমস্ত উল্লেখগুলি ত্রুটি-লগ.লগ () এ পরিবর্তন করব বা কমপক্ষে সামারক্লাস.লগ () কমেন্ট করে মন্তব্য করব কেন এটি এমনভাবে প্রতিনিধিত্ব করে।

কিছু বিবেচনা করার জন্য।


7

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


3
একই জিনিসটি বর্ণনা করতে আমি "পেঁয়াজ কোড" শুনেছি।
জাস্টিন নিসনার

4

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

স্পষ্টতই এখানে উত্তরাধিকার ব্যবহারের একটি উপায় রয়েছে (বা শ্রেণিবদ্ধ করার জন্য যা লগিং ইন্টারফেস প্রয়োগের জন্য লগিং প্রয়োজন)।


তবুও খারাপ অনুশীলন কারণ: 1) এটি পরিবর্তিত হওয়ার সম্ভাবনা নেই 2) যদি এটি পরিবর্তন হয় তবে তারা কেবল একই নামের সাথে একটি র‌্যাপার শ্রেণি তৈরি করতে এবং আমদানিগুলি পরিবর্তন করতে পারে।
কেভিন cline

2
+1 টি। এবং এখানে "আঙ্কেল বব" (রবার্ট মার্টিন) কোডের মাধ্যমে ছড়িয়ে দেওয়ার পরিবর্তে সীমিত সংখ্যক মডিউলে নির্ভরতা কেন্দ্রিককরণের পক্ষে তর্ক করছেন
মার্কজে

3

অথবা আমরা এটিকে "শিক্ষণীয় মুহুর্ত" হিসাবে দেখতে পারি :)

আপনার বিকাশকারী একটি ভাল ধারণা অর্ধেক যেতে পারে। মনে করুন যে আপনার প্রয়োজনীয়তাটি আপনার ব্যবসায়িক সমস্ত বস্তুর বুদ্ধিমান লগিং সক্ষম want আপনি সংজ্ঞায়িত করতে পারেন:

   public interface IBusinessObjectLogger
   {
       void Log(Exception ex, string logMessage)
   }

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


3

আমি নিশ্চিত না যে এটি স্বয়ংক্রিয়ভাবে মন্দ।

আপনি যদি স্যামক্লাসকে ফোন করছেন। তবে এটি অবশ্যই খুব খারাপ but


2

এটি নির্দিষ্ট কিছু কোডিং শৈলীতে আসলে বেশ সাধারণ, এবং চিন্তার লাইনের মূল বিষয়গুলি তাদের মধ্যে একটি বিরোধী-নিদর্শন নয়।

এটি সম্ভবত বিস্তৃত কোডবাস সম্পর্কে জ্ঞান ছাড়াই প্রয়োজনীয়তার সাথে কোডিংয়ের ফলাফল: "ঠিক আছে, এই কোডটিতে একটি ত্রুটি লগ করা দরকার, তবে সেই ফাংশনটি কোডটির প্রাথমিক উদ্দেশ্য নয় Therefore সুতরাং, আমার একটি পদ্ধতি / শ্রেণি প্রয়োজন যা এটি করবে আমার জন্য". এটি ভাবনার একটি ভাল উপায়; তবে, ত্রুটিযুক্ত লগের অস্তিত্ব না জেনে তারা سومক্লাস তৈরি করেছিল। এরপরে তারা পরে কোনও স্থানে ত্রুটিযুক্তি খুঁজে পেয়েছিল এবং তারা যে পদ্ধতিতে রেখেছিল তার সমস্ত ব্যবহারের পরিবর্তে তারা তাদের পদ্ধতিটি ত্রুটিযুক্ত করে made এই যেখানে এটি একটি সমস্যা হয়ে ওঠে।


2

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

http://en.wikipedia.org/wiki/Accidental_complexity


1

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

ফ্যাকাস প্যাটার্নটির অপব্যবহারের ফলে প্রয়োগের স্তরগুলি জুড়ে বিমূর্ততার মাত্রা ঝাপসা হয়ে যায়।


1

এই প্রোগ্রামারটি যা করছে তা কিছু কোড মোড়ানো, যাতে এটি লগিং মডিউলে সরাসরি নির্ভরতা না করে। আরও সুনির্দিষ্ট তথ্য না থাকলে আরও সুনির্দিষ্ট প্যাটার্ন দেওয়া সম্ভব নয়। (এই মোড়কগুলি কার্যকর না হওয়ায় আপনার মতামত যা আরও অনেক তথ্য ছাড়া সম্মত বা একমত হওয়া অসম্ভব))

যে প্যাটার্নগুলির মধ্যে এটি পড়তে পারে সেগুলি হ'ল প্রক্সি , ডেলিগেট , ডেকরেটার , কমপোজিট বা এমন কিছু যা কলকে মোড়ানো, লুকিয়ে রাখা বা বিতরণ করতে হয়। এটি বিকাশের একটি অসম্পূর্ণ পরিস্থিতিতে এমন একটি বিষয় হতে পারে।


0

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


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

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