Khi lập kế hoạch kiến trúc cho một ứng dụng web MVC quy mô lớn, làm thế nào để bạn thực hiện các lớp để được tách rời càng tốt và dễ kiểm tra? (về cơ bản tuân theo các thực tiễn tốt nhất) Giả sử tôi đang sử dụng mã trước tiên khi truy cập dữ liệu của mình.
Tôi đấu tranh với những gì để định nghĩa "logic kinh doanh" là và cách nó có nghĩa là tương tác với lớp dữ liệu. Lấy một ứng dụng bán xe làm ví dụ, logic kinh doanh có phải là các lớp thực hiện các nhiệm vụ như tính toán biên độ thuế cho các phương tiện nhất định, so sánh số liệu thống kê dặm trên mỗi gallon vv? Đối với các thực thể kinh doanh (ví dụ: Ô tô, Vans, Xe máy) tôi sẽ đặt chúng trong lớp dữ liệu cùng với DataContext
lớp của tôi .
Ngoài ra, điều gì sẽ tạo nên logic ứng dụng trái ngược với kinh doanh - Tôi đoán những thứ như xác nhận đầu vào của phiên / người dùng?
Vì vậy, ví dụ, bộ điều khiển ô tô có thể trả về kết quả hành động / chế độ xem liệt kê mười ô tô hàng đầu được lọc theo loại và mpg tốt nhất. Vì vậy, giả sử tôi đã ICarRepository
tiêm 'carRepo' vào bộ điều khiển của mình (sử dụng mẫu kho / DI), tôi lọc các ô tô của mình từ một tham số phương thức hành động, vdvar cars = carRepo.getCarsByType("hatchback");
Vì vậy, tôi đã giữ kiến thức truy cập dữ liệu ra khỏi bộ điều khiển của mình bằng kho lưu trữ, bây giờ để giữ logic nghiệp vụ ra khỏi bộ điều khiển bằng mô hình miền - var result = new MpgCalculator (ô tô); - Giả sử tôi cần lớp máy tính vì nó cần thực hiện logic bổ sung để tính toán hiệu quả nhiên liệu tốt nhất, hơn là chỉ tải / lọc các thực thể từ DB. Vì vậy, bây giờ tôi có một bộ dữ liệu cho chế độ xem của mình để hiển thị sử dụng kho lưu trữ để truy xuất từ lớp truy cập dữ liệu và đối tượng cụ thể của miền để xử lý và thực hiện các tác vụ liên quan đến kinh doanh trên dữ liệu đó.
Tôi có đang phạm sai lầm ở đây không? chúng ta vẫn cần sử dụng mẫu kho lưu trữ hay tôi chỉ có thể viết mã trên một giao diện để tách riêng ORM và kiểm tra? Trong chủ đề này, vì dbcontext truy cập dữ liệu cụ thể của tôi nằm trong lớp dữ liệu, nên các định nghĩa giao diện sẽ đi vào lớp miền / doanh nghiệp có nghĩa là nếu công nghệ truy cập dữ liệu bị thay đổi, các lớp khác của tôi không bị ảnh hưởng?
Từ những gì tôi đã nghiên cứu cho đến nay cấu trúc của tôi trông như thế này:
Ứng dụng Internet MVC -> Dự án internet tiêu chuẩn - các mô hình ở đây là ViewModels
Lớp Miền / Doanh nghiệp -> các lớp / mô hình cụ thể cho doanh nghiệp mà bộ điều khiển có thể sử dụng để xử lý các thực thể miền từ lớp dữ liệu trước khi chuyển sang các khung nhìn liên quan
Kho lưu trữ trừu tượng cần thiết? -> Tôi nghe nhiều tranh luận về vấn đề này, đặc biệt là khi sử dụng ORM
Lớp dữ liệu -> Các lớp thực thể (Ô tô, Van, Xe máy), DbContext - Lớp công nghệ truy cập dữ liệu cụ thể