আমি প্রায়শই এই সমস্যায় পড়ে যাই, বিশেষত জাভাতে, এমনকি যদি আমি মনে করি এটি একটি সাধারণ ওওপি সমস্যা। এটি: একটি ব্যতিক্রম উত্থাপন একটি ডিজাইনের সমস্যা প্রকাশ করে।
ধরুন আমার একটি ক্লাস আছে যার একটি String name
ক্ষেত্র এবং String surname
ক্ষেত্র রয়েছে।
তারপরে এটি কোনও ক্ষেত্রের ডকুমেন্টে প্রদর্শন করার জন্য কোনও ব্যক্তির পুরো নাম রচনা করতে এই ক্ষেত্রগুলি ব্যবহার করে, একটি চালান বলুন।
public void String name;
public void String surname;
public String getCompleteName() {return name + " " + surname;}
public void displayCompleteNameOnInvoice() {
String completeName = getCompleteName();
//do something with it....
}
displayCompleteNameOnInvoice
নাম নির্ধারিত হওয়ার আগে যদি ডাকা হয় তবে আমি এখন একটি ত্রুটি ছুঁড়ে দিয়ে আমার শ্রেণীর আচরণকে আরও শক্তিশালী করতে চাই । এটি একটি ভাল ধারণা বলে মনে হচ্ছে, তাই না?
আমি getCompleteName
পদ্ধতিতে একটি ব্যতিক্রম-উত্থাপন কোড যুক্ত করতে পারি । তবে এইভাবে আমি শ্রেণীর ব্যবহারকারীর সাথে একটি 'অন্তর্নিহিত' চুক্তি লঙ্ঘন করছি; সাধারণভাবে গ্রাহকরা যদি তাদের মানগুলি সেট না করে থাকে তবে তারা ব্যতিক্রম ছোঁড়ার কথা নয়। ঠিক আছে, এটি কোনও স্ট্যান্ডার্ড প্রাপ্তি নয় যেহেতু এটি কোনও একক ক্ষেত্র ফেরত না, তবে ব্যবহারকারীর দৃষ্টিকোণ থেকে পার্থক্যটি এটি সম্পর্কে ভাবতে খুব সূক্ষ্ম হতে পারে।
অথবা আমি ব্যতিক্রমটি ভিতরে থেকে ফেলে দিতে পারি displayCompleteNameOnInvoice
। তবে এটি করার জন্য আমার সরাসরি name
বা surname
ক্ষেত্রের পরীক্ষা করা উচিত এবং তা করা আমি প্রতিনিধিত্বমূলক বিমূর্তি লঙ্ঘন করব getCompleteName
। পুরো নামটি পরীক্ষা করা এবং তৈরি করা এই পদ্ধতির দায়িত্ব responsibility এটি এমনকি সিদ্ধান্ত নেন পারে, অন্যান্য ডেটার উপর সিদ্ধান্ত ভিত্তিবিন্দু, যে কিছু কিছু ক্ষেত্রে এটা যথেষ্ট surname
।
সুতরাং শুধুমাত্র সম্ভাবনা পদ্ধতির শব্দার্থিক পরিবর্তন বলে মনে হয় getCompleteName
করতে composeCompleteName
, যে আরো একটি 'সক্রিয়' আচরণ এবং তার সাথে একটি ব্যতিক্রম নিক্ষেপ ক্ষমতা দাড়ায়।
এটি কি আরও ভাল ডিজাইনের সমাধান? আমি সর্বদা সরলতা এবং সঠিকতার মধ্যে সেরা ভারসাম্য খুঁজছি। এই সমস্যাটির জন্য কোনও নকশা রেফারেন্স আছে?
displayCompleteNameOnInvoice
যদি কেবল getCompleteName
ফেরত দেয় তবে ব্যতিক্রম null
করতে পারেন, তাই না?