আমি কি ডেটা ট্রান্সফার অবজেক্টের জন্য ইন্টারফেস তৈরি করব?


19

ডেটা ট্রান্সফার অবজেক্টের জন্য ইন্টারফেস তৈরি করা ভাল ধারণা বা খারাপ ধারণা? ধরে নেওয়া যায় যে বস্তুটি সাধারণত পরিবর্তনযোগ্য is

যদিও আমার উদাহরণ জাভাতে রয়েছে, এটি অন্য যে কোনও ভাষার ক্ষেত্রে একই ধারণা যা প্রযোজ্য।

interface DataTransferObject  {
    String getName();
    void setName(String name);
}

class RealDataTransferObject  implements DataTransferObject {

    String name;
    String getName() {
        return name;
    } 
    void setName(String name) {
        this.name = name;
    }
}

অবশ্যই এটি একটি সরল উদাহরণ, বাস্তব জীবনে আরও ক্ষেত্র থাকতে পারে।

উত্তর:


24

সাধারণ উত্তরটি হ'ল না , কারণ এর জন্য নির্দিষ্ট, কংক্রিট কারণ ছাড়া আপনার কখনই কোড যুক্ত করা উচিত নয় এবং এ জাতীয় ইন্টারফেসের কোনও সাধারণ কারণ নেই।

বলা হচ্ছে, কখনও কখনও একটি ভাল কারণ হতে পারে। তবে আমি সমস্ত ক্ষেত্রেই দেখেছি, এই ইন্টারফেসগুলি আংশিক ছিল, একাধিক শ্রেণীর দ্বারা ভাগ করা কেবলমাত্র এক বা কয়েকটি বৈশিষ্ট্যগুলিকে আবৃত করে আমি একটি সাধারণ সুপারক্লাস না দিয়ে পলিম্পোরিকভাবে ব্যবহার করতে চেয়েছিলাম। সাধারণ প্রার্থীরা হ'ল এক Idধরণের রেজিস্ট্রি ব্যবহার করার সম্পত্তি বা Nameব্যবহারকারীর কাছে প্রদর্শিত সম্পত্তি। তবে এটি কোনও ক্ষেত্রে কার্যকর হতে পারে যেখানে আপনি এক্স থাকা সমস্ত কিছু হ্যান্ডল করার জন্য কিছু কোড চান - কেবল একটি XSourceইন্টারফেস তৈরি করুন যাতে getX(এবং, শুধুমাত্র প্রয়োজন হলে, setX) পদ্ধতিগুলি রয়েছে।

কিন্তু প্রতিটি বৈশিষ্ট্যযুক্ত প্রতিটি মডেল শ্রেণির জন্য একটি পৃথক ইন্টারফেস? আমি এটি করতে একটি ভাল কারণ কল্পনা করতে পারি না। একটি খারাপ কারণ একটি খারাপভাবে ডিজাইন করা কাঠামো হবে যা এটির প্রয়োজন; সত্তা ইজেবিগুলি ঠিক সেটাই করেছে, যদি আমি সঠিকভাবে মনে করি। শুকরিয়া তারা এত খারাপ ছিল যে তারা কখনই বেশি ট্র্যাকশন অর্জন করতে পারেনি এবং EJB 3.0 থেকে অবহেলিত

সিডনোট: দয়া করে জাভা মটরশুটিগুলি কেবল তুচ্ছ গিটার এবং সেটারগুলির সাথে বর্ণনা করতে "মান অবজেক্ট" শব্দটি ব্যবহার করা এড়িয়ে চলুন - এটি মান অবজেক্টের আরও সাধারণ সংজ্ঞার সাথে সাংঘর্ষিক যে কোনও পরিচয় নেই যা সাধারণত অপরিবর্তনীয়। আরও ভাল শব্দটি ডিটিও বা মডেল ক্লাস হবে - যদিও পরবর্তী ক্ষেত্রে নোট করুন যে রক্তাল্পতা ডোমেন মডেলগুলিকে একটি অ্যান্টিপ্যাটার্ন হিসাবে বিবেচনা করা হয়।


