সেটার, বৈধকরণ এবং নির্ভরতা ইনজেকশন

আসুন একটি থিং ক্লাস আছে বলতে যাক, এবং আমি MySpecificDateValidation বর্গ দ্বারা উপলব্ধ করা হয় যে নির্দিষ্ট নির্দিষ্টতা যাচাইকরণ ব্যবহার করতে হবে Zend_Validate_Abstract প্রসারিত

থিং ক্লাসে, আমি নির্ভরতা ইনজেকশন সম্পর্কে চিন্তা করছিলাম এবং ভাবছিলাম এই কোডটি যদি হয়:

public function SetDateBegin($dateBegin) {
    $dateValidator = new MySpecificDateValidation();
    if ($dateValidator->isValid($dateBegin)) {
        $this->dateBegin = $dateBegin;
    } else {
        throw new Exception /*...*/;
    }
}

এটিকে সংশোধন করা উচিত:

public function SetDateBegin($dateBegin, MySpecificDateValidation $dateValidator) {
    if ($dateValidator->isValid($dateBegin)) {
        $this->dateBegin = $dateBegin;
    } else {
        throw new Exception /*...*/;
    }
}

বা কিছু নির্ভরশীলতা মত কিছু যে আপনি সঙ্গে বসবাস করতে পারেন?

2
যোগ সম্পাদিত
মতামত: 1
কিন্তু, অন্যদিকে, যদি আমি একটি ডজন অর্ধ ডজন সংখ্যক ভ্যালিডেটরদের সাথে কৃতিত্ব অর্জন করি, তবে এটি (সৃষ্টির ফলে) কন্সট্রাকটরে অতিরিক্ত ওজন আনবে, তাই না?
যোগ লেখক Rodrigo Além Disso, উৎস
হয়তো আমি এটা "hyperboled" এটি একটি বিট, বা আমি এটি বর্ণিতভাবে একটি বিভ্রান্তি তৈরি ... আমি একসঙ্গে 6 বিভিন্ন validators সঙ্গে এক পদ্ধতিতে 12 পরামিতি সম্পর্কে কথা ছিল না, কিন্তু একটি শ্রেণী সঙ্গে প্রায় 12 setters একটি বর্গ বিভিন্ন validators এর, সব জন্য একই নয় এটা কম কদর্য কিছু এটা সক্রিয় করে? :)
যোগ লেখক Rodrigo Além Disso, উৎস
@ রোড্রাগোএওকুবো যদি আপনার ক্লাসে অনেক নির্ভরতা থাকে তবে এটি পুনরায় ফ্যাক্টরিংয়ের প্রয়োজন, এটি খুব বেশি করে করছে! যে বলেন, আপনি আপনার নির্ভরতা পাস যেখানে আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে।
যোগ লেখক vascowhite, উৎস
Lol, একটি বিট কম কদর্য, কিন্তু অনেক :)
যোগ লেখক vascowhite, উৎস
সম্ভবত সৃষ্টিকারী বস্তুর মধ্যে বৈধতাগুলি পাস করতে এবং প্রতিটি ফাংশনতে নয়। SetDateBegin নামে কখনই বলা হয় না যদি আপনার অতিরিক্ত জিনিসপত্র এড়াতে কোন বাধ্যতামূলক কারণ না থাকে তবে আপনার চারপাশে ছড়িয়ে থাকা অনেক কম কোড থাকবে।
যোগ লেখক DampeS8N, উৎস

1 উত্তর

আপনার দ্বিতীয় বিকল্পটি ইউনিট পরীক্ষা হিসাবে অনেক সহজ হবে কারণ আপনি যাচাইকারীকে উপহাস ও ইনজেক্ট করতে সক্ষম হবেন প্রকৃত এক পরিবর্তে উপহাস উপায়ে

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

The point of dependency injection is to allow you to isolate your classes from their dependencies so you test each class in isolation.

সুতরাং, একটি পরীক্ষা বিন্দু থেকে, আপনি সব নির্ভরশীলতা পরিবাহিত করা উচিত, সবসময়।

4
যোগ
ঠিক আছে, আমি বুঝতে পারি যে (ইউনিট পরীক্ষার) প্রধান সুবিধা। আমি বিশ্বাস করি আমি এখনও এই ধারণাটি ব্যবহার করার চেষ্টা করছি এবং পিছনে পুরানো খারাপ অভ্যাস ছেড়ে চলে যাচ্ছি ...
যোগ লেখক Rodrigo Além Disso, উৎস
@ রোড্রাগোএওকুবো ইউনিট পরীক্ষা মূল সুবিধা নয়, এটি মূলত একমাত্র সুবিধা। অন্য সবকিছু আরও দক্ষতার সাথে অন্য উপায়ে করা যেতে পারে কিন্তু শুধুমাত্র DI দ্বারা আপনি আপেক্ষিক আরাম সঙ্গে যারা জিনিস সব করতে পারেন এবং এছাড়াও এখনও স্বচ্ছন্দ সঙ্গে ইউনিট পরীক্ষা।
যোগ লেখক DampeS8N, উৎস