ইন্টারফেসের নামগুলি কি "আই" উপসর্গ দিয়ে শুরু করা উচিত?


73

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

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

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

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

সুতরাং, আমার প্রশ্নটি এটিকে উত্সাহিত করে, "কোডের কিছু অংশ একটি ইন্টারফেসের প্রত্যাশার বিষয়টি আমরা কেন লুকিয়ে রাখব ?"

সম্পাদন করা

উত্তরের জবাবে:

যদি আপনার ধরণটি একটি ইন্টারফেস হয় বা শ্রেণিটি আপনার ব্যবসা হয় তবে আপনার কোড ব্যবহার করা কারও ব্যবসা নয়। সুতরাং এই থ্রিম পার্টি কোডে আপনার কোডের বিশদটি ফাঁস করা উচিত নয়।

প্রদত্ত প্রকারটি ইন্টারফেস বা তৃতীয় পক্ষের কোডের শ্রেণি কিনা সে সম্পর্কে বিশদটি কেন আমি "ফাঁস" করব না? আমার কোডটি ব্যবহার করে তৃতীয় পক্ষের বিকাশকারীরা কি গুরুত্বপূর্ণ নয় যে তারা কোনও ইন্টারফেস বাস্তবায়ন করবে বা শ্রেণি প্রসারিত করবে কিনা তা জানতে? পার্থক্যগুলি কি এতটা গুরুত্বপূর্ণ নয় যতটা আমি তাদের মনে রাখছি?


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

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

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

পুনরায় to know whether they will be implementing an interface or extending a class: হ্যাঁ, তবে আপনার কোডটির বেশিরভাগ ব্যবহারকারীরা এটি কল করবে, এটি বাস্তবায়ন করবে না বা প্রসারিত করবে না এবং এটি আসলে কী তা যত্নশীল হতে পারে না।
ডেভিড.পিএফএফএক্স

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

উত্তর:


66

আপনি যদি এটি নিয়ে ভাবতে বাধা দেন তবে আপনি দেখতে পাবেন যে কোনও ইন্টারফেসটি বিমূর্ত শ্রেণীর চেয়ে শব্দার্থগতভাবে খুব বেশি আলাদা নয়:

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

আসলে, ক্লাস এবং ইন্টারফেসের মধ্যে সবচেয়ে গুরুত্বপূর্ণ পার্থক্যগুলি হ'ল:

  • ইন্টারফেসে ব্যক্তিগত ডেটা থাকতে পারে না;
  • ইন্টারফেস সদস্যদের অ্যাক্সেস মডিফায়ার থাকতে পারে না (সমস্ত সদস্য "পাবলিক");
  • একটি শ্রেণি একাধিক ইন্টারফেস বাস্তবায়িত করতে পারে (সাধারণত কেবলমাত্র একটি বেস শ্রেণীর থেকে উত্তরাধিকারী হতে সক্ষম হওয়ার বিপরীতে)।

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

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

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

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


এই ভাঙ্গনের জন্য আপনাকে ধন্যবাদ। "ক্লাস এবং ইন্টারফেসের মধ্যে অর্থপূর্ণ পার্থক্য ..." এর জন্য +1
চার্লস স্প্রেবেরি

23
"এই সমস্ত কথার জন্য বলা হচ্ছে, আমি যাইহোক যাইহোক আমার সাথে আমার সি # ইন্টারফেসের উপসর্গের প্রবণতা রাখি কারণ এটি মাইক্রোসফ্ট দ্বারা ব্যবহৃত এবং উকিল করা নেট নেট কনভেনশন"। এটি সি # তে আমার পক্ষে যথেষ্ট কারণ। এই সাধারণ মান অনুসরণ করেই সম্ভবত অন্যান্য .NET প্রোগ্রামাররা ইন্টারফেসটি সনাক্ত করে।
রোবোটুশি

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

