我在嘗試使我的體系結構具有靈活性時面臨類解決問題。爲簡單起見,考慮下面的例子:C#OOP體系結構問題
我有四個層次:用戶界面,BL,普通和DAL
我有我的BL層基類,定義如下:
public class User
{
private UserDTO _d;
public User()
{
_d = new UserDTO();
}
public User(UserDTO d)
{
_d = new UserDTO(d);
}
public UserDTO D
{
get { return _d; }
set { _d = value; }
}
//static method (I cannot make it non-static due to some reasons)
public static User GetUser()
{
User user = new User(Provider.DAL.GetUser());
return user;
}
}
該DTO定義爲:
public class UserDTO
{
public int ID;
public UserDTO()
{
}
public UserDTO(UserDTO source)
{
ID = source.ID;
}
}
我DAL被定義爲(它返回一個DTO不是一個業務對象):
public static UserDTO GetUser()
{
UserDTO dto = new UserDTO();
dto.ID = 99;
return dto;
}
現在,我想「擴展」我的代碼,這樣我可以在我的用戶表中有一個字段:名稱。所以,我創建一個派生DTO類爲:
public class MyUserDTO : UserDTO
{
public string Name;
public MyUserDTO()
{
}
public MyUserDTO(MyUserDTO source)
{
Name = source.Name; //new field
base.ID = source.ID;
}
}
然後,我創建了一個派生用戶類爲:
public class MyUser : User
{
public MyUser()
{
this.D = new MyUserDTO();
}
}
我創建這個方法我自己的自定義DAL提供商:
public static UserDTO GetUser()
{
UserDTO dto = new MyUserDTO();
dto.ID = 99;
((MyUserDTO)dto).Name = "New Provider Name";
return dto;
}
現在,當我訪問我的BL中的MyUserDTO對象時,它失去了分辨率:
User.GetUser(DAL.Provider.GetUs呃())
在UI中,我沒有得到MyUserDTO中的屬性。
即使在我調用靜態User.GetUser()方法(這又會調用我的自定義提供程序返回MyUserDTO對象)之後,是否有方法可以幫助我獲取UI層中的這些屬性?
感謝,