2009-02-27 29 views
8

Tôi vừa thừa hưởng một ứng dụng Java và khi kiểm tra mã, tôi thấy IMHO là một sự khốn khổ của khung công tác Spring. Bạn thấy đấy, đội Java dường như có ác cảm với các giao diện, vì vậy chúng tôi kết thúc với những câu như này:Mùa xuân là nhà máy được tôn vinh; điều này có chấp nhận được không?

@Autowired 
private SomeConcreteFinalClass _myField; 

Không có cấu hình Spring, không đậu được xác định, không có cơ hội mà tôi có thể kiểm tra các đối tượng chứa trong sự cô lập . Đây thực chất là một nhà máy dựa trên chú thích với chi phí của Spring.

Tôi có nằm ngoài tuyến không, hoặc liệu đây có giống như sử dụng súng voi để tiêu diệt ruồi không? Tôi chỉ cần có một kiểm tra thực tế từ tất cả mọi người khác trong nhóm nghĩ rằng điều này là hoàn toàn chấp nhận được.

Chỉnh sửa Trong nhiều trường hợp, các nhà máy được chú thích này sẽ được hưởng lợi vô cùng từ thử nghiệm riêng biệt. Nhóm nghiên cứu cũng cau mày khi thử nghiệm.

Không có gì bí ẩn ở đây, tôi hy vọng. Nếu tôi có một lớp cụ thể, đó không phải là phía sau một giao diện, và không có bean Spring tương ứng để "thiết lập" đối tượng, thì đó là một nhà máy được tôn vinh có thể được triển khai với 10 dòng mã.

Mùa xuân không được sử dụng theo bất kỳ cách nào khác trong hệ thống; đây chính là nó.

Mục tiêu của tôi ngay bây giờ:

  • Viện chính sách thử nghiệm
  • Giáo dục đội trên những ưu điểm của phần ly
  • Move các lĩnh vực này Autowired đằng sau giao diện

tôi đoán câu hỏi cuối cùng là: có bất kỳ lợi ích nào để giữ cho các trường này được Tự động hóa nếu chúng ta không testin g hoặc theo bất kỳ cách nào khác bằng cách sử dụng khung công tác. Tôi cũng chỉ cần new đối tượng nếu phụ thuộc là không thay đổi.

+0

Tất nhiên: súng voi là vũ khí được lựa chọn để tiêu diệt ruồi đột biến kích thước voi –

Trả lời

4

Tôi đồng ý với bạn rằng đây là sự lạm dụng những gì Spring có thể làm (trái ngược với những gì Spring NÊN làm). Là người thiết kế ứng dụng theo cách này? Thật thú vị khi nghe lời biện minh của họ để xây dựng một ứng dụng theo cách này.

1

Tôi không thể nói rằng tôi hoàn toàn thấy điểm. Sau khi tất cả, nó có thể sẽ là một vài dòng mã để dây lên hệ thống trong một phương pháp main và sau đó bạn sẽ không có sự phụ thuộc vào mùa xuân.

Và có, tôi đồng ý rằng không tiêm giao diện là một chút vô nghĩa. Tôi có xu hướng không thực hiện một số lượng lớn thử nghiệm Đơn vị nhưng, mặc dù vậy, tôi sẽ mất mọi tính linh hoạt trong việc thay đổi triển khai sau này (hoặc có triển khai các lớp khác nhau trong các triển khai khác nhau - ví dụ: kiểm thử tích hợp).

4

Nó chắc chắn hạn chế những gì có thể, nhưng nó không phải là một sự lãng phí tổng thời gian.

Vì loại được đề cập là final, bạn không thể mô phỏng dễ dàng khi thử nghiệm riêng lẻ.

Tuy nhiên, các trường hợp thuộc loại đó vẫn có thể định cấu hình cao thông qua các thuộc tính của chúng.Sử dụng Spring để tiêm một cá thể được cấu hình đúng tại thời gian chạy đơn giản hóa lớp chứa rất nhiều. Lớp học có thể tập trung vào trách nhiệm của mình, dựa vào mùa xuân để cung cấp cho các cộng tác viên mà họ cần.

Giao diện khi sử dụng; điều này có thể là một phản ứng với điều đó. Tôi nghĩ rằng bắt đầu với các lớp cụ thể, cuối cùng cho nhiều loại, sau đó sử dụng các công cụ tái cấu trúc sẵn sàng để trích xuất các giao diện sau đó, khi một nhu cầu cụ thể được xác định, là một vị trí có thể bảo vệ trong nhiều ngữ cảnh.

+0

Nếu loại cuối cùng, có thể có giao diện để cô lập tính mở rộng và khả năng thử nghiệm. Trong nhiều trường hợp, các nhà máy được chú thích này xuất hiện trong các lớp xử lý phức tạp có thể hưởng lợi vô cùng từ thử nghiệm riêng biệt. Họ cũng cau mày khi thử nghiệm. –

+0

+1 cho đối số phản đối hợp lý. –

+0

"Nhăn trên thử nghiệm", eh? Tôi sợ rằng tôi không thể nói chuyện phòng thủ của họ ở đó! ;) – erickson

1

Tôi xin lỗi, nhưng tôi không thể biết đây có phải là lạm dụng Spring dựa trên hai dòng mã mà bạn đã đăng và tôi nghi ngờ rằng bất kỳ ai khác cũng có thể.

Nếu bạn đang phàn nàn về thực tế là loại tĩnh của đối tượng đó không phải là giao diện bạn có thể có một điểm. Nhưng thậm chí khó mà nói được từ một dòng mã. Đó thực sự là một lớp dịch vụ hoặc kho lưu trữ không có giao diện? Nếu vậy, tôi đồng ý. Nếu không, tôi cần biết thêm.

Nếu nhóm của bạn cau mày khi thử nghiệm, điều đó quá tệ. Tôi đã nghĩ rằng một trong những lý do cho mùa xuân sẽ là để tạo điều kiện thử nghiệm.

Bạn có thể có một điểm, nhưng tôi không thể chắc chắn từ câu hỏi ban đầu của bạn. Có thể bạn có thể chỉnh sửa chi tiết hơn.

Nếu đây là một ví dụ về cách bạn giao tiếp với đồng đội của bạn, có lẽ họ sẽ được biện minh nếu họ nói rằng bạn đã không giải thích cho mình rất tốt. Hãy chắc chắn rằng bạn không chỉ ra cho tự aggrandization ở đây.

+0

Cảm ơn phản hồi của bạn. Tôi thường cung cấp đủ chi tiết để các chuyên gia trong khu vực có thể ghép chúng lại với nhau hoặc yêu cầu thêm chi tiết. Các jab về kỹ năng giao tiếp của tôi là một chút uncalled cho, nhưng 1 để làm nổi bật sự cần thiết phải biết thêm chi tiết. –

+1

"Tôi thường cung cấp đủ chi tiết" - không phải lúc này. Và chỉ có các đồng đội của bạn mới có thể cung cấp cho bạn phản hồi có ý nghĩa về việc liệu kỹ năng giao tiếp của bạn có đủ hay không. Lo lắng ít hơn về những gì tôi nghĩ và nhiều hơn nữa về họ. Tôi muốn đề nghị bạn nên xem xét thay vì giả định rằng họ sai. – duffymo

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