3
.NET (তবে জাভাতে নয়) এর অন্য একটি পার্থক্য হ'ল অনেক .NET ভাষাগুলি ইন্টারফেসগুলিকে স্ট্যাটিক পদ্ধতি ধারণ করতে দেয় না, তাই Iইন্টারফেসের অফ হ্যাকিং কোনও শ্রেণীর ইন্টারফেসের সাথে সম্পর্কিত স্ট্যাটিক পদ্ধতি রাখার জন্য একটি ভাল নাম দিতে পারে (উদাঃ Enumerable<T>.Emptyবা Comparer<T>.Default)।
সুপারক্যাট

আমার একটা উদ্বেগ আছে সি ++ এ আপনি যদি একটি শিরোনাম খোলেন এবং দেখুন যে class Fooইতিমধ্যে প্রসারিত হয়েছে class Bar, তা অবিলম্বে সুস্পষ্ট হয় না যদি class Barপ্রসারিত বা প্রয়োগ করা হচ্ছে। সুতরাং এখন আপনাকে যেতে হবে এবং প্রসারিত class Barকরতে সংশোধন class Fooকরা ঠিক আছে কিনা তা নির্ধারণ করতে শিরোনামটি দেখতে হবে class Baz। তদুপরি, "উপসর্গটি" যদি একক বেস শ্রেণিটি লঙ্ঘন করা হচ্ছে বা না করা হয় তবে একটি সুস্পষ্ট ভিজ্যুয়াল ক্লু দেয় - সুতরাং আপনি যখনই একটি শিরোনাম খোলেন ততবারই স্যানিটি চেক পাবেন।
jsj

14

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


2
ধারাবাহিকতা> সম্মেলনের জন্য +1। সি # তে আপনি একটি আই দিয়ে উপস্থাপন করবেন এবং জাভাতে আপনি যাবেন না। বিভিন্ন টাস্ক বিভিন্ন কনভেনশনের জন্য ডাকে
ব্রিঞ্জার 128

2
+1 আমি ব্যক্তিগতভাবে আমার ইন্টারফেসগুলিতে নেই তা পছন্দ করি, ছাত্রলীগ এবং তৃতীয় পক্ষের লাইব্রেরিগুলিতে অসঙ্গতিযুক্ত। নেট প্রকল্পগুলি কোনও বিকল্প নয় ho
জে কে।

13

বইটি ভাল স্টাফ দিয়ে পূর্ণ, তবে আমি এখনও ইন্টারফেসের নামটিতে "আমি" যুক্ত করব।

আপনার public interface ILogকোনও ডিফল্ট বাস্তবায়ন রয়েছে তা কল্পনা করুন public class Log

এখন, যদি আপনি সিদ্ধান্ত নেন public interface Log, হঠাৎ করে আপনাকে লগ ক্লাস public class LogDefaultবা সেই লাইনে কিছু পরিবর্তন করতে হবে। আপনি একটি অতিরিক্ত চরিত্র থেকে সাত পর্যন্ত চলে গেছেন - অবশ্যই এটি অপব্যয়।

তত্ত্ব এবং অনুশীলনের মধ্যে প্রায়শই সূক্ষ্ম লাইন থাকে। তত্ত্বগতভাবে এটি সত্যিই ভাল ধারণা, তবে বাস্তবে এটি এতটা ভাল নয়।



30
"কল্পনা করুন আপনার ডিফল্ট প্রয়োগকারী পাবলিক ক্লাস লগ সহ পাবলিক ইন্টারফেস আইলগ রয়েছে।" - তারপরে আপনার ডিফল্ট প্রয়োগের জন্য আপনার কাছে একটি খারাপ নাম। কি করে Log? কনসোলে লগইন করবেন? সিসলগ করতে? কোথাও নেই? ঐ নামক করা উচিত ConsoleLog, SyslogLogএবং NullLogযথাক্রমে। Logকংক্রিট শ্রেণীর পক্ষে ভাল নাম নয়, কারণ এটি কোনও কংক্রিটের নাম নয়।
সেবাস্তিয়ান রেডল

