বিদ্যমান অ্যাপ্লিকেশনে ডিআই / আইওসি ধারককে সংহত করার বিষয়ে প্রস্তাবনা


10

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

এখানে কিছু চ্যালেঞ্জের মুখোমুখি হওয়া দরকার:

  • নির্ভরতা ইনজেকশন খুব কম ব্যবহৃত হয়
  • স্থিতিশীল পদ্ধতি প্রচুর - উভয় কারখানা এবং সহায়ক পদ্ধতি হিসাবে
  • সিঙ্গলেটগুলি মোটামুটি প্রচলিত
  • ইন্টারফেসগুলি যখন ব্যবহৃত হয় তখন খুব দানাদার হয় না
  • অবজেক্টগুলি প্রায়শই বেস ক্লাসগুলির মাধ্যমে অবিবাহিত নির্ভরতা টান দেয়

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

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


3
আমাকে এখন এটি করার কারণ জিজ্ঞাসা করতে হবে ... এই পরিবর্তনটি কী চালাচ্ছে? Maintainability? স্কেলাবিলিটিটি যেহেতু এটি তাত্পর্যপূর্ণভাবে বৃদ্ধি পাবে? বিকাশকারীরা বিরক্ত হয়?
অ্যারন ম্যাকআইভার

1
আমি সম্প্রতি সংস্থায় যোগদান করেছি এবং কিছু "সেরা অনুশীলন" প্রবর্তনের চেষ্টা করছি। আমার প্রধান লক্ষ্য পরীক্ষার দক্ষতা বৃদ্ধি এবং সংযুক্তি হ্রাস করা। আমরা সহজেই নতুন কোডের জন্য ডিআই / আইওসি ব্যবহার করতে পারি এবং বিদ্যমান কোডগুলি একবারে পরিবর্তন করার চেষ্টা করার ইচ্ছা পোষণ করি না, তবে আমরা পরবর্তী কোডটি কীভাবে আরও ভালভাবে তৈরি করতে পারি তার জন্য আমরা কীভাবে বিদ্যমান কোডটিকে সেরাভাবে পরিবর্তন করতে পারি তার সুপারিশ চাই I'd যে এলাকায় পরিবর্তন। এখন পর্যন্ত আমি অনলাইনে একমাত্র জিনিসটি খুঁজে পেয়েছি নিম্নলিখিতটি: কোড. google.com/p/autofac/wiki/ExistingApplications
কালেব পেডারসন

3
যদি না প্রচুর পরিমাণে স্বয়ংক্রিয় ইউনিট / সংহতকরণ পরীক্ষা থাকে; সর্বোত্তম অনুশীলনের খাতিরে সমস্যা না থাকলে বিদ্যমান অবকাঠামোটি সংশোধন করে সমস্যা জিজ্ঞাসা করা হচ্ছে। এমনকি যদি আপনার ইউনিট / ইন্টিগ্রেশন টেস্টিং স্যুটটি শক্ত ছিল তবে আমি এখনও দ্বিধা বোধ করছি।
অ্যারন ম্যাকআইভার

1
@ অ্যারন আমি আশা করি এটি সর্বোত্তম অনুশীলনের খাতিরে এটি করছি বলে মনে হয় না। আমরা পরিবর্তন করছি কারণ বিদ্যমান কোডটির সাথে কাজ করা কঠিন এবং ধীর এবং আমরা নির্দিষ্ট অঞ্চলে কাজ করার কারণে টুকরোচ কাজটি করছি। আনন্দের সাথে, আমাদের পরিবর্তনগুলি সমর্থন করার জন্য যুক্তিসঙ্গত একীকরণ পরীক্ষার একটি সেট এবং কয়েকটি ইউনিট পরীক্ষা আছে।
কালেব পেডারসন

উত্তর:


8

