Khi gọi một phương thức chung để lưu trữ một đối tượng, đôi khi cần xử lý một loại cụ thể khác nhau. Tôi biết rằng bạn không thể quá tải dựa trên những ràng buộc, nhưng bất kỳ sự thay thế nào khác dường như đều có những vấn đề riêng.Quá tải các phương pháp chung
public bool Save<T>(T entity) where T : class
{ ... some storage logic ... }
Những gì tôi muốn làm là một cái gì đó như sau:
public bool Save<SpecificClass>(T entity)
{ ... special logic ... }
Trong quá khứ nhóm chúng tôi đã tạo ra 'một lần' phương pháp để tiết kiệm các lớp này như sau:
public bool SaveSpecificClass(SpecificClass sc)
{ ... special logic ... }
Tuy nhiên, nếu bạn không BIẾT chức năng đó tồn tại, và bạn cố gắng sử dụng chung (Lưu) thì bạn có thể gặp phải một loạt các sự cố mà 'một lần' được cho là sửa chữa. Điều này có thể tồi tệ hơn nếu một nhà phát triển mới đến cùng, thấy vấn đề với chung, và quyết định anh ta sẽ sửa chữa nó với chức năng một lần của riêng mình.
Vì vậy, ...
Các tùy chọn để giải quyết vấn đề dường như phổ biến này là gì?
Tôi đã xem xét và sử dụng UnitOfWork và ngay bây giờ dường như là tùy chọn chỉ thực sự giải quyết vấn đề - nhưng có vẻ như tấn công một con ruồi bằng búa tạ.
Không giống như C++, C# không cho phép chuyên môn mẫu –
Các phương thức Save() này có được đặt trong một số lớp trợ giúp nhẹ hoặc trong một số lớp thực thể không? Tôi chỉ nghĩ về thừa kế nhưng điều quan trọng là phải chắc chắn đây là cách đúng đắn bởi vì thừa kế không phải lúc nào cũng được sử dụng đúng cách – sll
Có thể trùng lặp [Làm thế nào để làm chuyên môn hóa mẫu trong C#] (http://stackoverflow.com/questions/600978/how -to-do-template-specialization-in-c-sharp) –