Vì câu hỏi này có vẻ khá chủ quan, tôi sẽ đăng nó ở đây.
Hãy nói rằng bạn đang viết phiên bản của riêng bạn Stackoverflow sử dụng ASP.NET MVC, vì vậy có những lớp học như Question
, Answer
, User
, vv Kể từ khi bạn lười biếng, bạn quyết định sử dụng khuôn khổ thực thể. Vì vậy, tất cả các lớp được đề cập ở trên có thuộc tính điều hướng: Question
biết Answer
s của nó , Answer
biết User
ai đã đăng nó, v.v.
Bạn đã đọc rất nhiều sách của Martin Fowler, vì vậy chắc chắn bạn sẽ có một lớp dịch vụ để thực hiện tất cả logic kinh doanh ở đó. Bạn sẽ chỉ sử dụng ASP.NET MVC cho giao diện người dùng và chức năng liên quan đến logic ứng dụng.
Có 2 câu hỏi:
- Bạn sẽ trực tiếp tiếp xúc với đối tượng
Question
,Answer
và những người khác đến điều khiển? - Bạn sẽ làm tương tự cho quan điểm?
Về cơ bản, tôi sẽ không cung cấp API REST cho ứng dụng của mình, tôi cũng không quá bảo thủ khi chỉ có bất kỳ nỗi sợ hãi nào như "này, MY VIEW nhận thức được điều đó Question
là gì , tôi không biết nó có tệ hay không, Tôi chỉ không thích nó! ".
Tôi đặc biệt tò mò về trường hợp khi Question
lớp có một lĩnh vực như TimePosted
và bạn ràng buộc của bạn PostNewQuestion
nhằm lớp đó. Tôi biết rằng trong trường hợp tôi không ràng buộc trường đó với bất kỳ điều khiển nào trên trang, nó sẽ không được đăng, vì vậy tôi sẽ đặt trường đó thành null
khi tôi có đối tượng ở phía trình điều khiển của mình. Nó được coi là tốt hay là ý tưởng tồi? 2 cách tiếp cận ngược lại tôi nghĩ là "sử dụng DTOs / ViewModels ở mọi nơi" và "wtf, ít lớp hơn luôn tốt hơn!"
Bạn nghĩ gì là một cách tiếp cận đúng ? (Tôi biết không có câu trả lời trực tiếp, vì vậy, câu hỏi thực tế là "người ta nên cân nhắc điều gì để quyết định xem có sử dụng DTOs / ViewModels / Bất cứ điều gì khác tốt cho kiến trúc ứng dụng của nó không?")
Ngoài ra, xin lưu ý rằng chúng tôi đang xem xét một bản sao rất đơn giản của Stackoverflow, vì vậy:
- Đây là một dự án chỉ dành cho web (chúng tôi sẽ không tiết lộ API REST hoặc bất cứ điều gì khác)
- Có người dùng, câu hỏi, câu trả lời, thẻ và chức năng tìm kiếm (không có logic kinh doanh nổi bật)
- Có khoảng 100 người dùng hoạt động mỗi ngày (không yêu cầu hiệu suất đặc biệt)
- Mã phải dễ đọc và không có bất ngờ hoặc địa điểm nào được quan tâm đặc biệt trong trường hợp thành viên mới gia nhập nhóm nhà phát triển.
Bạn cũng có thể bày tỏ suy nghĩ của mình trong trường hợp bất kỳ 3 điểm đầu tiên nào bị thay đổi - "khách hàng hiện muốn dịch vụ của chúng tôi cho phép 10000 người dùng đồng thời" hoặc "chúng tôi hiện chỉ cần cho phép mỗi người dùng đăng một lần trong 15 phút", v.v.
Cảm ơn!