টিএল; ডিআর - পরিমাপের একটি ইউনিটের মধ্যে ইউনিটগুলি সংজ্ঞায়িত করার জন্য আমি একটি সর্বোত্তম ডেটা স্ট্রাকচার ডিজাইন করার চেষ্টা করছি।
এ Unit of measure
মূলত একটি value
(বা পরিমাণ) এর সাথে যুক্ত unit
। এসআই ইউনিটগুলির সাতটি বেস বা মাত্রা রয়েছে। যথা: দৈর্ঘ্য, ভর, সময়, বৈদ্যুতিক বর্তমান, তাপমাত্রা, পদার্থের পরিমাণ (মোলস) এবং আলোকিত তীব্রতা।
এটি যথেষ্ট সহজবোধ্য হবে, তবে প্রচুর পরিমাণে উত্পন্ন ইউনিট রয়েছে পাশাপাশি হারগুলিও আমরা প্রায়শই ব্যবহার করি। একটি উদাহরণ সম্মিলিত ইউনিট হবে নিউটন: kg * m / s^2
এবং উদাহরণের হার হবে tons / hr
।
আমাদের একটি অ্যাপ্লিকেশন রয়েছে যা অন্তর্ভুক্ত ইউনিটগুলির উপর খুব বেশি নির্ভর করে। আমরা ইউনিটগুলি ভেরিয়েবল বা কলাম নামের মধ্যে এম্বেড করব। যখন আমাদের বিভিন্ন ইউনিটের সাথে পরিমাপের একটি ইউনিট নির্দিষ্ট করতে হবে তখন এটি সমস্যা তৈরি করে। হ্যাঁ, আমরা ইনপুট এবং প্রদর্শনে মানগুলি রূপান্তর করতে পারি তবে এটি প্রচুর ওভারহেড কোড জেনারেট করে যা আমরা তার নিজস্ব বর্গের মধ্যেই encapsulate করতে চাই।
কোডেপ্লেক্স এবং অন্যান্য সহযোগী পরিবেশে বেশ কয়েকটি সমাধান রয়েছে। প্রকল্পগুলির লাইসেন্সিং সম্মত হলেও প্রকল্পটি সাধারণত নিজেই খুব স্বল্প ও ভারী হয়ে ওঠে। আমরা আমাদের নিজস্ব ইউনিকর্নের পিছনে তাড়া করছি "ঠিক ঠিক"।
আদর্শভাবে, আমি এই জাতীয় কিছু ব্যবহার করে পরিমাপের একটি নতুন ইউনিট সংজ্ঞায়িত করতে পারি:
UOM myUom1 = নতুন ইউওএম (10, ভোল্ট);
ইউওএম মাইউম 2 = নতুন ইউওএম (43.2, নিউটন);
অবশ্যই, আমরা আমাদের ক্লায়েন্টদের প্রয়োজনের ভিত্তিতে ইম্পেরিয়াল এবং এসআই ইউনিটগুলির মিশ্রণটি ব্যবহার করি।
আমাদের ইউনিটগুলির এই কাঠামোটি ভবিষ্যতের ডেটাবেস টেবিলের সাথে সুসংগত রাখতে হবে যাতে আমরা আমাদের ডেটাতেও একই ডিগ্রি ধারাবাহিকতা সরবরাহ করতে পারি।
আমাদের পরিমাপের ক্লাসের ইউনিট তৈরি করতে আমাদের প্রয়োজনীয় ইউনিটগুলি, উত্পন্ন ইউনিটগুলি এবং হারগুলি সংজ্ঞায়নের সর্বোত্তম উপায় কী? আমি এক বা একাধিক এনাম ব্যবহার করতে দেখতে পেলাম তবে এটি অন্যান্য বিকাশকারীদের জন্য হতাশার হতে পারে। একক এনাম ২০০+ এন্ট্রি সহ বিশাল হবে যেখানে একাধিক এনামগুলি এসআই বনাম ইম্পেরিয়াল ইউনিটগুলির উপর ভিত্তি করে বিভ্রান্তিকর হতে পারে এবং ইউনিটের নিজস্ব শ্রেণিবদ্ধকরণের ভিত্তিতে অতিরিক্ত ভাঙ্গন হতে পারে।
এনাম উদাহরণগুলি আমার কিছু উদ্বেগ দেখায়:
myUnits.Volt
myUnits.Newton
myUnits.meterএসআইইউনিট.মিটার ইমম্পুনিট.ফুট
ড্রভডিউনিট. নিউট্রন
ড্রভডিউইনটিএসআই.নিউটন
ড্রাভিডিউনিটআইপি.ফিটএলবিএস
আমাদের ব্যবহৃত ইউনিটগুলির সেটটি বেশ ভাল সংজ্ঞায়িত এবং এটি একটি সীমাবদ্ধ স্থান। আমাদের যখন ক্লায়েন্টের চাহিদা থাকে তখন নতুন উত্পন্ন ইউনিট বা রেটগুলি প্রসারিত এবং যুক্ত করার সক্ষমতা আমাদের দরকার হয়। প্রকল্পটি সি # তে রয়েছে যদিও আমি মনে করি বিস্তৃত নকশাগুলি একাধিক ভাষার ক্ষেত্রে প্রযোজ্য।
আমি দেখেছি এমন একটি লাইব্রেরি স্ট্রিংয়ের মাধ্যমে ইউনিটগুলির ফ্রি-ফর্ম ইনপুট দেওয়ার অনুমতি দেয়। তাদের ইউওএম বর্গ তখন স্ট্রিংকে পার্স করে এবং সেই অনুযায়ী জিনিসগুলি স্লটেড করে। এই পদ্ধতির সাথে চ্যালেঞ্জটি হ'ল এটি বিকাশকারীকে সঠিক স্ট্রিং ফর্ম্যাটগুলি কী তা মনে করতে এবং মনে রাখতে বাধ্য করে। এবং আমি একটি রানটাইম ত্রুটি / ব্যতিক্রমের ঝুঁকিটি চালাই যদি আমরা কনস্ট্রাক্টরে স্ট্রিংগুলি পাস করার জন্য কোডের মধ্যে অতিরিক্ত চেক যোগ না করি।
অন্য একটি লাইব্রেরি মূলত অনেকগুলি ক্লাস তৈরি করেছে যা বিকাশকারীদের সাথে কাজ করতে হবে। সমতুল্য ইউওএম সহ এটি সরবরাহ করে একটিDerivedUnit
এবং RateUnit
ইত্যাদি। মূলত, আমরা যে সমস্যার সমাধান করছি সেগুলির জন্য কোডটি অত্যধিক জটিল। এই লাইব্রেরিটি মূলত যে কোনওটিকে অনুমতি দেবে: যে কোনও সংমিশ্রণ (যা ইউনিট বিশ্বে বৈধ) তবে প্রতিটি সম্ভাব্য সংমিশ্রণকে মঞ্জুরি না দিয়ে আমরা আমাদের ইস্যুটি (আমাদের কোডটি সহজীকরণে) স্কোপ করে খুশি।
অন্যান্য গ্রন্থাগারগুলি হাস্যকরভাবে সহজ ছিল এবং উদাহরণস্বরূপ অপারেটরকে ওভারলোডিং বিবেচনা করে নি।
তদতিরিক্ত, আমি ভুল রূপান্তরগুলির প্রচেষ্টা সম্পর্কে উদ্বিগ্ন নই (উদাহরণস্বরূপ: ভোল্ট থেকে মিটার)। দেবগণই কেবলমাত্র এই পর্যায়ে এই স্তরে অ্যাক্সেস করবেন এবং আমাদের এই ধরণের ভুল থেকে রক্ষা করার প্রয়োজন নেই।