Tôi đang cố gắng viết một ứng dụng nhỏ có ranh giới rất nghiêm ngặt giữa BLL và DAL và bây giờ tự hỏi cách tốt nhất để truyền dữ liệu (Domain Transfer Objects) giữa các lớp.Làm thế nào để sử dụng DTO giữa UI, BLL, DAL
Tôi đã triển khai một số lớp trong Cấp miền (thư viện lớp) được truy cập bởi cả BLL và DAL. Các lớp này về cơ bản chỉ chứa các thành phần thuộc tính/dữ liệu và hiện đang phản ánh dữ liệu DAL. Ví dụ:
class CustomerData
{
// some data fields
}
Sau đó, tôi thực hiện một số lớp học trong BLL như:
class Customer : CustomerData
{
// Some methods
}
Trong Dal của tôi tôi nhận được hồ sơ khách hàng từ cơ sở dữ liệu thông qua LINQ-to-SQL. sau đó tôi lập bản đồ các đối tượng LINQ to đối tượng tên miền của tôi bằng cách:
CustomerData.field = LinqObject.field
// Etc
suy nghĩ của tôi là như vậy, mà tôi bây giờ là một ví dụ CustomerData từ Dal của tôi để BLL khi được yêu cầu (và rằng tôi nên vượt qua một trường hợp khách hàng đến giao diện người dùng của tôi).
Trong BLL của tôi, do đó tôi sẽ nhận được một cá thể CustomerData, nhưng bây giờ tôi muốn làm cho một Khách hàng ra khỏi nó.
Câu hỏi:
- Tôi có phải trong BLL của tôi bây giờ tạo một đối tượng khách hàng và LẠI sao chép tất cả các thành viên lĩnh vực?
Khách hàng c = Khách hàng mới; c.field = CustomerData.field; - Làm cách nào để tạo Khách hàng từ CustomerData mà không có các bước sao chép trường?
- Tôi có nên thay vì sử dụng bố cục không?
lớp Khách hàng { Dữ liệu khách hàngData; } - Có cách nào hiệu quả hơn (ít mã hóa hơn) để thực hiện việc này trong bố cục hiện tại của tôi không?
- Có cách nào tốt hơn để thực hiện việc này không?
- Mọi nhận xét nói chung?
Cảm ơn!
Câu trả lời của Yorah +8 cho số 1. Khỉ mã hóa như vậy có thể chỉ có vẻ giống như một nỗi đau cho bạn. Cuối cùng nó thực sự là điều sai trái để làm bởi vì mức độ mà nó làm tăng lỗi và làm cho những điều như một nỗi đau trong một $$. Hãy thử ValuInjector - nhiều người thích nó tốt hơn AutoMapper, nhẹ hơn nhiều. Bên cạnh việc tái sử dụng ánh xạ của bạn. – FastAl