কোনও সত্তার সুপরিচিত ব্যবসায়ের আইডি ডিডিডি / ওওপিতে উত্সর্গীকৃত প্রকারের সাথে উপস্থাপন করা উচিত?


9

ব্যবহারিক ভাষায় এর অর্থ classএকটি stringবা অন্য কোনও আদিম ধরণের উপর একটি কাস্টম (অপরিবর্তনীয়) ব্যবহার করা ।

উদাহরণ:

  1. প্রকাশনা: আন্তর্জাতিক স্ট্যান্ডার্ড বইয়ের নম্বর।
  2. অর্থ: আন্তর্জাতিক সিকিউরিটিজ সনাক্তকরণ নম্বর।

সুবিধাদি:

  1. একটি সনাক্তকারী এর ফর্ম্যাট নিশ্চিত করতে পারেন।
  2. মডেলটির প্রথম শ্রেণির সদস্য হন।

অসুবিধা:

  1. অধ্যবসায়ের ঘর্ষণ যুক্ত করে (যেমন সত্তা ফ্রেমওয়ার্ক)।
  2. আরও কোড।

আপনি একটি কাস্টম ক্লাস ব্যবহার করা উচিত? অবশ্যই। আপনি তাদের আইডি হিসাবে ব্যবহার করা উচিত? একেবারে নয় :) ব্যবসায়ের অর্থ সহ একটি আইডি পথে ঝামেলা সৃষ্টি করে।
সানগো

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

1
আমার একটি পুরানো প্রশ্ন এই বিষয়ে বিভিন্ন মতামত নিয়ে স্পর্শ করেছে: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জার / প্রশ্নস / ২৮১18২27/২ আমি প্রকারগুলি তৈরি করে চলেছি এবং এখনও চালিয়ে যাচ্ছি।
জিভ

উত্তর:


6

আপনি যদি স্ট্রিং না হওয়ার অতিরিক্ত জটিলতাটি ন্যায়সঙ্গত করতে ক্লাসকে যথেষ্ট কার্যকর কার্যকারিতা দিতে পারেন, তবে এটি করুন। আইএসবিএন এবং আইএসআইএন এর মতো সনাক্তকারীদের জন্য, আমি সন্দেহ করি যে এটি ঘটেনি।

শনাক্তকারী শ্রেণিটি কার্যকর হওয়ার জন্য, আমি এটির মতো কিছু দেখতে প্রত্যাশা করব:

class ISIN {
    fromCUSIP()
    fromRawISINString()
    toString(ISIN::FormatType)
    getExchange()
    getCountryCode()
    getLastFourDigits()
    getWhateverCode()
    ...
}

পরিবর্তে যদি এটি আরও দেখতে লাগে:

class ISIN {
    getString()
    setString()
}

তারপরে আমি ক্লাসটি পুরোপুরি খনন করতাম, সর্বত্র নিয়মিত স্ট্রিং ব্যবহার করতাম এবং নিশ্চিত করতাম যে আমি সমস্ত প্রাসঙ্গিক ভেরিয়েবল নামগুলিতে ধারাবাহিকভাবে "আইসিন" ব্যবহার করি।

মনে রাখবেন যে কয়েকটি ভাষায়, নতুন প্রোগ্রাম যুক্ত করার ক্ষেত্রে সাধারণ প্রোগ্রামগুলিতে প্রায় কোনও "যুক্ত জটিলতা" নেই, এক্ষেত্রে আপনাকে কোনও নতুন কার্যকারিতা না থাকলেও নতুন প্রকারটি তৈরি করতে উত্সাহিত করা হবে। তবে সি ++ এর মতো বেশিরভাগ Oতিহ্যবাহী ওওপি ভাষার ক্ষেত্রে এটি হয় না।


6

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

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

book.setAuthor(otherBook.getAuthorName());
book.setIsbn(otherBook.getAuthorName());
book.setPrice(otherBook.getPrice())

আইএসবিএন যদি আদিম ধরণের পরিবর্তে শ্রেণি হয় তবে উপরের কোডটিও সংকলিত হবে না, পরে অনেকগুলি ডিবাগিং সময় সাশ্রয় করবে।


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