এই জাতীয় কিছু টানতে আপনাকে পদক্ষেপে কাজ করতে হবে, এগুলির প্রত্যেকটিই তুচ্ছ নয় তবে সেগুলি সম্পাদন করা যেতে পারে। আপনি শুরু করার আগে, আপনাকে বুঝতে হবে যে আপনি এই প্রক্রিয়াটিতে ছুটে যেতে পারবেন না।

  1. অ্যাপ্লিকেশনের প্রধান সাবসিস্টেমগুলি এবং interfaceতাদের প্রত্যেকের জন্য একটি নির্ধারণ করুন। এই ইন্টারফেসটি কেবল সিস্টেমের অন্যান্য অংশগুলি এটির সাথে কথা বলার জন্য যে পদ্ধতিগুলি ব্যবহার করবে তা নির্ধারণ করতে হবে। দ্রষ্টব্য: আপনাকে এই সময়ে একাধিক পাস নিতে হতে পারে।
  2. বিদ্যমান ইন্টারফেসের প্রতিনিধিত্ব করে এমন ইন্টারফেসের একটি মোড়কের বাস্তবায়ন সরবরাহ করুন। এই মহড়ার উদ্দেশ্য হ'ল গণের পুনর্লিখন এড়ানো , তবে নতুন ইন্টারফেসগুলি ব্যবহার করার জন্য কোডটি রিএক্টর করা - অর্থাত্ আপনার সিস্টেমে সংযুক্তি হ্রাস করা।
  3. আপনার তৈরি করা ইন্টারফেস এবং বাস্তবায়ন ব্যবহার করে সিস্টেমটি তৈরি করতে IoC ধারক সেট আপ করুন। এই পর্যায়ে আপনি আইওসি পাত্রে ইনস্ট্যান্ট করার যত্ন নিতে চান যাতে এটি প্রয়োগ করতে পারে। উদাহরণস্বরূপ, আপনি যদি কোনও সার্লেট পরিবেশে থাকেন তবে সার্ভলেট init()পদ্ধতিতে আপনি ধারকটি পেতে / তৈরি করতে পারবেন তা নিশ্চিত করুন ।
  4. প্রতিটি সাবসিস্টেমের মধ্যে আবার একই জিনিসটি করুন, আপনি যখন রিফ্যাক্টর করবেন তখন আপনি নিজের স্টাব বাস্তবায়নটিকে আসল জিনিসটিতে পরিণত করছেন যা ঘুরেফিরে তার উপাদানগুলির সাথে কথা বলার জন্য ইন্টারফেস ব্যবহার করে।
  5. কার্যকারিতা থেকে উপাদান আকারের ভাল ভারসাম্য না পাওয়া পর্যন্ত প্রয়োজনীয় হিসাবে পুনরাবৃত্তি করুন।

আপনি যখন কাজটি সম্পন্ন করেন, আপনার সিস্টেমে আপনার কেবলমাত্র স্থিতিশীল পদ্ধতিগুলি হ'ল সত্যিকারের ফাংশনগুলি - উদাহরণস্বরূপ Collectionsশ্রেণি বা শ্রেণীর দিকে নজর দিন Math। কোনও স্থিতিশীল পদ্ধতিতে অন্য উপাদানগুলিতে সরাসরি অ্যাক্সেস করার চেষ্টা করা উচিত নয়।

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


ভাল পরামর্শ। আমি এই জাতীয় পরিবর্তনগুলি করার সময় অন্যদেরও এখানে পরামর্শগুলিতে উল্লেখ করি: কোড. google.com/p/autofac/wiki/ExistingApplications
কালেব পেডারসন

7

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


ভালোবাসি সেই বই !!
মার্টিজ ভার্বার্গ

ভাল সুপারিশ। যদিও আমি এর অর্ধেক বছর আগে পড়েছি, আমি ধারণা করছি যে আমি এখন এ থেকে আরও অনেক কিছু অর্জন করব যে আমি পরিস্থিতিটির গভীর কোমর।
কালেব পেডারসন

এটি মজার, নির্বাচিত উত্তরটি মূলত বইটির সংক্ষিপ্তসার করে;) অবশ্যই পালকগুলি আরও বিশদভাবে চলে।
মাইকেল ব্রাউন

5

আইওসি প্রবর্তনের জন্য প্রাথমিক কারণ নেই decoupling মডিউলগুলি। বিশেষত জাভার সমস্যাটি হ'ল অসাধারণ শক্তিশালী বাঁধাই যা newঅপারেটর দেয়, এর সাথে মিলিত হওয়ার অর্থ হ'ল কলিং কোডটি সঠিকভাবে জানে যে এটি কোন মডিউলটি ব্যবহার করবে।

newকারিগরিগুলি এই জ্ঞানটিকে কেন্দ্রীয় স্থানে নিয়ে যাওয়ার জন্য প্রবর্তিত হয়েছিল তবে শেষ পর্যন্ত আপনি / সিঙ্গলটন ব্যবহারের মডিউলগুলিকে হার্ডওয়ার করেন যা হার্ড বাঁধাই রাখে, অথবা আপনি একটি কনফিগারেশন ফাইলে পড়েন এবং প্রতিবিম্ব / Class.forName ব্যবহার করেন যা প্রতিবন্ধকতার সময় ভঙ্গুর হয় ।

আপনার যদি লক্ষ্যটি সংশোধন না করে থাকে তবে আইওসি আপনাকে কিছু দেবে না।

ইউনিট পরীক্ষাগুলি প্রবর্তন করা সম্ভবত এটির পরিবর্তিত হবে, কারণ আপনাকে পরীক্ষার অধীনে নেই এমন মডিউলগুলি উপহাস করতে হবে এবং একই কোড সহ প্রকৃত উত্পাদন মডিউলগুলি হ্যান্ডেল করার সহজতম উপায় হ'ল উপযুক্ত ইনজেকশনের জন্য আইওসি ফ্রেমওয়ার্ক ব্যবহার করা to মডিউল।

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