3
"অ্যানিমিক ডোমেন মডেলগুলিকে একটি অ্যান্টিপ্যাটার্ন হিসাবে বিবেচনা করা হয়" - মার্টিন ফওলারের দ্বারা, পিইএএ-তে স্বীকার করেছেন যে তিনি এমন লোকদের জানেন যারা কয়েক দশক ধরে "খুব সফলভাবে" এইভাবে কাজ করেছেন। সুতরাং, আমি প্রস্তাব দিচ্ছি, কম কোনও অ্যান্টি-প্যাটার্ন এবং আরও-কী-ফাউলারের-পছন্দ-মতো-কাজ। তবুও, ভাল উত্তর, +1।
পিডিআর

4
@ পিডিআর: ফোলার এই শব্দটি তৈরি করতে পারেন, তবে তিনি কোনওভাবেই এঁকে প্রতিরোধক হিসাবে বিবেচনা করেন না। আমি মনে করি না যে কেও আসলে ওও বোঝে সে মনে করে যে ডোমেন-নির্দিষ্ট যুক্তিকে ডোমেন মডেল থেকে দূরে রাখা ভাল ধারণা।
মাইকেল বর্গওয়ার্ট 21

সংশোধন শব্দটির জন্য ধন্যবাদ, ডিটিও হ'ল শব্দটি আমি গতরাতে খুঁজছিলাম কিন্তু আমার জীবনের কথা মনে করতে পারিনি। চারদিকে নাম পরিবর্তন করে, জিনিসগুলি আরও বুদ্ধিমান নকশাকে বুদ্ধিমান করেছে।
আর্কিমিডস ট্রাজানো

@ পিডিআর আমি মনে করি এটি রাখার সর্বোত্তম উপায় হ'ল এটি ওও প্রোগ্রামিংয়ের প্রসঙ্গে একটি প্রতিষেধক। আরও অনেক দৃষ্টান্ত রয়েছে যেখানে এটি পুরোপুরি ঠিক আছে, এবং আপনি এমনকি কোনও ওও ভাষায় সফলভাবে কাজ করতে পারেন (এটি কেবল বিশেষভাবে অবজেক্ট-ভিত্তিক হবে না)।
ড্যানিয়েল বি

3
@ মিশেলবার্গওয়ার্ট: আমি একমত, তিনি এতে একা নন। তবে উভয়ই একমত নন এমন লোকও নয়। যদি আপনি বলে থাকেন যে "রক্তাল্পতাযুক্ত ডোমেন মডেলগুলি কেউ কেউ এন্টি-প্যাটার্ন হিসাবে বিবেচনা করেন," আমি কিছুই বলিনি। সত্যি বলতে গেলে, আমি মনে করি আপনার শেষ উত্তর যাই হোক না কেন শেষ অনুচ্ছেদ ব্যতীত ভাল হবে। প্রথমার্ধটি আরও ভাল মন্তব্য করতে পারে; দ্বিতীয়ার্ধ এই প্রশ্নটির কিছুই দেয় না।
পিডিআর

2

ইন্টারফেস তৈরি করা ঠিক আছে, তবে আপনার উদাহরণটি কাজ করে না NOT আপনার ইন্টারফেস থেকে সেটারটি সরিয়ে নেওয়া উচিত, এবং এটি ঠিক হবে:

interface ValueObject {
  String getName();
};

এটি এটির অনেকগুলি বাস্তবায়নের অনুমতি দেয়, যেমন ডাটাবেস থেকে নাম আনা যায় ... সেটারটি বিভিন্ন ইন্টারফেসে থাকা উচিত।


2

ইন্টারফেস ইন্টারফেস এবং তাদের ক্লায়েন্ট প্রয়োগকারী ক্লাসগুলির মধ্যে একটি চুক্তি সংজ্ঞায়িত করে। এগুলি একটি বিমূর্তকরণ ব্যবস্থা হিসাবে ব্যবহৃত হয় যাতে ক্লায়েন্টরা "প্রদত্ত আচরণের জিনিসগুলি" চালিত করতে পারে।

সুতরাং প্রশ্নের সাধারণ উত্তর "আমি কি এই ইন্টারফেসটি তৈরি এবং ব্যবহার করব?" হ্যাঁ, আপনি যদি আপনার ক্লায়েন্টদের জন্য শব্দার্থগতভাবে প্রাসঙ্গিক একটি (একক) ধারণাটি সংযুক্ত করতে পারেন।

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

