我在尝试使我的体系结构具有灵活性时面临类解决问题。为简单起见,考虑下面的例子: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层中的这些属性?
感谢,