পদ্ধতির মতো কারখানার নাম কীভাবে রাখবেন?


145

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

createURI(...) 
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)

আপনি কোনটি সাধারণভাবে বেছে নেবেন এবং কেন?


4
আমি একবার এই প্রকল্পে কাজ করেছি যে কারখানার পদ্ধতিগুলি "get ()" এর নাম দেয়। প্রথমে খুব বিভ্রান্তিকর।
মাক্সেকয়েড

4
এবং শেষ বিকল্প, কোন উপসর্গ সম্পর্কে? যেহেতু আমরা প্রায় সবসময় স্থিতিশীল প্রসঙ্গে কারখানাগুলি ব্যবহার করি তাই এটি পরিষ্কার হওয়া উচিত নয়? কিছু আলোচনা উত্সাহিত করতে বলছি - আমার ব্যক্তিগত পছন্দ createXyz()
ভাইকিংস্টিভ

@ ভাইকিংস্টেভ যে সিস্টেমটি আমি তৈরি করেছি তাতে আমি createএপিআই ধারাবাহিকতার জন্য উপসর্গটি কনভেনশন হিসাবে বিবেচনা করেছি এবং কেবলমাত্র চিঠিটি টাইপ করলে আইডিইর স্বতঃপূরণে cতাদের সকলের উপস্থিতি দেখা দেবে, যা এটি আরও সহজ করে তুলবে কেউ কি উপলব্ধ তা জানতে চেষ্টা করছে for আমার কাছে তা থাকত পারে থাকেন Matrix4f.identity(), Matrix4f.transpose()ইত্যাদি কিন্তু তারা যেমন এটি দ্রুততর হতে চাই Matrix4f.createIdentity()এবং Matrix4f.createTranspose(...)ইত্যাদি,
code_dredd

উত্তর:


117

কিছু এলোমেলো চিন্তা:

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

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

  • 'কনস্ট্রাক্ট' নিকটবর্তী, তবে এটি সাধারণত কোনও অবজেক্ট তৈরির প্রক্রিয়াটিতে একটি নির্দিষ্ট পর্যায়ে বর্ণনা করতে ব্যবহৃত হয় (বরাদ্দ / নতুন, নির্মাণ, আরম্ভ ...)

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

  • আমাকে 'জেনারেট' বলতে এমন একটি গণনা বোঝায় যা একটি ইনপুট থেকে একটি মান উত্পাদন করতে ব্যবহৃত হয় যেমন একটি হ্যাশ কোড বা একটি এলোমেলো সংখ্যা তৈরি করা।

  • 'উত্পাদন', 'জেনারেট', 'কনস্ট্রাক্ট' টাইপ / পড়ার জন্য 'তৈরি করুন' এর চেয়ে বেশি দীর্ঘ। /তিহাসিকভাবে প্রোগ্রামাররা টাইপিং / পঠন হ্রাস করার জন্য সংক্ষিপ্ত নামের পক্ষপাতী হয়েছে।


5
"তৈরি করুন" এর জন্য থাম্বস আপ করুন
পিমব্রুওয়ারস

103

"কার্যকর জাভা" -তে জোশুয়া ব্লচ নিম্নলিখিত নামকরণের সম্মেলনের পরামর্শ দেয়

valueOf - আলগাভাবে বলতে গেলে তার পরামিতিগুলির সমান মান রয়েছে এমন একটি উদাহরণ দেয়। এই জাতীয় স্থিতিশীল কারখানাগুলি কার্যকরভাবে টাইপ-রূপান্তর পদ্ধতি।

এর - এর একটি সংক্ষিপ্ত বিকল্প valueOf, জনপ্রিয় EnumSet(আইটেম 32) দ্বারা জনপ্রিয় ।

