Tôi đang tìm kiếm một số cuộc thảo luận với bài đăng này.ExpandoObject vào đối tượng tĩnh và ngược lại. Kéo dài hai miền
Tôi đang xem xét kết hợp các tính năng động C# 4.0 vào hệ thống cũ. Ví dụ rõ ràng của tôi là sử dụng Massive của Rob Connery trong một lớp dữ liệu. Nhưng các câu hỏi của tôi sẽ áp dụng ở bất cứ nơi nào một đối tượng động phải tương tác với một đối tượng kinh doanh hiện có, được đánh máy mạnh mẽ sao cho có một ánh xạ giữa các thuộc tính.
Tôi có thể tự động chuyển đổi sang và từ (bê tông) tĩnh vật và các đối tượng expando với hai phương pháp (giản thể) sau:
public static object ToConcrete<T>(System.Dynamic.ExpandoObject dynObject)
{
object instance = Activator.CreateInstance<T>();
var dict = dynObject as IDictionary<string, object>;
PropertyInfo[] targetProperties = instance.GetType().GetProperties();
foreach (PropertyInfo property in targetProperties)
{
object propVal;
if (dict.TryGetValue(property.Name, out propVal))
{
property.SetValue(instance, propVal, null);
}
}
return instance;
}
public static System.Dynamic.ExpandoObject ToExpando(object staticObject)
{
System.Dynamic.ExpandoObject expando = new ExpandoObject();
var dict = expando as IDictionary<string, object>;
PropertyInfo[] properties = staticObject.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
dict[property.Name] = property.GetValue(staticObject, null);
}
return expando;
}
Nhưng bây giờ tôi có một số câu hỏi.
Nỗ lực của tôi để mở rộng năng động và không năng động trong một hệ thống cũ thể hiện quan niệm sai lầm về phía tôi? Có nghĩa là, tôi đang làm việc chống lại ý định năng động? Tôi có tự đặt mình lên cho các vấn đề không?
Liệu việc sử dụng động lực của tôi có bị hạn chế đối với các thành phần chứa hoàn toàn không có ánh xạ giữa các đối tượng động và các đối tượng tĩnh không? Có nghĩa là, thực tiễn không tốt để cố gắng kết hợp hai miền ngôn ngữ? Tôi có tạo ra kiến trúc xấu không? Một anti-pattern?
Trong trường hợp của một thành phần như Massive, nếu chúng ta nói rằng thực hành không tốt để ánh xạ giữa ExpandoObject và các đối tượng được nhập mạnh, thì không có cách nào tôi có thể cắm nó vào hệ thống cũ của mình. mã kế thừa và không có cách thực tế nào tôi có thể, hoặc nên, tái cấu trúc các đối tượng của một cơ sở mã lớn, kế thừa thành các đối tượng động. Có thể động không thể được thêm vào thực tế vào cơ sở mã .Net cũ. Có lẽ nó phải được kết hợp ngay từ đầu, hoặc không phải ở tất cả.
Động lực nào bạn phải sử dụng 'ExpandoObject's? – svick