Câu hỏi này có thể đã được đăng trước đó, nhưng tôi không thể tìm thấy nó.Giao diện hoặc câu lệnh chuyển đổi, tìm đúng mẫu
Tôi đã viết loại điều này từ rất lâu, tôi ngồi xuống để viết một cái gì đó mới và chỉ cần bắt đầu gõ như thể đó là hình mẫu của riêng tôi. Một dự án đã xuất hiện gần đây và tôi thấy mình đang nhìn vào mã của riêng tôi và bắt đầu nghĩ nó trông như thế nào.
BackgroundInfoIfYouCare
Trong thư viện cụ thể này, tôi cần gửi email cho người dùng. Cho đến nay có 13 email đóng hộp.
Mỗi email có mẫu riêng của nó (Tôi đang sử dụng trình phân tích cú pháp Razor, vì vậy các mẫu được viết bằng cshtml). Mỗi mẫu email có một Tên khóa của chuỗi. Mỗi email có truy vấn EF4 riêng để trả về mô hình dựa trên thực thể "thành viên" và tất cả dữ liệu có liên quan.
Tôi có một lớp chấp nhận một chuỗi là Khóa tên mẫu email.
Phương pháp sẽ chạy truy vấn thích hợp và lấy lại danh sách, lấy mẫu email.
Danh sách và mẫu được chuyển đến trình phân tích cú pháp để hợp nhất từng thành viên với mẫu và trả về một danh sách email.
EndOfBackgroundInfoIfYouCare
Vì vậy, câu hỏi thực sự ... cách tốt nhất để làm điều này là gì?
Một cách là chỉ cần sử dụng một công tắc
public List<Membership> Execute(string TemplateKey) {
switch (TemplateKey)
{
case "SomethingExpired":
QueryResult = new SomethingExpiredEmailQuery().ExecuteQuery();
break;
case "SomethingExpireIn30":
QueryResult = new SomethingExpireIn30EmailQuery().ExecuteQuery();
break;
case "FirstTimeLoginThanks":
QueryResult = new FirstTimeLoginThanksEmailQuery().ExecuteQuery();
break;
case "SecurityTraining":
QueryResult = new SecurityTrainingEmailQuery().ExecuteQuery();
break;
case ETC ETC ETC...
}
Một cách khác là sử dụng một giao diện
IEmailQuery
void ExecuteQuery()
Nhưng nếu tôi sử dụng một giao diện tôi vẫn sẽ cần phải khởi tạo lớp Query. Nó không lưu mã và không làm cho mã dễ bảo trì hơn.
Với sự phản chiếu tôi có thể làm một cái gì đó như đặt tên tất cả các truy vấn Email bằng mẫu: Khóa mẫu email của SecurityTraining có tên truy vấn SecurityTrainingEmailQuery và tôi có thể sử dụng phản chiếu để khởi tạo và gọi phương thức ExecuteQuery.
Không sử dụng sự phản chiếu, không có cách nào để làm sạch dây dẫn này hơn?
Vâng, câu trả lời của Jon là tương tự, chỉ có cách nâng cao hơn sau đó tôi tôi sợ ;-) – Lindan