আপনার বিশেষ ক্ষেত্রে, আমি বিশ্বাস করি যে আপনার ইন্টারফেসটি অকেজো। কে এটি ব্যবহার করবে, কখন এবং কখন? আপনি প্রতিটি পরিবর্তনীয় মানগুলির জন্য একটি ইন্টারফেস তৈরি করতে পারবেন না। সুতরাং নিজেকে জিজ্ঞাসা করুন আপনার পদ্ধতিগুলির পিছনে কী প্রাসঙ্গিক এবং আকর্ষণীয় সম্পত্তি।

আপনি যা চান তা যদি কয়েকটি পদ্ধতির মাধ্যমে তাদের সমস্ত পরিবর্তনীয় মানগুলি অ্যাক্সেসযোগ্য থাকার সাথে মোকাবিলা করে তবে জাভা বিনের ধারণা এবং আপনি কীভাবে আপনার শ্রেণিগুলিকে তাদের কনভেনশনগুলি গ্রহণ করতে বাধ্য করতে পারেন তা বিবেচনা করুন।


2

মাইকেল যেমন বলেছিলেন, আপনার কোনও নির্দিষ্ট প্রয়োজন না থাকলে ইন্টারফেস যুক্ত করবেন না।

পরীক্ষা একটি ভাল কারণ একটি উদাহরণ। যদিও আমি প্রকৃত সহযোগীদের যদি তাদের বলি ঠিক "মান বস্তু" হয় তবে আমি তাদের ব্যবহার করতে পছন্দ করি, সত্য ইউনিট পরীক্ষা বিচ্ছিন্নতার জন্য আপনাকে পরীক্ষার জন্য একটি জাল বস্তু তৈরি করতে হতে পারে, যার ক্ষেত্রে একটি ইন্টারফেস বেশ সহায়ক।


1
যুগে যুগে উপহাসের ফ্রেমওয়ার্ক ব্যবহারের জন্য ইন্টারফেসগুলি প্রয়োজনীয় ছিল না।
মাইকেল বর্গওয়ার্ট 21

আপনি মনকিপাচিংয়ের পক্ষে পরামর্শ দিচ্ছেন বলে মনে হচ্ছে। আমি সি # তে মোলসের সাথে এই রাস্তায় নেমেছি এবং এটি সুন্দর নয়। সম্ভব হলে আপনার সহযোগীদের পাস করা আরও ভাল।
জেলেট

1
যদিও আমি মকিতো এবং ইজম্যাক দুটি মজাদার ফ্রেম ব্যবহার করি তা অপরিবর্তনীয় করার সময় চূড়ান্ত ক্লাসগুলিকে মক করতে পারে না।
আর্কিমিডিস ট্রাজানো

1

আপনি যদি ভবিষ্যতে এই অবজেক্টটির কিছু প্রকারের ক্ষেত্র বৈধতা পেতে চান তবে আপনার প্রাথমিক পর্যায়ে এগুলি ভরাট করা উচিত।


0

'মান অবজেক্টের জন্য ইন্টারফেস' হ'ল আমি কোনও এক্সেসর কল করতে ব্যবহার করছি।

আমি অ্যাক্সেসরদের প্রয়োজনীয়তা সম্পর্কিত বিভিন্ন নীতি অনুভব করেছি। কিছু লোক যতটা সম্ভব উকিল করেন, কেউ কেউ লেখার কোডের পরিমাণ হ্রাস করার পরে নিষেধ করে।

অ্যাক্সেসরগুলির জন্য কিছু রেশনাল (বা প্রত্যক্ষ মানের ব্যবহার) নিম্নলিখিত:

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

আমি ব্যক্তিগতভাবে অ্যাক্সেসরের সংখ্যা হ্রাস করার পরামর্শ দিই এবং আপনি যখন সেটটার (সেটনাম) আশা করেন যে পরে কোনও সাধারণ প্রভাবের চেয়ে আরও বেশি হয়ে উঠবে expect


0

এই জাতীয় মান বস্তুটি বেশ নিম্ন স্তরের। আমি এটিকে দুটি দিকের মধ্যে একটিতে চাপ দেওয়ার পরামর্শ দিচ্ছি: (1) মান অবজেক্টটিকে স্থাবর করে তোলা, অর্থাত্ একটি বাস্তব মানের মতো , বা, (2) পরিবর্তনের উচ্চতর স্তরের ডোমেনমুখী ব্যবসায়িক ক্রিয়ায় উন্নীত করা, যার অর্থ আমাদের প্রকাশ করা উচিত কার্যকারিতার ডোমেন সম্পর্কিত ইউনিট পদে ইন্টারফেস।

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