8000 DI Design Pattern Added · howtocode-dev/php.howtocode.dev@a061b00 · GitHub
[go: up one dir, main page]

Skip to content

Commit a061b00

Browse files
committed
DI Design Pattern Added
1 parent b4941b9 commit a061b00

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@
2727
* [অবজার্ভার](observer-pattern.md)
2828
* [অ্যাডাপ্টার](adapter-pattern.md)
2929
* [ফ্যাক্টরী](factory-pattern.md)
30+
* [ডিপেন্ডেন্সি ইনজেকশন](dependency-injection-pattern.md)

dependency-injection-pattern.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# ডিপেন্ডেন্সি ইনজেকশন ডিজাইন প্যাটার্নঃ
2+
3+
ডিপেন্ডেন্সি ইনজেকশন স্ট্রাকচারাল ডিজাইন প্যাটার্নের মধ্যে পরে। এইটা এমন একটা ডিজাইন প্যাটার্ন যা কোন ক্লাসের ডিপেন্ডেন্সি অর্থাৎ প্রয়োজনীয় অবজেক্ট গুলোকে রান টাইম কিংবা কম্পাইল টাইমে সহজে পরিবর্তনে সহায়তা করে।
4+
5+
এই প্যাটার্নের মূল উদ্দেশ্যই হল লুজলি কাপল আর্কিটেকচার ইমপ্লিমেন্ট করা যাতে করে একটা ভাল মানের অ্যাপ তৈরি করা যায়।
6+
7+
ডিপেন্ডেন্সি ইনজেকশন ডিজাইন প্যাটার্ন হল ```S.O.L.I.D Principle``` এর ```D``` যার পূর্ণ অর্থ ```Dependency Inversion Principle (DIP)``` যেটি ```Inversion of Control (IoC)``` কে অনুসরণ করে।
8+
9+
এখানে ```Dependency Inversion Principle``` বলতে ```Decoupling``` করাকে বুঝানো হয় আর ```Inversion of Control``` বলতে কিভাবে ডিপেন্ডেন্সি রিজল্ভ করা হবে সেটিকে বুঝায়। ডিপেন্ডেন্সি রিজল্ভ করতে ```Dependency Injection (DI) Container``` বা ```Inversion of Control (IoC) Container``` ব্যাবহৃত হয়ে থাকে।
10+
11+
আমরা সাধারণত একটি ক্লাসে অন্য ক্লাসের অবজেক্ট ব্যাবহার করলে নিচের মত করে হার্ডকোড করি যা হাইলি কাপল্ড থাকে।
12+
13+
```php
14+
class Database
15+
{
16+
protected $adapter;
17+
18+
public function __construct()
19+
{
20+
$this->adapter = new MySqlAdapter;
21+
}
22+
}
23+
24+
class MysqlAdapter
25+
{
26+
27+
}
28+
```
29+
30+
আর ডিপেন্ডেন্সি ইনজেকশন ডিজাইন প্যাটার্নে কোন ক্লাস কিংবা ইন্টারফেইসকে টাইপ হিন্ট করে কনস্ট্রাক্টর কিংবা মেথডে ইঞ্জেক্ট করতে হয় নিচের মত করে।
31+
32+
```php
33+
class Database
34+
{
35+
protected $adapter;
36+
37+
public function __construct(MySqlAdapter $adapter)
38+
{
39+
$this->adapter = $adapter;
40+
}
41+
}
42+
43+
class MysqlAdapter
44+
{
45+
46+
}
47+
```
48+
49+
উপরে ```MySqlAdapter``` ক্লাসকে ডিপেন্ডেন্সি হিসেবে রাখা হয়েছে। আর এই ডিপেন্ডেন্সি রিজল্ভ করতে হলে অবশ্যই ```MySqlAdapter``` এর অবজেক্ট কন্সট্রাক্টরের প্যারামিটারে দিতে হবে।
50+
51+
যেমনঃ
52+
```php
53+
$mysqlAdapter = new MysqlAdapter;
54+
$database = new Database($mysqlAdapter);
55+
```
56+
57+
ডিপেন্ডেন্সি প্রধানত তিন ভাবে ইনজেক্ট করা যায়।
58+
59+
## ১. কন্সট্রাক্টর ইনজেকশনঃ
60+
যা কনস্ট্রাক্টরের মাধ্যমে ইঞ্জেক্ট করা হয়।
61+
62+
```php
63+
public function __construct(MySqlAdapter $adapter)
64+
{
65+
$this->adapter = $adapter;
66+
}
67+
```
68+
69+
## ২. সেটার ইনজেকশনঃ
70+
যা কোন মেথডের প্যারামিটারে ইঞ্জেক্ট করা হয়।
71+
72+
```php
73+
public function setterMethod(MySqlAdapter $adapter)
74+
{
75+
$this->adapter = $adapter;
76+
}
77+
```
78+
79+
## ৩. ইন্টারফেইস ইনজেকশনঃ
80+
ইন্টারফেইসকে কোন কনস্ট্রাক্টরে অথবা সেটার মেথডে ইঞ্জেক্ট করা হয়।
81+
82+
```php
83+
public function __construct(AdapterInterface $adapter)
84+
{
85+
$this->adapter = $adapter;
86+
}
87+
```
88+
89+
আমরা আমাদের প্রজেক্টে ডিপেন্ডেন্সি গুলোকে স্বয়ংক্রিয় ভাবে ইঞ্জেক্ট কিংবা রিজল্ভ করতে ডিপেন্ডেন্সি ইনজেকশন কন্টেইনার ব্যাবহার করব যা আগেই উল্লেখ করেছি।
90+
অনেক ফ্রেমওয়ার্কে এই কন্টেইনার সাধারণত বিল্ট-ইন দেয়া থাকে যেমনঃ ```Symfony```, ```Laravel```, ```Yii```
91+
92+
আমরা সাধারণ প্রজেক্টের ক্ষেত্রে ```Pimple``` নামে কন্টেইনারটি ব্যাবহার করতে পারি।
93+
আবার আমি আমার কাজের জন্য খুব সহজ এবং অপ্টিমাইজ একটা কন্টেইনার বানিয়েছিলাম আপনারা চাইলে সেটি দেখতে পারেন [এই লিঙ্ক](https://github.com/appzcoder/container) থেকে। আশাকরি সোর্স কোড ও ডকুমেন্টেশন থেকে আপনারা ভাল ধারণা পাবেন।
94+
95+
এই চ্যাপ্টারের সোর্স কোডটি [এই লিঙ্ক](https://github.com/sohelamin/php-design-patterns) থেকে পাবেন।

design-patterns.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@
1616
* [অবজার্ভার](observer-pattern.md)
1717
* [অ্যাডাপ্টার](adapter-pattern.md)
1818
* [ফ্যাক্টরী](factory-pattern.md)
19+
* [ডিপেন্ডেন্সি ইনজেকশন](dependency-injection-pattern.md)

0 commit comments

Comments
 (0)
0