Tôi đang cố gắng tìm ra khi nào nên sử dụng sổ đăng ký DIC / IoC để định cấu hình phần mềm của mình và khi nào nên sử dụng các nhà máy, cùng với lý do đằng sau một trong hai cách tiếp cận.
Tôi đang sử dụng StructMap làm thùng chứa DI (DIC), dễ dàng cấu hình bằng cách sử dụng đăng ký. Trong DIC thực tế, tất cả các đối tượng đã đăng ký đều tĩnh theo nghĩa, tôi không cần thay đổi / trao đổi bất kỳ triển khai / thể hiện nào trong thời gian chạy, một khi DIC được cấu hình và chúng được cấu hình trong DIC dưới dạng singletons. Tuy nhiên, vì phần mềm của tôi (SW) sẽ chạy trên các thiết bị khác nhau, tôi cần phải chọn một sổ đăng ký dành riêng cho thiết bị tùy thuộc vào thiết bị mà SW của tôi chạy để định cấu hình phần cứng phù hợp.
Do việc xây dựng một số đối tượng của tôi yêu cầu đọc trong các tệp cấu hình, tôi đang sử dụng các nhà máy để trả lại các phiên bản này cho DIC, để tách việc đọc cấu hình khỏi việc tạo đối tượng. Tôi đã đăng ký getters nhà máy trong DIC cho các loại plugin tương ứng.
Bây giờ nói rằng tôi có một loại plugin IMotor
với các loại cụ thể Motor1
và Motor2
, nên được xử lý bởi một nhà máy. Hiện tại có hai cách tôi có thể quyết định cách định cấu hình thiết bị của mình:
- Tôi chuyển thông tin về thiết bị mà SW đang chạy tới
MotorFactory
và nó trả về đúng động cơ,Motor1
hoặcMotor2
. Trong trường hợp này logic để quyết định là bên trong Nhà máy. - Tôi định cấu hình DIC theo thiết bị mà nó đang chạy và tạo hai nhà máy
Motor1Factory
vàMotor2Factory
, nơi một người tạoMotor1
và người kiaMotor2
. Trong trường hợp này, tôi sẽ có các mục đăng ký khác nhauIMotor
trong các cơ quan đăng ký dành riêng cho thiết bị sử dụngMotor1Factory
hoặcMotor2Factory
.
Bây giờ câu hỏi của tôi là: Một trong hai phương pháp này là thích hợp hơn và tại sao? Đối với tôi, có vẻ như trường hợp đầu tiên không đơn giản và phức tạp, vì tôi đang lan truyền logic quyết định loại nào sẽ khởi tạo trong toàn bộ cơ sở mã. Trong trường hợp thứ hai, tôi nhân số hiệu quả số lượng nhà máy trong mã của mình, vì tôi sẽ cần một nhà máy cho (hầu hết) từng loại bê tông. Nó càng trở nên khó hiểu hơn với tôi, khi các nhà máy trừu tượng được thêm vào hỗn hợp.
Vì vậy, một lần nữa: Khi nào tôi nên sử dụng phương pháp này hay phương pháp khác? Và quan trọng hơn: các chỉ số tốt để quyết định con đường nào để đi?