কয়েকটি পৃথক লাইব্রেরি ব্যবহার করার সময় শৈলীর কোডিং


9

আমি এমন কিছু সি ++ কোড নিয়ে কাজ করছি যা কয়েকটি সি লাইব্রেরি সহ বেশ কয়েকটি গ্রন্থাগার ব্যবহার করে যা সবার কোডিংয়ের বিভিন্ন স্টাইল রয়েছে। এটি একবার ব্যবহারযোগ্য পর্যায়ে পৌঁছে গেলে এটি উন্মুক্ত হয়ে যাবে। কোন বাগ সংশোধন করতে বা একটি বৈশিষ্ট্য যুক্ত করার জন্য কোডটি যাচাই করে এমন স্বল্প-মেয়াদী অবদানকারীদের পক্ষে কমপক্ষে বিভ্রান্তি ঘটবে?

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

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


4
আপনার নিজস্ব কাস্টম বিমূর্ততায় সমস্ত গ্রন্থাগারকে মুড়ে ফেলে কি এই সমস্যাটি এড়ানো সম্ভব হবে? আপনার নিজের কোড এবং বিমূর্ততাগুলি তখন একটি একক কোডিং শৈলী অনুসরণ করতে পারে।
মেটাফাইট

আমি যা করছি তা অনেকগুলি সেই লাইব্রেরিগুলিকে বিমূর্ত করা। প্রশ্নটি কী বিমূর্তির অভ্যন্তরে কোডিং শৈলীটি ব্যবহার করা উচিত।
কার্ল বিলেফেল্ট

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

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

1
"কোডিং স্টাইল" বলতে আসলে কী বোঝায় - সাধারণ জিনিস যেমন_উন্ডসরস / উটকেস / পাসকেলকেস এবং ব্রেস অবস্থান, বা শ্রেণি / পদ্ধতি / ফাংশন বিন্যাস এবং আবশ্যকীয় / কার্যকরী শৈলীর মতো আরও জটিল জিনিস?
ইজকাটা

উত্তর:


10

আমি মনে করি এটি সামগ্রিক প্রকল্পটি কতটা বড় হবে তার উপর নির্ভর করে kind

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

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

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

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


এমন কিছু বিদেশি যা আমার যুক্তিটি উপর থেকে বদলে দিতে পারে:

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

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

  • কখনও কখনও স্টাইলটি ভাষাতে যুক্ত হওয়া নতুন কার্যকারিতার উপর ভিত্তি করে স্থানান্তরিত হয়। সি ++ বছরের পর বছর ধরে বেশ কয়েকটি বৈশিষ্ট্য তুলে ধরেছে। পুরানো শৈলীর প্রয়োজন অনুসারে নতুন স্টাইলে প্রয়োজনীয় বৈশিষ্ট্যগুলি ব্যবহার করে যা রিফ্যাক্টরটি বোঝাতে পারে।

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


কিছু মন্তব্যে বিবেচনা হিসাবে উল্লেখযোগ্য এবং অবজেক্ট-ভিত্তিক শৈলীর উল্লেখ করা হয়েছে।

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

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

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


এটি রাখা ভাল উপায়। অনুরূপ প্রকল্পগুলি প্রায় 300 কেএলকি।
কার্ল বিলেফেল্ট

3

মনে করার মতো একাধিক স্তর রয়েছে এমন শোনার জন্য:

  1. বিদ্যমান লাইব্রেরি এবং এগুলিতে কোনও পরিবর্তন।
  2. এই লাইব্রেরির জন্য নতুন ইউনিট পরীক্ষার কোড।
  3. বিমূর্ত স্তর
  4. বিমূর্ত স্তর দ্বারা উপস্থাপিত এপিআই।
  5. বিমূর্ত স্তরটি ব্যবহার করে উদাহরণ এবং পরীক্ষার কোড।

আমি ধরে নিতে চলেছি যে সামনে কেবল একটি সাধারণ শৈলীতে সমস্ত কোডের রিফ্যাক্টর করার কোনও অর্থ নেই - এটি যদি আপনি প্রশ্ন না করতেন।

প্রতিটি ঘুরে ঘুরে:

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

আমি ব্যক্তিগতভাবে কিছু জিনিস খুঁজে পেয়েছি তা হ'ল একটি বৃহত লিগ্যাসি কোড বেস সহ:

  • একটি পছন্দসই স্টাইল সেট করা এবং কোড পরিবর্তনগুলির জন্য প্রয়োগ করার ফলে এটি পুরানো কোডগুলিকে নতুন স্টাইলে স্থানান্তরিত করার জাদুকরী ফল দেয় না।

  • বেশিরভাগ প্রকৌশলী প্রদত্ত লাইব্রেরিতে বিদ্যমান শৈলীতে কোড (কম বা কম) করতে চান। অন্যথায় প্রয়োজনে প্রয়োগ করা অনেক কার্যকর হয়।

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

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


0

আপনি প্রচুর তৃতীয় পক্ষের মডিউল নিয়ে একটি বড় আকারের প্রকল্প বিকাশ করছেন এমন ক্ষেত্রে আমি @ মেটাফাইটের সাথে একমত হব।

আসল শব্দের সমস্যা নিয়ে আপনার সমস্যাটিকে ম্যাপ করা যাক: " ধরুন আপনার ঘরে শান্ত জীবনযাপন রয়েছে You আপনি নিজের জায়গাটি শান্ত হওয়া পছন্দ করেন, আপনি কখনও উচ্চস্বরে কথা বলেন না এবং কখনও আপনার পরিবারের কোনও সদস্যকে এটি করতে পছন্দ করেন না But তবে আপনি প্রচুর সাথে যোগাযোগ করেন আপনার বাড়ির জন্য কিছু আনার জন্য প্রতিদিনের বাইরের বিভিন্ন লোক। অগত্যা তারাও নিম্ন কণ্ঠে কথা বলবেন, সেক্ষেত্রে আপনি এই জাতীয় লোকের সাথে কথা বলার সময় সেই অনুযায়ী নিজেকে moldালাই করুন এইভাবে এই লোকের জন্য ইন্টারফেস বা মোড়ক কেবল স্বার্থের জন্য অত্যন্ত নমনীয় is আপনার কাজ শেষ হতে হবে। "বোবা উদাহরণ ... হ্যাঁ

তবে আমার বক্তব্যটি হ'ল এ জাতীয় লাইব্রেরির কোডিং মান অনুসারে এমনভাবে লাইব্রেরি তৈরি করা যাতে আপনি নিজের রেকর্ডিংয়ের মাধ্যমে এই লাইব্রেরিগুলি আপনার মূল কোডিংয়ের অভ্যন্তরে রক্ষণাবেক্ষণ করেন।

মেটাফাইটের জন্য +1।


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

1
কেন এটাকে বঞ্চিত করা হচ্ছে? আমি স্পষ্টভাবে মনে করি এটির সেরা সমাধান :)
মেটাফাইট

0

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

কোনও লাইব্রেরিতে অভ্যন্তরীণভাবে ব্যবহৃত কোড শৈলীর জন্য, আমি এটি প্রাসঙ্গিক বলে মনে করি না। লাইব্রেরি যদি খুব জরুরী হয় তবে চারপাশে একটি OO র‌্যাপার লেখা ভাল তবে আপনার প্রয়োজন হয় না যে আপনি লাইব্রেরির উদাহরণ বা ইন্টার্নালগুলির মতো একই কোড শৈলীটি ব্যবহার করুন।

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