কনস্ট্রাক্টরদের উপর স্থির অবজেক্ট তৈরির পদ্ধতি থাকার পক্ষে কি কি?
class Foo {
private Foo(object arg) { }
public static Foo Create(object arg) {
if (!ValidateParam(arg)) { return null; }
return new Foo(arg);
}
}
আমি ভাবতে পারি যে খুব কম:
পেশাদাররা:
- ব্যতিক্রম নিক্ষেপের পরিবর্তে নাল ফেরান (নাম দিন
TryCreate)। এটি ক্লায়েন্টের পক্ষে কোডটিকে আরও পরিস্কার করে এবং পরিষ্কার করতে পারে। ক্লায়েন্টরা খুব কমই কোনও নির্মাণকারীকে ব্যর্থ হওয়ার আশা করে। - পরিষ্কার শব্দার্থক, যেমন
CreatFromName(String name)এবং সহ বিভিন্ন ধরণের অবজেক্ট তৈরি করুনCreateFromCsvLine(String csvLine) - প্রয়োজনে কোনও ক্যাশেড অবজেক্ট, বা প্রাপ্ত কোনও বাস্তবায়ন ফিরে আসতে পারে।
কনস:
- কম আবিষ্কারযোগ্য, স্কিম কোড করা আরও কঠিন।
- সিরিয়ালাইজেশন বা প্রতিবিম্বের মতো কিছু নিদর্শন আরও কঠিন (উদাঃ
Activator<Foo>.CreateInstance())
Foo x = Foo.TryCreate(); if (x == null) { ... })। একটি ctor ব্যতিক্রম হ্যান্ডেল করা হয় ( Foo x; try { x = new Foo(); } catch (SomeException e) { ... })। একটি সাধারণ পদ্ধতি কল করার সময়, আমি ত্রুটি কোডগুলিতে ব্যতিক্রম পছন্দ করি তবে অবজেক্ট তৈরির সাথে আরও TryCreateপরিষ্কার মনে হয়।
Nameএবং CsvLineপ্রকারের চেয়ে ভাল হতে পারেন । এটি আপনাকে তৈরি ওভারলোড করার অনুমতি দেবে। উভয়ের জন্য স্ট্রিং ব্যবহার করা "আদিম আবেশ" হিসাবে বিবেচনা করা যেতে পারে (ধরে নেওয়া যে আপনি পরিচিত পারফরম্যান্স কারণে এই পছন্দটি করেন নি)। এটি দেখার জন্য একটি মজাদার উপায়ের জন্য অবজেক্ট ক্যালিস্টেনিকগুলি দেখুন ।