DDD-Lite có phải là ngôn ngữ mẫu để tiêm phụ thuộc không?


17

Tôi tình cờ nghe được bài nói chuyện của Greg Young 7 Lý do tại sao các dự án DDD thất bại khi anh ấy đề cập đến thứ mà anh ấy gọi là DDD-Lite lúc 7:20.

Tóm tắt, về cơ bản, ông nói rằng một số sử dụng DDD như một ngôn ngữ mẫu (thực thể, kho lưu trữ, đối tượng giá trị, dịch vụ, v.v.) mà không làm bất cứ điều gì khác liên quan đến DDD. Ông yêu cầu 60% hoặc nhiều hơn các mô hình miền trong .Net là DDD-Lite. Anh ấy nghĩ rằng DDD-Lite về cơ bản đang xây dựng một ngôn ngữ xung quanh việc tiêm phụ thuộc, điều mà bạn không thực sự cần phải làm. Ông nói hoặc làm DDD hoàn toàn hoặc làm một cái gì đó đơn giản hơn. Mặt khác, ông tuyên bố một người đang đưa ra tất cả các công việc này để xây dựng trừu tượng tốt, nhưng không có bất kỳ lợi ích thực sự.

Tôi phải thừa nhận rằng tôi không biết nhiều về DDD như tôi muốn và chưa thử sử dụng nó. Tôi cũng chưa đọc cuốn sách của Eric Evan. Tôi quan tâm nhiều hơn đến Dependency Injection và nhiều, rất nhiều sách và blog về chủ đề này sử dụng các thuật ngữ và khái niệm tham khảo từ cuốn sách DDD của Eric Evans. Đây là nơi tôi đã tiếp xúc với các khái niệm DDD. Những cuốn sách tôi đã đọc làm điều này bao gồm:

  • Phụ thuộc tiêm trong .NET
  • Microsoft .Net: Kiến trúc ứng dụng cho doanh nghiệp
  • Phát triển ứng dụng Brownfield trong .NET

Nếu một người muốn thực hiện Dependency Injection, các lựa chọn thay thế đơn giản hơn so với thực hiện "DDD-Lite là gì?" Nghe có vẻ như tôi xây dựng các bản tóm tắt tốt khá hữu ích cho dù người ta có sử dụng các khái niệm từ DDD theo cách "DDD-Lite" hay không. (xem bài đăng trên blog của Mark Seemann: Giao diện không phải là trừu tượngHướng tới trừu tượng tốt hơn ). Tôi có một thời gian khó tin rằng tất cả mọi người thực hiện Dependency Injection cũng sẽ làm (hoặc cần phải làm) DDD đầy đủ. Có phải tôi đã hiểu nhầm lý lẽ của Greg Young về DDD-Lite?

Câu trả lời:


15

Dependency Injection và DDD là hai khái niệm rời rạc. Thực hiện tiêm phụ thuộc không yêu cầu thực hiện DDD cũng như DDD không yêu cầu tiêm phụ thuộc.

Rất nhiều dự án DDD thất bại vì họ chọn các mẫu nhưng bỏ qua quá trình đằng sau DDD. Họ không dành thời gian để trích xuất các quy tắc kinh doanh. Họ không tập trung vào mô hình miền và trừu tượng hóa cẩn thận. Họ không thiết lập một ngôn ngữ phổ biến.

Tóm lại: Tôi đoán đó là một sự hiểu lầm


4
+1 Các mô hình được mô tả trong cuốn sách của Evans vẫn có giá trị trong bối cảnh rộng lớn hơn nhiều - miễn là người ta hiểu rằng áp dụng chúng trong sự cô lập không làm cho nó bị DDD.
Mark Seemann

1
Có tôi nhận ra DI! = DDD. @MarkSeemann, vì vậy lập luận của Greg dường như là mọi người đang nói rằng họ đang làm DDD khi họ không làm. Được rồi tôi hiểu rồi. Nhưng ông cũng lập luận rằng việc sử dụng các khái niệm trừu tượng như được tìm thấy trong DDD (tập hợp, kho lưu trữ, thực thể miền, đối tượng giá trị, dịch vụ, v.v.) là không cần thiết nếu chúng được sử dụng chỉ để hỗ trợ kiến ​​trúc được chèn phụ thuộc. Đó là phần tôi không nhận được (có gì sai với nó). Có lẽ đó là lý lẽ của người rơm , vì sử dụng những thứ như vậy không chỉ để "xây dựng ngôn ngữ xung quanh việc tiêm phụ thuộc".
Matt

3
Greg đúng một phần: các mẫu đặc biệt trong DDD không liên quan đặc biệt đến DI. Tuy nhiên, trong cuốn sách của mình, tôi đã chọn một số thuật ngữ, đặc biệt là định nghĩa của Thực thể so với Giá trị đối tượng so với Dịch vụ vì điều quan trọng là phải hiểu những gì cần tiêm ở đâu. Tuy nhiên, cả thuật ngữ này cũng như các mẫu khác như Kho lưu trữ và Nhà máy đều cũ hơn nhiều so với sách DDD, vì vậy nói rằng những thứ đó là không cần thiết bên ngoài DDD nghe có vẻ không chính xác đối với tôi. Nó có thể phụ thuộc vào cách bạn thực sự xác định DDD.
Mark Seemann

2

Tôi cá là Greg đang đề cập đến ứng dụng đơn giản nếu một tập hợp con của các mẫu Thiết kế hướng theo miền thay vì toàn bộ cách tiếp cận DDD. Thuật ngữ DDD-Lite ngầm ám chỉ đến cuốn sách http://www.infoq.com/minibooks/domain-driven-design-quickly đã từng rất phổ biến trong số những người mới sử dụng DDD, nhưng lại bỏ lỡ toàn bộ hình ảnh bằng cách chỉ tập trung vào mô hình thiết kế mô hình địa phương.

Mặc dù Dependency Injection được coi là một điều tốt, nhưng không có mối tương quan chặt chẽ giữa DDD và DI.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.