FindById এর সুবিধা () ।
ভবিষ্যত-প্রুফিং : আপনার সাথে শুরু করেন Find(int)
, এবং পরে অন্যান্য পদ্ধতি (যোগ আছে FindByName(string)
, FindByLegacyId(int)
, FindByCustomerId(int)
, FindByOrderId(int)
, ইত্যাদি), আমার মত মানুষের বয়সের ব্যয় খুঁজছেন ঝোঁক FindById(int)
। সত্যিই নেই একটি সমস্যা যদি আপনি যা করতে পারেন এবং পরিবর্তন করতে হবে Find(int)
করতে FindById(int)
একবার এটা প্রয়োজনীয় হয়ে - ভবিষ্যত প্রুফিং এই সম্পর্কে যদি সে।
পড়া সহজ । Find
পুরোপুরি জরিমানা যদি মত কল দেখায় record = Find(customerId);
তবুও FindById
পড়া যদি এটা জন্য সামান্য সহজ হয় record = FindById(AFunction());
।
ধারাবাহিকতা । আপনি ধারাবাহিকভাবে সর্বত্র সর্বত্র FindByX(int)
/ FindByY(int)
প্যাটার্ন প্রয়োগ করতে পারেন , তবে Find(int X)
/ Find(int Y)
সম্ভব নয় কারণ এগুলির মধ্যে বিরোধ রয়েছে।
সন্ধানের সুবিধা ()
- চুমু খেতে হবে।
Find
সহজ এবং সোজা, এবং পাশাপাশি operator[]
এই প্রসঙ্গে 2 সবচেয়ে প্রত্যাশিত ফাংশন নামগুলির মধ্যে একটি। (কিছু জনপ্রিয় বিকল্প হচ্ছে get
, lookup
অথবা fetch
, প্রসঙ্গ উপর নির্ভর করে)।
- থাম্বের নিয়ম হিসাবে, যদি আপনার কোনও ফাংশনের নাম থাকে যা একটি একক সুপরিচিত শব্দ যা ফাংশনটি কী করে তা সঠিকভাবে বর্ণনা করে, এটি ব্যবহার করুন। এমনকি যদি দীর্ঘতর বহু-শব্দের নাম থাকে যা ফাংশনটি কী করে তা বর্ণনা করার ক্ষেত্রে কিছুটা ভাল। উদাহরণ: দৈর্ঘ্য বনাম সংখ্যাআফিলিমেটস । একটি ট্রেডঅফ রয়েছে এবং কোথায় লাইনটি আঁকবেন তা চলমান বিতর্কের বিষয়।
- অপ্রয়োজনীয়তা এড়ানো সাধারণত ভাল। যদি আমরা দেখি
FindById(int id)
, আমরা সহজেই এটিকে পরিবর্তন করে অতিরিক্ত জালিয়াতি অপসারণ করতে পারি Find(int id)
, তবে একটি বাণিজ্য বন্ধ রয়েছে - আমরা কিছুটা স্পষ্টতা হারাতে পারি।
বিকল্পভাবে আপনি দৃ strongly়ভাবে টাইপ করা আইডি ব্যবহার করে উভয়ের সুবিধা পেতে পারেন :
CustomerRecord Find(Id<Customer> id)
// Or, depending on local coding standards
CustomerRecord Find(CustomerId id)
এর বাস্তবায়ন Id<>
: সি # তে শক্তভাবে টাইপ করা আইডি মানগুলি
এখানে মন্তব্যগুলি, পাশাপাশি উপরের লিঙ্কে, Id<Customer>
আমি যে সম্বোধন করতে চাই সে সম্পর্কে একাধিক উদ্বেগ উত্থাপন করেছে :
- উদ্বেগ 1: এটি জেনেরিকগুলির অপব্যবহার।
CustomerId
এবং OrderID
বিভিন্ন ধরণের ( customerId1 = customerId2;
=> ভাল, customerId1 = orderId1;
=> খারাপ), তবে তাদের বাস্তবায়ন প্রায় অভিন্ন, তাই আমরা সেগুলি কপির পেস্ট বা রূপান্তরকৃত দ্বারা প্রয়োগ করতে পারি। জেনেরিকটি প্রকাশ বা লুকিয়ে রাখার বিষয়ে আলোচনার মূল্য রয়েছে, তবে জেনেরিকগুলি কী রূপান্তরকৃত তা রূপান্তরকেন্দ্রিক।
- উদ্বেগ 2: এটা সহজ mistakes./It's একটি সমস্যা সন্ধানে একটি সমাধান থামবে না প্রধান সমস্যাটি যে ব্যবহার শক্তিশালী ভাবে টাইপ Id গুলি একটি কল ভুল যুক্তি অর্ডার দ্বারা সরানো হচ্ছে
DoSomething(int customerId, int orderId, int productId)
। দৃ OP়ভাবে টাইপ করা আইডি অন্যান্য ওপি সম্পর্কে জিজ্ঞাসা করা সহ অন্যান্য সমস্যাগুলিও প্রতিরোধ করে।
- উদ্বেগ 3: এটি সত্যিই কেবল কোডটিকে অস্পষ্ট করে। কোনও আইডি রাখা হয়েছে কিনা তা বলা শক্ত
int aVariable
। এটি সহজেই বলা যায় যে কোনও আইডি রাখা আছে Id<Customer> aVariable
এবং আমরা এমনকি এটি বলতে পারি যে এটি একটি গ্রাহক আইডি।
- উদ্বেগ 4: এই আইডিগুলি কোনও শক্ত ধরণের নয়, কেবল মোড়কে।
String
চারদিকে কেবল একটি মোড়ক byte[]
। মোড়ানো, বা এনক্যাপসুলেশন, শক্তিশালী টাইপিংয়ের সাথে বিরোধ নয়।
- উদ্বেগ 5: এটি ওভার ইঞ্জিনিয়ারড। এখানে সংক্ষিপ্ত সংস্করণটি দেওয়া হল, যদিও আমি যুক্ত করার প্রস্তাব দিই
operator==
এবং operator!=
পাশাপাশি, আপনি যদি একচেটিয়াভাবে নির্ভর করতে না চান তবে Equals
:
।
public struct Id<T>: {
private readonly int _value ;
public Id(int value) { _value = value; }
public static explicit operator int(Id<T> id) { return id._value; }
}
T Find<T>(string name)
বা আপনি(int size)
কীভাবে অনিবার্য সমস্যাগুলি সমাধান করার পরিকল্পনা করবেন?