ক্যাসেল উইন্ডসর কী এবং আমি কেন যত্ন নেব?


190

আমি win32 এবং প্রারম্ভিক COM- এ আমার দাঁত কেটে দীর্ঘকালীন উইন্ডোজ বিকাশকারী। আমি 2001 থেকে .NET এর সাথে কাজ করছি, তাই আমি সি # এবং সিএলআর-তে বেশ সাবলীল। স্ট্যাক ওভারফ্লোতে অংশ নেওয়া শুরু না করে আমি ক্যাসেল উইন্ডসর সম্পর্কে কখনও শুনিনি। আমি ক্যাসেল উইন্ডসর "শুরু করা" গাইডটি পড়েছি, তবে এটি ক্লিক করছে না।

এই পুরানো কুকুরটিকে নতুন কৌশল শেখান, এবং আমাকে কেন আমার উদ্যোগী অ্যাপ্লিকেশনগুলিতে ক্যাসল উইন্ডসরকে সংহত করা উচিত তা বলুন।


1
বিপরীতকরণ নিয়ন্ত্রণ উপর পড়ুন। আপনাকে নির্ভরতা ডিকুয়াল করতে সাহায্য করার জন্য এটি খুব দরকারী, যা আপনাকে ইউনিট পরীক্ষার লেখার ক্ষেত্রে শুরু করতে অনেক সাহায্য করবে।
ড্যান Carsharpster

উত্তর:


358

ক্যাসল উইন্ডসর নিয়ন্ত্রণ সরঞ্জামের একটি বিপরীতমুখী। এটির মতো অন্যরাও আছেন।

এটি ঠিক সেখানে প্রাক-বিল্ট এবং প্রাক-তারযুক্ত নির্ভরতা সহ আপনাকে অবজেক্টগুলি দিতে পারে। "নতুন" অপারেটরের পরিবর্তে প্রতিচ্ছবি এবং কনফিগারেশনের মাধ্যমে একটি সম্পূর্ণ অবজেক্ট গ্রাফ তৈরি করা হয়েছে।

এখানে শুরু করুন: http://tech.groups.yahoo.com/group/altdotnet/message/10434


আপনার ইমেল পাঠানোর ক্লাসটি কল্পনা করুন। EmailSender। কল্পনা করুন আপনার আরও একটি ক্লাস ওয়ার্কফ্লোস্টিপার রয়েছে। ওয়ার্কফ্লো স্টেপরের অভ্যন্তরে আপনাকে ইমেলসেন্ডার ব্যবহার করতে হবে।

আপনি সবসময় বলতে পারে new EmailSender().Send(emailMessage);

কিন্তু এটি - এর ব্যবহার new- একটি শক্ত আবরণ তৈরি করে যা পরিবর্তন করা শক্ত। (এটি সর্বোপরি একটি ছোট্ট উদাহরণ স্বরূপ)

তাহলে কী, যদি এই খারাপ ছেলেটিকে ওয়ার্কফ্লোস্টেপরের অভ্যন্তরে নতুন করার পরিবর্তে, আপনি কেবল এটি নির্মাণকারীর মধ্যে দিয়ে গেছেন?

সুতরাং যারাই এটি ডেকেছে ইমেলসেন্ডারটি নতুন করে তুলতে হবে।

new WorkflowStepper(emailSender).Step()

কল্পনা করুন যে আপনার এই শত শত ছোট ক্লাস রয়েছে যার কেবলমাত্র একটি দায়িত্ব (গুগল এসআরপি) .. এবং আপনি ওয়ার্কফ্লোস্টেপারে তাদের কয়েকটি ব্যবহার করেন:

new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()

EmailSenderআপনি কখন লিখছেন WorkflowStepperবা কখন তা বিশদ নিয়ে উদ্বিগ্ন না হয়ে ভাবুনAlertRegistry

আপনি যে উদ্বেগ নিয়ে কাজ করছেন সে সম্পর্কে আপনি কেবল উদ্বিগ্ন।

বস্তু এবং নির্ভরতার এই পুরো গ্রাফ (গাছ) এর কল্পনা করুন রান সময়টিতে তারে ওয়্যার্ড হয়ে যায়, যাতে আপনি যখন এটি করেন:

WorkflowStepper stepper = Container.Get<WorkflowStepper>();

আপনার WorkflowStepperযেখানে প্রয়োজন সেখানে স্বয়ংক্রিয়ভাবে পূর্ণ নির্ভরতাগুলির সাথে আপনি একটি সত্যিকারের চুক্তি পান ।

এমন কিছু নেই new

এটি কেবল ঘটে - কারণ এটি জানেন কী কী প্রয়োজন।

এবং আপনি পরীক্ষামূলক এবং পুনরাবৃত্তযোগ্য উপায়ে আরও ভাল ডিজাইন করা, ডিআরওয়াই কোড দিয়ে কম ত্রুটি লিখতে পারেন।


30
অসাধারণ! ভালভাবে লিখিত! এখন আমি এটি সম্পর্কে উত্তেজিত।
ডেভিড হিল

