এটি ব্যবহারিকভাবে তাকান
Obj 3
এখন জানেন Obj 4
। তাতে কি? আমাদের যত্ন কেন?
ডিআইপি বলে
"উচ্চ-স্তরের মডিউলগুলি নিম্ন-স্তরের মডিউলগুলির উপর নির্ভর করে না Both উভয়েরই বিমূর্ততার উপর নির্ভর করা উচিত" "
ঠিক আছে তবে, সমস্ত বস্তু বিমূর্ত নয়?
ডিআইপিও বলে
"বিমূর্ততা বিশদগুলির উপর নির্ভর করে না Details বিশদ বিমূর্তির উপর নির্ভর করে।"
ঠিক আছে তবে, যদি আমার অবজেক্টটি সঠিকভাবে এনপ্যাপুলেটেড থাকে যা কোনও বিবরণ লুকায় না?
কিছু লোক অন্ধভাবে জোর দিয়ে বলতে চায় যে প্রতিটি বস্তুর একটি কীওয়ার্ড ইন্টারফেস দরকার। আমি তাদের একজন নই। আমি অন্ধভাবে জোর দিয়ে বলতে চাই যে আপনি যদি এখন সেগুলি ব্যবহার না করেন তবে পরে তাদের মতো কিছু প্রয়োজনের সাথে মোকাবিলা করার জন্য আপনার পরিকল্পনা দরকার।
যদি আপনার কোড প্রতিটি রিলিজে সম্পূর্ণরূপে অশোধক-সক্ষম হয় তবে আপনার যদি প্রয়োজন হয় তবে আপনি কেবল ইন্টারফেসগুলি পরে বের করতে পারেন। আপনি যদি এমন কোড প্রকাশ করেন যে আপনি পুনরায় সংকলন করতে চান না এবং নিজেকে ইচ্ছে করেই চান যে আপনি একটি ইন্টারফেসের মাধ্যমে কথা বলছিলেন আপনার একটি পরিকল্পনা দরকার।
Obj 3
জানে Obj 4
বিদ্যমান। কিন্তু কংক্রিট Obj 3
কিনা তা জানেন Obj 4
?
এখানে ঠিক এই কারণেই এটি কোথাও ছড়িয়ে না পারা খুব সুন্দর new
। কংক্রিট Obj 3
কিনা Obj 4
তা যদি জানেন না, সম্ভবত কারণ এটি এটি তৈরি করেনি, তবে আপনি যদি পরে স্নেক করেন এবং Obj 4
একটি বিমূর্ত শ্রেণিতে পরিণত হন তবে সেটির কোনও কারণ Obj 3
হবে না।
আপনি যদি এটি করতে পারেন তবে Obj 4
পুরোপুরি বিমূর্তভাবে সমস্ত বরাবর ছিল। শুরু থেকেই তাদের মধ্যে ইন্টারফেস তৈরির একমাত্র জিনিসটি আপনি নিশ্চিত হন যে কেউ দুর্ঘটনাক্রমে এমন কোনও কোড যুক্ত করবে যা এই Obj 4
মুহূর্তে কংক্রিটের কাছে দেয় । সুরক্ষিত নির্মাণকারীরা সেই ঝুঁকি হ্রাস করতে পারে তবে এটি অন্য প্রশ্নের দিকে নিয়ে যায়:
ওবজ 3 এবং ওবজ 4 একই প্যাকেজে কী?
অবজেক্টগুলি প্রায়শই কোনও উপায়ে গ্রুপযুক্ত করা হয় (প্যাকেজ, নেমস্পেস ইত্যাদি)। দলবদ্ধভাবে যখন গোষ্ঠীভুক্ত হয় তখন গোষ্ঠীগুলির পরিবর্তে একটি দলের মধ্যে আরও সম্ভাব্য প্রভাবগুলি পরিবর্তন করে।
আমি বৈশিষ্ট্য দ্বারা গ্রুপ করতে চান। যদি Obj 3
এবং Obj 4
একই গোষ্ঠী এবং স্তর হয় তবে এটি খুব কমই অসম্ভব যে আপনি একটি প্রকাশ করেছেন এবং কেবলমাত্র অন্য একটিতে পরিবর্তন করার প্রয়োজনে এটি পুনরুদ্ধার করতে চান না। তার মানে এই বিষয়গুলির স্পষ্ট প্রয়োজন হওয়ার আগেই তাদের মধ্যে বিমূর্ততা রাখার দ্বারা উপকৃত হওয়ার সম্ভাবনা কম।
আপনি যদি কোনও গ্রুপের সীমানা অতিক্রম করছেন তবে উভয় পক্ষের অবজেক্টগুলিকে স্বতন্ত্রভাবে পৃথক হতে দেওয়া সত্যিই ভাল ধারণা।
এটি এমন সহজ হওয়া উচিত তবে দুর্ভাগ্যক্রমে জাভা এবং সি # উভয়ই দুর্ভাগ্যজনক পছন্দ করেছে যা এটিকে জটিল করে তোলে।
সি # তে প্রতিটি কীওয়ার্ড ইন্টারফেসের একটি I
উপসর্গের সাথে নাম লেখানোর tradition তিহ্য। এটি ক্লায়েন্টদের জানতে জোর করে তারা কীওয়ার্ড ইন্টারফেসের সাথে কথা বলছে। যে রিফ্যাক্টরিং পরিকল্পনা সঙ্গে গণ্ডগোল।
জাভাতে এটি আরও ভাল নামকরণের প্যাটার্নটি ব্যবহার করার traditionতিহ্য: FooImple implements Foo
তবে জাভা কীওয়ার্ড ইন্টারফেসকে একটি ভিন্ন বাইনারিতে সংকলন করায় এটি কেবল উত্স কোড পর্যায়ে সহায়তা করে। এর অর্থ যখন আপনি যখন Foo
কংক্রিট থেকে বিমূর্ত ক্লায়েন্টগুলিকে একক অক্ষর কোডের প্রয়োজন হয় না তখন তাদের পুনরায় সংকলন করতে হবে clients
এই বিশেষ ভাষাগুলিতে এই সমস্যাগুলি হ'ল যা লোকেরা সত্যই এটি প্রয়োজন না হওয়া অবধি আনুষ্ঠানিক বিমূর্তকরণ বন্ধ রাখতে সক্ষম করে। আপনি কোন ভাষাটি ব্যবহার করছেন তা আপনি বলেননি তবে কিছু ভাষা রয়েছে যা বুঝতে সমস্যা হয় না these
আপনি কোন ভাষাটি ব্যবহার করছেন তা আপনি বলেন নি তাই আমি আপনার ভাষা এবং পরিস্থিতিটি যে কোনও জায়গায় কীওয়ার্ড ইন্টারফেস হতে চলেছে তা সিদ্ধান্ত নেওয়ার আগে কেবল যত্ন সহকারে আপনার ভাষা এবং পরিস্থিতি বিশ্লেষণ করার জন্য অনুরোধ করব।
YAGNI নীতি এখানে মূল ভূমিকা পালন করে। তবে তাই "দয়া করে নিজেকে পায়ে গুলি করা শক্ত করুন"।