getInstance - পরামিতিগুলি দ্বারা বর্ণিত একটি দৃষ্টিকোণটি ফেরত দেয় তবে একই মান বলে বলা যায় না। সিঙ্গলটনের ক্ষেত্রে getInstanceকোনও প্যারামিটার নেয় না এবং একমাত্র উদাহরণটি দেয়।

newInstance - এর মতো getInstance, newInstanceগ্যারান্টি ছাড়াই যে প্রতিটি ঘটনা ফিরে এসেছে তা অন্য সকলের থেকে আলাদা।

পেতে প্রকার পছন্দ করবেন - getInstanceকিন্তু সময় ব্যবহৃত কারখানা পদ্ধতি একটি ভিন্ন বর্গ হয়। প্রকারটি কারখানার পদ্ধতি দ্বারা প্রত্যাবর্তিত বস্তুর প্রকার নির্দেশ করে।

নতুন প্রকার - যেমন newInstance, তবে যখন কারখানার পদ্ধতিটি অন্য শ্রেণিতে থাকে তখন ব্যবহৃত হয়। প্রকারটি কারখানার পদ্ধতি দ্বারা প্রত্যাবর্তিত বস্তুর প্রকার নির্দেশ করে।


আপনি কিভাবে রেট করবেন from? উদাহরণস্বরূপ একটি অনুমানমূলক Id.of("abc")বনাম গ্রহণ Id.from("xyz")… বা fromআরও যুক্তিযুক্ত হওয়ার পরামর্শ দিবে (অর্থাত্ ইনপুটটি পার্সিং, অন্য ডেটা থেকে / অনুসন্ধান / পারস্পরিক সম্পর্ক,…)? "বনাম থেকে" এর জন্য অনুসন্ধান করা সত্যিই কঠিন: ডি
নিটল

22

দু'টি পয়েন্ট যুক্ত করতে চেয়েছি যা আমি অন্য উত্তরে দেখি না।

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

  2. পেয়ারা ফ্যাক্টরির নামকরণের ধারণাগুলির একটি ভাল ভাণ্ডার। এটি একটি দুর্দান্ত ডিএসএল স্টাইলকে জনপ্রিয় করছে। উদাহরণ:

    Lists.newArrayListWithCapacity(100);
    ImmutableList.of("Hello", "World");
    

1
আপনি ঠিক বলেছেন, পেয়ারা খুব পঠনযোগ্য কোড সহ একটি দুর্দান্ত গ্রন্থাগার।
ডিমন

11

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

"বিল্ড" এড়ান কারণ এটি বিল্ডার প্যাটার্নের সাথে আরও ভাল ফিট করে এবং "উত্পাদন" এড়ান কারণ এটি প্রযোজক / গ্রাহককে উত্সাহ দেয়।

"ফ্যাক্টরি" নামটির রূপকটি সত্যই অব্যাহত রাখতে, আমি "উত্পাদন" দ্বারা প্রলুব্ধ হব, তবে এটি একটি শব্দ দীর্ঘ long


3

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


3

আমি নতুন পছন্দ করি আমার কাছে

var foo = newFoo();

চেয়ে ভাল পড়া

var foo = createFoo();

ইংরেজিতে অনুবাদিত আমাদের ফু রয়েছে একটি নতুন ফু বা ফু তৈরি করা ফু। যদিও আমি ব্যাকরণ বিশেষজ্ঞ নই তবে আমি বেশ নিশ্চিত যে পরবর্তীটি ব্যাকরণগতভাবে ভুল।


তারা উভয় কাজ. createFooএকটি ফাংশন। fooনা createFoo, যেমন আপনি বলেছেন। fooএর একটি ফলাফল createFoo()
ক্রিজিসটফ চেলুসনিয়াক

2

আংশিক সম্মেলন, আংশিক শব্দার্থক।