7
ব্যক্তিগতভাবে এটি হ'ল ITheClassName দেখে আমি ঘৃণা করি, আপনি কি অকারণে একটি ইন্টারফেস তৈরি করছেন, এটি কি ক্লাসনামের শীর্ষে কেবল শব্দ হচ্ছে? যদি আপনার ইন্টারফেসের একটি উদ্দেশ্য থাকে তবে এটি আইটিএক্লাসনামের চেয়ে আরও ভাল নাম দেওয়া সম্ভব হবে
রিচার্ড টিংল

শ্রেণীর নাম একবার ব্যবহার করা হয় (তাত্ক্ষণিকভাবে), ইন্টারফেসের নাম সর্বত্র ব্যবহৃত হয়। শ্রেণীর নামে চিঠি সংরক্ষণের জন্য ইন্টারফেসে একটি চিঠি যুক্ত করা মিথ্যা অর্থনীতি (চরিত্রগুলির) is
সার্জুট

@ রিচার্ডটিঙ্গল তবে আমি মনে করি সেখানে সাধারণ ব্যবহারটি এতটা সহজ যে এর MyClassফলে একটি বিদ্রূপযোগ্য পরিবর্তন রয়েছে, তাই না? এটি হ'ল, আমরা প্রায়শই প্রয়োজনীয়ভাবে জনসাধারণের পদ্ধতিগুলি এমন একটি ফ্যাশনে সত্যই সর্বজনীন করতে ইন্টারফেস ব্যবহার করি যা পরীক্ষার অনুমতি দেয়। (বলার অপেক্ষা রাখে না যে ভাল বা খারাপ, কিন্তু বুঝতে প্রায়ই হয় যে ইন্টারফেসের জন্য প্রেরণা কেবল ক্লাস নির্ভরতা সহজে mockable 1 টু 1 ব্যাখ্যা নেই হয় করতে MyClassকরতে IMyClassম্যাপিং।)
Ruffin

8

ভাল এটি ইন্টারফেস বাস্তবায়ন বা কোনও শ্রেণি প্রসারিত করার বিষয়ে নয়। এই ক্ষেত্রে, আপনি যেভাবেই করছেন তা আপনি জানেন।

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

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

যদি আপনার ধরণটি একটি ইন্টারফেস হয় বা শ্রেণিটি আপনার ব্যবসা হয় তবে আপনার কোড ব্যবহার করা কারও ব্যবসা নয়। সুতরাং আপনার এই তৃতীয় পক্ষের কোডটিতে আপনার কোডের বিশদটি ফাঁস করা উচিত নয়।

যাইহোক, ইন্টারফেস এবং ক্লাসগুলি শেষে রেফারেন্স ধরণ। এবং এটিই গুরুত্বপূর্ণ। সুতরাং এটি আপনার নামকরণের সম্মেলনে জোর দিতে হবে।


@ ম্যাট> হ্যাঁ, এটি আমার একটি ভুল ছিল এবং আমি এটি সম্পাদনা করেছি।
ডেডালনিক্স

5

বেশিরভাগ উত্তর ধরে মনে হয় যে প্রোগ্রামিং ভাষাটি জাভা বা সি # হয় যেখানে ইন্টারফেস / বিমূর্ত শ্রেণির জন্য একটি ধারণা (বা কীওয়ার্ড) রয়েছে। এই ক্ষেত্রে, একটি শালীন আইডিইতে, এটি তত্ক্ষণাত দৃশ্যমান হয় যে কোন ধরণের শ্রেণীর সাথে লেনদেন হয় এবং লেখার public interface IMyClassঅপ্রয়োজনীয় নকল হয়। এটি এমন যে আপনি লিখবেন না public final FinalMyClass- প্রতিটি কীওয়ার্ডকে ক্লাসের নামে রাখার কল্পনা করুন।

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

সুতরাং আমার উত্তরটি হবে: এটি প্রোগ্রামিং ভাষার উপর নির্ভর করে।

