2009-09-17 34 views
10

Dự án hiện tại của tôi đang tận dụng Spring và kiến ​​trúc sư của chúng tôi đã quyết định cho phép Spring quản lý các dịch vụ, kho lưu trữ và đối tượng Factory, nhưng KHÔNG đối tượng miền. Chúng tôi đang theo dõi chặt chẽ thiết kế theo miền. Lý do đằng sau không sử dụng mùa xuân cho các đối tượng miền chủ yếu là mùa xuân chỉ cho phép tiêm phụ thuộc tĩnh. Những gì tôi có nghĩa là bởi tiêm phụ thuộc tĩnh là phụ thuộc được quy định bên trong cấu hình xml và họ nhận được "đông lạnh". Tôi có thể sai, nhưng hiểu biết hiện tại của tôi là mặc dù tên miền của tôi chỉ tận dụng giao diện để giao tiếp với các đối tượng, nhưng cấu hình xml của mùa xuân buộc tôi phải xác định sự phụ thuộc cụ thể. do đó tất cả các phụ thuộc cụ thể phải được giải quyết tại thời điểm triển khai. Đôi khi, điều này là không khả thi. Hầu hết các usecases của chúng tôi dựa trên việc tiêm một loại cụ thể dựa trên dữ liệu thời gian chạy hoặc một tin nhắn nhận được từ một người dùng cuối.Thời gian chạy phụ thuộc tiêm với Spring

Hầu hết thiết kế của chúng tôi đều tuân theo mẫu lệnh. do đó, khi chúng tôi nhận được một lệnh, chúng tôi muốn xây dựng mô hình miền của chúng tôi và dựa trên dữ liệu nhận được từ một lệnh, chúng tôi sẽ đưa các loại tập hợp cụ thể vào đối tượng gốc tổng thể của chúng tôi. Do đó, do thiếu khả năng của mùa xuân để xây dựng một mô hình miền dựa trên dữ liệu thời gian chạy, chúng tôi buộc phải sử dụng các phương pháp nhà máy tĩnh, các nhà xây dựng và các mẫu Nhà máy.

Ai đó có thể vui lòng thông báo nếu mùa xuân gặp sự cố với kịch bản trên không?

Tôi có thể sử dụng AOP để tiêm phụ thuộc, nhưng sau đó tôi không tận dụng cơ sở hạ tầng của mùa xuân.

Trả lời

2

Phun phụ thuộc của mùa xuân (và tiêm phụ thuộc nói chung) về cơ bản để kết nối với nhau Dịch vụ, Kho lưu trữ và Nhà máy, v.v. Nó không phải trực tiếp xử lý những thứ cần phải được thực hiện tự động theo lệnh, v.v. hầu hết các công cụ với các đối tượng miền. Thay vào đó, nó cung cấp khả năng kiểm soát cách những thứ đó được thực hiện bằng cách cho phép bạn nối dây trong các đối tượng bạn muốn sử dụng để thực hiện chúng.

+2

Đó là bán Spring một chút ngắn. Nó có khả năng của những thứ này, nó chỉ mất nhiều nỗ lực hơn một chút. – skaffman

10

Tôi đề nghị bạn đọc phần trong tài liệu Spring liên quan đến Using AspectJ to dependency inject domain objects with Spring. Điều thú vị là bạn nói "Tôi có thể sử dụng AOP để tiêm phụ thuộc, nhưng sau đó tôi không tận dụng cơ sở hạ tầng của mùa xuân", xem xét AOP là một phần cốt lõi cơ sở hạ tầng của Spring. Cả hai đi rất tốt với nhau.

Liên kết ở trên cho phép bạn có các phụ thuộc tiêm AOP của Spring vào các đối tượng miền đang tạo mà không tham chiếu trực tiếp đến cơ sở hạ tầng Spring (ví dụ: sử dụng toán tử new). Nó rất thông minh, nhưng yêu cầu một số lớp cấp dữ liệu ở mức độ sâu.

+0

+1. Tùy thuộc vào sự phức tạp của kịch bản cụ thể này, tuy nhiên, nó có thể khả thi (và dễ dàng hơn) để sử dụng FactoryBeans thay vì AOP. – ChssPly76

+0

Tôi đồng ý, tôi thường không bận tâm. Tuy nhiên, nếu ứng dụng là DDD lõi cứng, thì các nhà máy có thể không được mong muốn. – skaffman

5

Tính năng chèn/cấu hình phụ thuộc của Spring chỉ có nghĩa là cấu hình hạ tầng kỹ thuật cấp thấp, chẳng hạn như nguồn dữ liệu, quản lý giao dịch, truy cập từ xa, điểm gắn kết servlet và vv.

Bạn sử dụng lò xo để định tuyến giữa các API kỹ thuật và dịch vụ của bạn và bên trong các dịch vụ đó bạn chỉ cần viết mã Java thông thường. Việc giữ cho Spring tránh xa các mô hình miền và triển khai dịch vụ của bạn là một điều tốt. Để bắt đầu, bạn không muốn ràng buộc logic nghiệp vụ của ứng dụng của bạn với một khung công tác hoặc để các vấn đề kỹ thuật cấp thấp "rò rỉ" vào mô hình miền ứng dụng của bạn. Mã Java dễ dàng hơn nhiều trong việc sửa đổi trong IDE so với cấu hình XML của mùa xuân, vì vậy việc giữ logic nghiệp vụ trong java cho phép bạn cung cấp các tính năng mới nhanh hơn và duy trì ứng dụng dễ dàng hơn. Java có nhiều ý nghĩa hơn so với định dạng XML của mùa xuân để bạn có thể mô tả rõ ràng hơn các khái niệm miền nếu bạn dính vào Java thuần túy.

+0

chỉ vì Spring CÓ THỂ làm được rất nhiều điều không có nghĩa là câu trả lời đúng là làm cho ứng dụng của bạn sử dụng Spring cho tất cả những thứ đó. – M1EK

+0

Mặc dù điều này đúng với mô hình miền thiếu máu tiêu chuẩn, IMO vẫn ổn khi thực hiện những việc này trong thiết kế được điều khiển miền (mà OP cho biết anh ta đang sử dụng). –

+0

Câu trả lời này áp dụng rất nhiều (có thể nhiều hơn) cho các mô hình miền không thiếu máu có thiết kế hướng đối tượng sạch và thực hiện logic miền như các phương thức trên các đối tượng mô hình miền. Và các mô hình miền thiếu máu không phải là tiêu chuẩn. Họ là một cái gì đó để được * tránh *. – Nat

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