Trình bày lớp ứng dụng VS trong DDD


9

Tôi gặp khó khăn khi vẽ một đường thẳng rõ ràng giữa lớp Trình bày và Ứng dụng trong Thiết kế hướng miền.

Các tập tin Bộ điều khiển, Chế độ xem, Bố cục, Javascript và CSS sẽ đi đâu?

Có phải trong lớp Ứng dụng hoặc Trình bày?

Và nếu chúng đi cùng nhau trong cùng một lớp, cái gì chứa cái kia? Nó có trống không

Câu trả lời:


7

Chỉ vì ai đó đã tạo và đặt tên là "Lớp ứng dụng" và "Lớp trình bày" không có nghĩa là ứng dụng của bạn nên có chúng. Bạn nên tạo các lớp SAU KHI bạn đã tạo số lượng mã đáng kể mà bạn đã nhóm lại với nhau và muốn đặt tên cho nhóm này để liên lạc giữa các nhà phát triển và sự rõ ràng của mã.

Từ điểm DDD. Tầng ứng dụng là mọi thứ không phải là lớp Miền. Trong đó bao gồm logic ứng dụng, trình bày và dịch vụ ứng dụng.


2
Cảm ơn bạn, thực sự bạn đã khiến tôi nhận ra rằng đối với trường hợp của tôi, việc tách Ứng dụng và Trình bày là vô ích. Đơn giản trước!
Matthieu Napoli

Nếu DDD có API REST thay vì UI trong lớp trình bày, API REST sẽ là lớp ứng dụng hoặc lớp trình bày. Bây giờ tôi đang bối rối, vì tôi chắc chắn rằng API REST là một lớp trình bày ..
Dario Granich

8
Trên thực tế, DDD quy định bốn lớp theo thứ tự sau, từ cao hơn đến thấp hơn: Trình bày, Ứng dụng, Tên miền, Cơ sở hạ tầng. Vì vậy, lớp Ứng dụng không bao gồm "trình bày". Ngoài ra, luôn luôn là một ý tưởng tốt để quyết định các lớp trước khi một số lượng mã đáng kể được viết, vì nó không chỉ về việc nhóm mã lại với nhau mà còn về việc hạn chế hướng phụ thuộc thời gian biên dịch.
Rogério

11

Có một sự khác biệt lớn giữa lớp ứng dụng và lớp trình bày từ quan điểm DDD.

Mặc dù DDD tập trung vào cách mô hình hóa miền bằng cách sử dụng các khối và khái niệm xây dựng DDD như bối cảnh bị ràng buộc, ngôn ngữ Ubiquitous và do đó, điều quan trọng là phải xác định rõ ràng và tách biệt các lớp khác nhau trong ứng dụng của bạn.

Kiến trúc đóng một vai trò lớn trong việc thực hiện một ứng dụng DDD thành công. Một kiến ​​trúc nổi tiếng đã đạt được rất nhiều sự cường điệu gần đây là kiến ​​trúc củ hành:

nhập mô tả hình ảnh ở đây

Trong thiết kế này, lớp UI / Presentation và lớp ứng dụng được phân tách rõ ràng. Hợp nhất cả hai lại với nhau giới thiệu sự kết hợp chặt chẽ giữa 2 lớp có mối quan tâm và trách nhiệm riêng biệt rõ ràng.

Lớp trình bày chỉ nên trình bày logic nhà. Tránh các UI thông minh biết quá nhiều. Điều này chủ yếu chứa các Bộ điều khiển và khung nhìn của MVC ngoài CSS, JS, các mẫu, biểu mẫu và mọi thứ liên quan đến các đối tượng phản hồi và yêu cầu.

Các hành động được ban hành thông qua trình bày được ủy quyền cho lớp ứng dụng thông qua các lệnh. Lớp ứng dụng chứa logic ứng dụng. Nó thường ánh xạ đến một trường hợp sử dụng. Nó chứa những gì hệ thống nên làm để đáp ứng trường hợp sử dụng. Một dịch vụ ứng dụng thông thường sẽ yêu cầu một kho lưu trữ trả về một tổng hợp sau đó gọi một hành động trên tổng hợp đó.

Hãy xem dự án mẫu từ IDD của Vaughn Vernon


2
+1. Đây là cách tôi đã thực hiện dự án của mình. Ngay lập tức, tôi đã có thể kiếm tiền bằng cách làm như vậy. Vì tôi đã trừu tượng hóa một lớp ứng dụng, tôi có thể có nhiều lớp trình bày. Ví dụ: api web và trang web của chúng tôi đều sử dụng lớp ứng dụng giúp tiết kiệm rất nhiều thời gian và mã trùng lặp vì ứng dụng web của tôi không phải đóng khung nhắn tin đến và từ api web và nó giữ cho tất cả logic được đồng bộ hóa giữa hai người.
Thời báo

Ở đâu entry pointcomposition rootđược đặt? Tôi luôn nghĩ rằng đó là trách nhiệm của Applicationlớp. Nhưng bây giờ có vẻ như đây là Presentationlớp.
Denis535

2

Domain Driven Design không liên quan gì đến lớp Trình bày hoặc lớp Ứng dụng. DDD là một phương pháp có trọng tâm chính là lớp Miền. Đó là, DDD không áp đặt bất kỳ ràng buộc nào đối với bất kỳ lớp nào khác ngoại trừ lớp Miền và câu hỏi của bạn cũng có thể được hỏi trong bối cảnh của bất kỳ phương pháp nào khác.

Điều đó đang được nói, rất phổ biến để sử dụng kiến ​​trúc bốn lớp cho các ứng dụng DDD. Đây là một ví dụ về một ứng dụng như vậy hiển thị các lớp và mục đích sử dụng của chúng: DDDSample Architecture . Vì vậy, nếu bạn chọn sử dụng kiến ​​trúc này, các khung nhìn và bố cục của bạn sẽ chuyển đến lớp Giao diện và các bộ điều khiển, nếu độc lập với giao diện, sẽ chuyển đến lớp Ứng dụng.

Bạn cũng có thể chọn bất kỳ loại kiến ​​trúc nào khác, như tôi đã nói DDD không áp đặt các ràng buộc. Có nhiều khung MVC ngoài kia có các cấu trúc khác nhau và cũng có thể được sử dụng cho các ứng dụng DDD. Sau đó, tất nhiên, bạn sẽ đặt quan điểm và bố cục của bạn phù hợp.

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.