২০১ 2016 আপডেট হয়েছে: সি ++ এর 2 বছরের অভিজ্ঞতার পরে আমি সম্ভবত ক্লাসের নামগুলির সাথে উপসর্গ করা খারাপ অভ্যাসটিকে বিবেচনা Abstractকরব, যদিও আমি বলব সম্ভবত কোড বেস রয়েছে যা এত জটিল যে এটি বোধগম্য হতে পারে।


আপনি কি নিশ্চিত যে এটি প্রশ্নের উত্তর দিয়েছে? আপনি অন্যান্য উত্তরগুলি পড়তে এবং আপনার কয়েকটি বিষয় পরিষ্কার করতে পছন্দ করতে পারেন।
ডেভিড.পিএফএফএক্স

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

@ ডেভিড.পিএফএক্স: আমার মনে হয় "আমি" উপসর্গ দিয়ে ইন্টারফেসের নামগুলি শুরু করা উচিত? ": এটি প্রোগ্রামিং ভাষার উপর নির্ভর করে। আপনি যদি ভাবেন যে আমার বিবরণ যথেষ্ট পরিষ্কার নয় তবে আমি এটির উন্নতি করতে পেরে খুশি - কোন অংশগুলি আপনার পক্ষে পরিষ্কার নয়?
Ela782

2
@ জনগৌগান: অবশ্যই এর ইন্টারফেস রয়েছে! তবে আমার পুরো বিষয়টিটি মূল শব্দটি সম্পর্কে about সি ++ এক থাকে না, তাই এটা না আইডিই / ব্যবহারকারী কাছে দৃশ্যমান যদি তিনি / সে একটি ইন্টারফেস বা না নিয়ে কাজ করে। জাভাতে, এটি অবিলম্বে দৃশ্যমান।
Ela782

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

4

আপনি যে ভাষাটি ব্যবহার করছেন তার প্রতিমাগুলি অনুসরণ করুন।

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


+1 আপনি যে ভাষাটি ব্যবহার করছেন তার প্রতিমাগুলি অনুসরণ করুন। স্পষ্টতই বইয়ের লেখক জাভা বিকাশকারী। .NET / C #: ILog Java: লগ তবে অসুবিধা: আমার যখন লগ ক্লাস থাকে যা আইলোগ ইন্টারফেসটি কার্যকর করে .... মাইলগ, লগডেফল্ট, লগবেস, ...? কুরুচি, তাই না? আরও কুরুচিপূর্ণ: লগইম্প্প ....: ডি
এইচআরএমবাইল

0

আমার (জাভা) কোডে, আমি কলকারীদের কাছে প্রকাশিত এপিআইগুলিতে এই কনভেনশন রাখার প্রবণতা রয়েছে:

  • কার্যকারিতা ইন্টারফেসের মাধ্যমে সরবরাহ করা হয়, এবং ক্লাস দ্বারা কখনও হয় না
  • অ-কার্যক্ষম অংশগুলি ক্লাস হয়।

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

নামকরণের সম্মেলনের ক্ষেত্রে, ইন্টারফেসগুলি অভিনেতা বিশেষ্য (যেমন, FooBarWatcher) বা বিশেষণ (উদাহরণস্বরূপ FooBarWatchable) এবং উভয় খাঁটি ডেটা ক্লাস এবং গণনা অ-অ্যাক্টিভ বিশেষ্যগুলিতে (যেমন, FooBarStatus) ম্যাপ করে ; আইডিই বিশেষ নামকরণের সম্মেলন ছাড়াই এপিআই গ্রাহককে গাইড করতে পারে। ব্যতিক্রমসমূহ স্বাভাবিক জাভা নিয়মাবলী (অনুসরণ FooBarException, FooBarError, FooBarFaultঅবশ্যই)।

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


আমি Iইন্টারফেসে উপসর্গগুলি কখনও রাখি না । এর অবশ্যই এটি একটি ইন্টারফেস আছে! এটি একটি এপিআইতে (বা এসপিআই)!
ডোনাল ফেলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.