Tôi đã đọc gần đây về DI và IoC trong C++. Tôi là một chút bối rối (ngay cả sau khi đọc câu hỏi liên quan ở đây trên SO) và đã hy vọng cho một số làm rõ.Sự khác nhau giữa Inversion of Control và Dependency injection trong C++ là gì?
Dường như với tôi rằng việc làm quen với STL và Boost dẫn đến việc sử dụng tiêm phụ thuộc khá nhiều. Ví dụ: giả sử tôi đã thực hiện một chức năng tìm thấy giá trị trung bình của một dải số:
template <typename Iter>
double mean(Iter first, Iter last)
{
double sum = 0;
size_t number = 0;
while (first != last)
{
sum += *(first++);
++number;
}
return sum/number;
};
Đây có phải là (nghĩa là sử dụng trình vòng lặp thay vì truy cập bộ sưu tập phụ thuộc)? Đảo ngược kiểm soát? Cũng không?
Hãy xem một ví dụ khác. Chúng tôi có một lớp học:
class Dice
{
public:
typedef boost::mt19937 Engine;
Dice(int num_dice, Engine& rng) : n_(num_dice), eng_(rng) {}
int roll()
{
int sum = 0;
for (int i = 0; i < num_dice; ++i)
sum += boost::uniform_int<>(1,6)(eng_);
return sum;
}
private:
Engine& eng_;
int n_;
};
Điều này có vẻ như tiêm phụ thuộc. Nhưng nó đảo ngược kiểm soát?
Ngoài ra, nếu tôi thiếu điều gì đó, ai đó có thể giúp tôi không? Điều này có vẻ là cách tự nhiên để làm mọi thứ, vì vậy nếu đó là tất cả những gì có là Dependency Injection, tại sao mọi người lại gặp khó khăn khi sử dụng nó?
Bạn đã đọc wiki chưa? Nó có một định nghĩa rất rõ ràng về IoC/DI http://en.wikipedia.org/wiki/Inversion_of_control – CDSO1
Trong C++, chúng ta không làm IoC hoặc DI - chúng ta có những khái niệm riêng của chúng ta. –
Chức năng mẫu của bạn có thể chia cho số không nếu bạn không cẩn thận. –