Giả sử chúng tôi có 1001 khách hàng xây dựng các phụ thuộc của họ trực tiếp thay vì chấp nhận tiêm. Tái cấu trúc 1001 không phải là một lựa chọn theo ông chủ của chúng tôi. Chúng tôi thực sự thậm chí không cho phép truy cập vào nguồn của họ, chỉ các tệp lớp.
Những gì chúng tôi phải làm là "hiện đại hóa" hệ thống mà 1001 khách hàng này trải qua. Chúng tôi có thể tái cấu trúc rằng tất cả những gì chúng tôi thích. Các phụ thuộc là một phần của hệ thống đó. Và một số trong những phụ thuộc mà chúng tôi phải thay đổi để có một triển khai mới.
Những gì chúng tôi muốn làm là có khả năng cấu hình các triển khai phụ thuộc khác nhau để đáp ứng vô số khách hàng này. Đáng buồn thay, DI dường như không phải là một lựa chọn vì khách hàng không chấp nhận tiêm với các nhà xây dựng hoặc setters.
Các tùy chọn:
1) Tái cấu trúc việc thực hiện dịch vụ mà khách hàng sử dụng để nó thực hiện những gì khách hàng cần bây giờ. Bang chúng ta đã xong. Không linh hoạt. Không phức tạp.
2) Tái cấu trúc việc triển khai để nó ủy thác công việc cho một phụ thuộc khác mà nó có được thông qua một nhà máy. Bây giờ chúng ta có thể kiểm soát việc thực hiện tất cả chúng sử dụng bằng cách tái cấu trúc nhà máy.
3) Tái cấu trúc việc triển khai để nó ủy thác công việc cho một phụ thuộc khác mà nó có được thông qua một bộ định vị dịch vụ. Bây giờ chúng ta có thể kiểm soát việc thực hiện tất cả chúng sử dụng bằng cách định cấu hình bộ định vị dịch vụ có thể đơn giản là một hashmap
chuỗi cho các đối tượng với một quá trình truyền nhỏ đang diễn ra.
4) Một cái gì đó tôi thậm chí chưa nghĩ đến.
Mục tiêu:
Giảm thiểu thiệt hại thiết kế gây ra bằng cách kéo mã máy khách cũ được thiết kế kém vào tương lai mà không thêm sự phức tạp vô nghĩa.
Khách hàng không nên biết hoặc kiểm soát việc thực hiện các phụ thuộc của mình nhưng họ khăng khăng xây dựng chúng với new
. Chúng tôi không thể kiểm soát new
nhưng chúng tôi kiểm soát lớp họ đang xây dựng.
Câu hỏi của tôi:
Những gì tôi đã không xem xét?
Bạn có thực sự cần một khả năng để cấu hình giữa các triển khai khác nhau? Cho mục đích gì?
Nhanh nhẹn. Nhiều điều chưa biết. Quản lý muốn tiềm năng thay đổi. Chỉ mất sự phụ thuộc vào thế giới bên ngoài. Cũng đang thử nghiệm.
Bạn có cần một cơ chế thời gian chạy, hay chỉ là một cơ chế thời gian biên dịch để chuyển đổi giữa các triển khai khác nhau? Tại sao?
Biên dịch cơ học thời gian có khả năng là đủ. Ngoại trừ thử nghiệm.
mức độ chi tiết nào bạn cần chuyển đổi giữa các lần thực hiện? Tất cả trong một? Mỗi mô-đun (mỗi mô-đun chứa một nhóm các lớp)? Mỗi lớp?
Trong số 1001 chỉ có một lần được chạy qua hệ thống bất kỳ lúc nào. Thay đổi những gì tất cả khách hàng sử dụng cùng một lúc có khả năng tốt. Kiểm soát cá nhân của các phụ thuộc có khả năng quan trọng mặc dù.
Ai cần điều khiển công tắc? Chỉ nhóm của bạn / nhà phát triển của bạn? Một quản trị viên? Mỗi khách hàng tự mình? Hoặc các nhà phát triển bảo trì cho mã của khách hàng? Vì vậy, các cơ học cần phải dễ dàng / mạnh mẽ / dễ dàng như thế nào?
Dev để thử nghiệm. Quản trị viên như phụ thuộc phần cứng bên ngoài thay đổi. Nó cần phải dễ dàng để kiểm tra và cấu hình.
Mục tiêu của chúng tôi là chỉ ra rằng hệ thống có thể được làm lại nhanh chóng và hiện đại hóa.
trường hợp sử dụng thực tế cho việc chuyển đổi thực hiện?
Một là, một số dữ liệu sẽ được cung cấp bởi phần mềm cho đến khi giải pháp phần cứng sẵn sàng.