7

Khi viết mã chúng tôi sẽ có thể xác định hai nhóm lớn của các đối tượng:Dependency Injection, tiêm một đối tượng "tiêm" (dịch vụ) vào một newable (thực thể)

  • thuốc chích
  • Newables

http://www.loosecouplings.com/2011/01/how-to-write-testable-code-overview.html

http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/

  • đối tượng tiêm là những vật thể (dịch vụ) mà vạch trần phụ thuộc vào nhà thầu của họ những phụ thuộc thường được giải quyết bằng một container IoC, các đối tượng này chỉ có thể yêu cầu thuốc chích khác trong nhà thầu của họ

  • Newable là đối tượng mà còn phơi bày phụ thuộc vào nhà thầu của họ nhưng newables chỉ có thể yêu cầu các đối tượng khác newable (Entities, Value Objects), một đặc tính của các đối tượng newable là họ không nên giữ một tham chiếu đến một đối tượng tiêm

nhưng khi viết mã, chúng ta thường cần phải "tiêm" một serv Tôi đã nghĩ rằng có thể phơi bày một sự phụ thuộc dịch vụ trong một đối tượng mới có thể làm tốt hơn ở cấp độ phương pháp nhưng điều này nghe có vẻ như rất nhiều việc phải làm .... chỉ là suy nghĩ về việc giải quyết sự phụ thuộc mỗi khi một phương pháp được gọi là .... tốt này có mùi giống như chúng ta sẽ phải sử dụng dịch vụ Locator chống mẫu

Con đường tôi đã giải quyết này là:

  • Tạo một giao diện với một phương thức để lộ sự phụ thuộc (dịch vụ sẽ được sử dụng theo phương pháp này)

  • Tạo một phương pháp mở rộng cho giao diện và đặt nó trong một không gian tên khác nhau, có lẽ trong lắp ráp khác, và chỉ quấn cuộc gọi đến phương pháp ban đầu giải quyết phụ thuộc sử dụng định vị dịch vụ

Làm chúng ta này có sự tách biệt nhất quán giữa các đối tượng mới và có thể tiêm với khả năng sử dụng dịch vụ trong các sản phẩm mới của chúng tôi dễ dàng

  • Bạn nghĩ sao?
  • Sử dụng bộ định vị dịch vụ trong một phương pháp mở rộng được coi là thực tế không tốt?
  • Bạn sẽ kiểm tra đơn vị cuộc gọi phương thức mở rộng như thế nào?
+1

Liên quan chặt chẽ: http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-objec – Steven

+0

Thx liên kết này thực sự hữu ích – Jupaol

Trả lời

2

Nhưng khi viết mã, chúng ta thường cần phải "bơm" một dịch vụ (tiêm) vào một Entity (newable)

Đây không phải là đựng pin- nếu bạn tìm thấy sự cần thiết phải làm điều này sau đó có một số chức năng tồn tại trong thực thể mà phải ở trong một dịch vụ.

Giả sử bạn mới có thể là ShoppingCart và nội dung được tiêm của bạn là cơ sở dữ liệu repository. Bạn muốn có thể thực hiện việc này:

// somehow cart already got the repository 
cart.save(); 

Vâng, bạn đang làm sai. Thay vào đó bạn cần phải chuyển đổi những thứ xung quanh và làm:

respository.save(cart); 

Nếu bạn có thể cung cấp một tình huống khi bạn cảm thấy cần phải làm điều này, chúng ta có thể thảo luận về chi tiết cụ thể của tình huống đó.

Các vấn đề liên quan