Nội dung bài viết
Video học lập trình mỗi ngày
Hãy để ý video phía trên, đó là cách họ sẽ CHIA DỮ LIỆU TRONG TABLE MYSQL khi nó quá lớn.
Trước đây chúng tôi có một người Thầy và tôi cũng là một thành viên đã hưởng lợi rất nhiều về cách dạy của Thầy, những điều tưởng chừng như ĐAO TO BÚA LỚN ở các bậc tiến sĩ, nhưng qua cách giảng của Thầy thì tôi thấy nó rất đơn giản để hiểu chúng, vì vậy tôi luôn nhớ và lưu lại những gì mà tôi đã tiếp nhận của Thầy.
Tại sao phải cần IoC
Nếu bạn xuất thấn từ JAVA
, GO
và Nestjs
thì có lẽ cụm từ IoC
sẽ xuất hiện tấn suất rất nhiều trong dự án và trong các lần phỏng vấn đúng không? IOC (Inverse of Control) dịch ra tiếng việt là đảo ngược sự kiểm soát. Vậy hiểu đơn giản là gì?
Trước đây các bạn bên GO ở bài 18 sẽ cung cấp cho các bạn về cách sử dụng tinh tế về IoC, nếu như quên hãy xem lại một chút Go(18) - Wire Dependency Injection
Ví dụ, lúc còn nhỏ (A) chúng ta luôn phụ thuộc vào Ba Mẹ (B), đây được gọi là A phụ thuộc vào B mới có thể tồn tại được. Theo thời gian A càng trưởng thành thì A có thể không còn phụ thuộc vào B, và cũng có thể B (về già) lại phụ thuộc vào A, có đúng không. Đây chính là Inverse of Control
.
Vì sắp tới chúng tôi bước vào dự án sử dụng Nestjs cho nên tôi sẽ lấy IoC trong Nest và JAVA để giải thích rõ hơn về sau. Trước tiên hãy xem hồi nhỏ chúng ta phụ thuộc như thế nào?
// Parents is B
class Parents(){
eat() {
console.log("eat...");
}
}
class Child(){
constructor(){
this.parent = new Parents(); // A needs B to life...
}
eat() {
this.parent.eat();
}
}
const myChild = new Child();
myChild.eat();
Thấy Ba Mẹ cực chưa? Thương Ba Mẹ nhiều hơn ha.
Cuộc sống dạy cho ta nhiều điều, mỗi người đi qua cho ta một sự trải nghiệm...
Dependency Injection (DI) liên quan gì ở đây?
Nếu như code trên mô tả cách chúng ta Dependency
rất mạnh ở Ba Mẹ, kiểu như là không có là chúng ta sẽ die
.
Nhưng bằng cách trưởng thành chính là cách sử dụng IoC
thì chúng ta sẽ không còn phụ thuộc nhiều như trước nữa, và thay vào đó chúng ta sẽ lựa chọn những phụ thuộc khác.
Và Dependency Injection
chính xác là một cách để triển khai Ioc
này. Tức là Injection
tiêm các Dependency
vào cuộc đời constructor
như sau:
// Parents is B
class Parents(){
eat() {
console.log("eat...Parent...");
}
}
class Company(){
eat() {
console.log("eat...company...");
}
}
class Child(){
constructor(dependency){
this.dependency = dependency; // A needs dependency to life...
}
eat() {
this.dependency.eat();
}
}
const myCompany = new Company()
const myChild = new Child(myCompany);
myChild.eat();
Khi trưởng thành chúng ta sẽ không phải bắt buộc sự phụ thuộc vào một ai?
Đoạn code trên thì Child
không còn phụ thuộc và class Parents
sẽ không còn tạo ra instants
nữa mà thay vào đó sẽ nhận những phụ thuộc thông qua một constructor()
điều đó giúp chúng ta dễ dàng thay thế một sự phụ thuộc mà không cần phải thay đổi nhiều.
Đó chính là khái niệm IoC
và DI
. Vậy trong Nestjs, IoC sẽ làm việc như thế nào? Chúng ta sẽ khám phá sự tinh vi như thế nào? OK, chờ một xí...