1
ধন্যবাদ। এটি আরও অনেক কিছু আছে। আমি একটি খুব সাধারণ এবং বেদনাদায়ক দৃ concrete় উদাহরণ বেছে নিয়েছি। আপনি প্রয়োগগুলি পরিবর্তন করতে ইন্টারফেস ব্যবহার করতে পারেন। আপনি সম্পূর্ণ অ্যাসেম্বলিকে স্বয়ংক্রিয়ভাবে কনফিগার করতে পারেন। আপনি সিঙ্গলটন বা প্রতি-HTTP- অনুরোধ ইত্যাদির মতো জীবনচক্রগুলি নির্দিষ্ট করতে পারেন going চালিয়ে যান - এটি আপনার কাজকে পরিবর্তন করবে।
ম্যাট Hinze

6
এবং জাভা লোকদের সাহায্য করার জন্য: এটি নেট .- নেট ;-)
মার্ক রেনুফ

5
আমি দেখতে পাচ্ছি যে আমার অভিজ্ঞতায় এটি ডিবাগ করা শক্ত কারণ কারণ বস্তুগুলি কোথায় শুরু করা হয়েছে ?? - একটি বৃহত প্রকল্পে প্রাথমিকের মূল খুঁজে পাওয়া শক্ত। আমি ব্যবহারের পুরানো ধাঁচের পদ্ধতিটিকে পছন্দ করি new, আমি জানি সমস্ত কিছু তখন। আমি প্রতিচ্ছবি ব্যবহার করার ধারণাটিও পছন্দ করি না এবং এটি সত্যই একটি কালো বাক্স, কোডটি আমাদের নিজস্ব নয় এবং তাই এটি পুরোপুরি বুঝতে পারি না।
লুক টি ওব্রায়ান

1
@ ন্যাশওয়ান হ্যাঁ আমি ইউনিট পরীক্ষা লিখছি, তবে আইওসি / ডিআইয়ের নীতিগুলি ক্যাসেল উইন্ডসর বা কোনও তৃতীয় পক্ষের কাঠামো ছাড়াই প্রয়োগ করা যেতে পারে, এটি আমার পক্ষে কেবলমাত্র অন্য নির্ভরতা যুক্ত করেছে, এটি ছিল আমার মন্তব্যের মূল বিষয়। আমি কেবল ক্যাসল উইন্ডসর এর সুবিধা দেখতে পাচ্ছি না।
লুক টি ওব্রায়েন

4

মার্ক সিমেন লিখেছিলেন এবং ডিআই (ডিপেন্ডেন্সি ইনজেকশন) এর উপর একটি দুর্দান্ত বই যা আইওসি-র একটি উপসেট। তিনি অনেকগুলি পাত্রেও তুলনা করেন। আমি এই বইটি যথেষ্ট সুপারিশ করতে পারি না। বইটির নাম: "নির্ভরতা ইনজেকশন ইন। নেট" https://www.manning.com/books/d dependency-inication-in-dot-net


3

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

আইওসি (সিডাব্লু বা নিনজেক্ট ইত্যাদি ..) যে লক্ষ্যটি নিয়েছে তা অর্জনের সর্বোত্তম উপায় হ'ল রাজনীতি # 1 এবং # 2 কে নির্মূল করা বিকাশকালে বিকাশকারীদের মিথ্যা বোঝার মুখোমুখি হওয়ার প্রয়োজনীয়তা অপসারণ করা। এই দুটি সমাধান কি আইওসির সাথে সম্পর্কিত বলে মনে হচ্ছে না? তারা :)


3

ক্যাসল উইন্ডসর এর Dependency Injection container.অর্থ এটি এর সাহায্যে আপনি আপনার নির্ভরতা ইনজেক্ট করতে পারেন এবং নতুন কীওয়ার্ডের সাহায্যে এগুলি তৈরি না করে এগুলি ব্যবহার করতে পারেন। উদাহরণস্বরূপ বিবেচনা করুন আপনি একটি সংগ্রহশালা বা পরিষেবা লিখেছেন এবং আপনি এটি অনেক জায়গায় ব্যবহার করতে চান, আপনাকে প্রথমে আপনার পরিষেবা / সংগ্রহস্থলটি নিবন্ধিত করতে হবে এবং এটি প্রয়োজনীয় জায়গায় ইঞ্জেকশন দেওয়ার পরে আপনি এটি ব্যবহার শুরু করতে পারেন। আপনি নীচের টিউটোরিয়ালটি একবার দেখে নিতে পারেন যা আমি দুর্গ উইন্ডসর শেখার জন্য অনুসরণ করেছি।

লিংক

আশা করি এটা তোমাকে সাহায্য করবে।


1

সহজভাবে করা. আপনার কোডে কিছু শ্রেণি সমাহিত হয়েছে বলে ধারণা করুন যার কাজটি করার জন্য কয়েকটি সাধারণ কনফিগার মান দরকার। এর অর্থ এই শ্রেণীর একটি উদাহরণ তৈরি করে এমন সমস্ত কিছু নির্ভর করে get

সুতরাং হয় প্রচুর ক্লাস অপ্রয়োজনীয়ভাবে পরিবর্তন করা হয়, আপনি একটি বড় কনফিগার ক্লাসে কনফিগার মানগুলি গুচ্ছ করেন যা খারাপ ... বা সবচেয়ে খারাপ এখনও সার্ভিস লোকেটারে যায়!

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

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