Tình huống là tôi có một bảng mô hình một thực thể. Thực thể này có một số thuộc tính (được xác định bởi một cột trong bảng). Vấn đề là trong tương lai tôi cần phải thêm các thuộc tính mới hoặc loại bỏ một số thuộc tính. Vấn đề là làm thế nào để mô hình hóa cả hai cơ sở dữ liệu và mã tương ứng (sử dụng C#) để khi một dịp như vậy xuất hiện nó sẽ rất dễ dàng để chỉ "có" một tài sản mới.Generics and database - một vấn đề thiết kế
Ban đầu chỉ có một thuộc tính để tôi có một cột. Tôi đã định nghĩa thuộc tính tương ứng trong lớp, với kiểu và tên thích hợp, sau đó tạo ra các thủ tục được lưu trữ để đọc nó và cập nhật nó. Sau đó, đến tài sản thứ hai, nhanh chóng sao chép-dán, thay đổi tên và loại và một chút của SQL và có nó được. Rõ ràng đây không phải là một mô hình phù hợp trong tương lai. Bởi thời gian này một số bạn có thể đề nghị một ORM (EF hoặc khác) bởi vì điều này sẽ tạo ra các mã SQL và tự động nhưng bây giờ đây không phải là một lựa chọn cho tôi.
Tôi nghĩ chỉ có một thủ tục để đọc một thuộc tính (theo tên thuộc tính) và một thủ tục khác để cập nhật nó (theo tên và giá trị), sau đó một số thủ tục chung để đọc một bó hoặc tất cả thuộc tính cho thực thể trong cùng một câu lệnh . Điều này nghe có vẻ dễ dàng trong C# nếu bạn xem xét sử dụng Generics nhưng cơ sở dữ liệu không biết Generics vì vậy nó không thể có một giải pháp đánh máy mạnh mẽ.
Tôi muốn có giải pháp "được đánh máy mạnh nhất có thể" nên tôi không cần phải thực hiện nhiều quá trình truyền và phân tích cú pháp. Tôi sẽ xác định các thuộc tính có sẵn trong mã, do đó bạn không đi đoán những gì bạn có sẵn và sử dụng các chuỗi ma thuật và những thứ tương tự. Sau đó, quá trình thêm thuộc tính mới vào hệ thống sẽ chỉ có nghĩa là thêm cột mới vào bảng và thêm thuộc tính "định nghĩa" mới vào mã (ví dụ: trong enum).
Tại sao bạn không thể sử dụng EF? Các thiên tài tại Microsoft đã tìm ra và thực hiện rất nhiều công việc cho bạn trong lĩnh vực này. Tôi ghét phải thấy bạn tái phát minh ra bánh xe. – Jay
Vâng, tôi không hiểu tại sao bạn cần phải tránh một ORM. (Ngoài ra, tôi không biết C# generics phải làm gì với bất kỳ điều này) –
Tôi đồng ý nhưng EF ở xa hơn một chút so với con đường liên quan đến kiến trúc nên tôi chưa thể sử dụng nó. – CyberDude