কারখানার পদ্ধতিগুলি (প্রচলিত দ্বারা চিহ্নিত create) উপযুক্ত নির্মাতাদের ডাকতে হবে। যদি আমি দেখি buildURI, আমি ধরে নেব যে এটিতে কিছু গণনা, বা অংশগুলি থেকে সমাবেশ জড়িত ছিল (এবং আমি মনে করি না যে এতে কোনও কারখানার জড়িত রয়েছে) আমি যখন দেখেছি তখন প্রথম জিনিসটি generateURIএকটি নতুন ব্যক্তিগতকৃত ডাউনলোড লিঙ্কের মতো কিছু এলোমেলো করে তোলে। এগুলি সব একই নয়, বিভিন্ন শব্দ বিভিন্ন অর্থ বোঝায়; তবে তাদের বেশিরভাগই প্রচলিত নয়।


1

আমি ফোন করব UriFactory.Create()

কোথায়,

UriFactoryশ্রেণীর ধরণের নাম যা পদ্ধতি (গুলি) সরবরাহ করে যা Uriউদাহরণ তৈরি করে ।

এবং Create()আপনার চশমাগুলিতে যতগুলি বৈচিত্র রয়েছে তার জন্য পদ্ধতিটি ওভারলোড হয়।

public static class UriFactory
{
    //Default Creator
    public static UriType Create() 
    {
    }

    //An overload for Create()
    public static UriType Create(someArgs) 
    {
    }
}

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

2
@ লিভিয়াথলন এটি সর্বদা প্রোগ্রামিং ভাষা এবং অভ্যন্তরীণ সম্মেলনের উপর নির্ভর করে। পাস্কেল কেস সি # এর মতো ল্যাঙ্গোজের জন্য পুরোপুরি ঠিক।
মোমো

@ মোমো হুবহু, আমার মনে হয় জাভা হ'ল আমি যে ভাষার কথা বলছি সে সম্পর্কে আমার ধারণা ছিল।
চ্যাটটাটা

0

আমি উল্লেখ করেছিলাম যে আমি সমস্ত ক্রিয়াটি দেখেছি কিন্তু কিছু গ্রন্থাগার বা অন্য ব্যবহারে উত্পাদন করেছি, তাই আমি সৃষ্টিটিকে সার্বজনীন সম্মেলন বলে ডাকব না।

এখন, তৈরি করা আমার কাছে আরও ভাল লাগছে, ক্রিয়াটির সুনির্দিষ্ট অর্থকে বোঝায়।

হ্যাঁ, এটি (সাহিত্যিক) স্বাদের বিষয়।


0

ব্যক্তিগতভাবে আমি পছন্দ করি instantiateএবং instantiateWithএটি কেবল আমার ityক্য এবং উদ্দেশ্য সি অভিজ্ঞতার কারণে। ইউনিটি ইঞ্জিনের মধ্যে নামকরণের কনভেনশনগুলি instantiateকারখানা পদ্ধতির মাধ্যমে উদাহরণ তৈরি করতে শব্দের চারদিকে ঘোরে বলে মনে হয় এবং অবজেক্টিভ সি withপরামিতিগুলি কী তা বোঝাতে পছন্দ করে। এটি কেবল সত্যই কার্যকর হয় যদি পদ্ধতিটি ক্লাসে থাকে যা তাত্ক্ষণিকভাবে চালু হতে চলেছে (এবং যে ভাষাগুলিতে কনস্ট্রাক্টরকে বেশি বোঝা দেওয়া যায়, এটি 'জিনিস' তেমন কিছু না)।

সাদামাটা পুরানো উদ্দেশ্য initWithসিও একটি উত্তম!


-3

কারখানার পদ্ধতি পদ্ধতির নাম নির্দেশ করে না। আপনার কারখানায় আপনি যতগুলি পন্থা চান তা পেতে পারেন, তবে শর্ত থাকে যে সেগুলি সমস্ত একই জিনিস থেকে ফেরত দেয়।

আরও তথ্যের জন্য, ইউআরএল http://xeon2k.wordpress.com দেখুন


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