我正在设计一个数据驱动的Windows应用程序,不是由底层SQL Server提供,而是由WCF服务提供,以便允许本地和远程访问。
所述WCF提供用于检索用户,股票,客户等的特定功能,并实际执行ADO操作,具体如下:
[OperationContract]
UserAdapter GetUserByWindowsIdentity(string Domain, string Account);
返回以下之一:
[DataContract]
public class UserAdapter
{
[DataMember]
public int? ID;
[DataMember]
public string Domain;
[DataMember]
public string Account;
[DataMember]
public string Name;
}
我不想在我的WPF前端应用程序中对我的WCF客户端进行特定引用,而是希望在其间的另一层中抽象一些其他功能 - 例如,通过其WindowsIdentity验证用户登录既不属于数据层,也不是表示层,而是中间业务逻辑层。
我不确定如何解决这个问题。我更喜欢在我的表示层中执行以下操作:
User.Login();
并且User对象根据我的UserAdapter类抽象相同的属性,如Domain,Account等,但我不能将其子类化,因为我无法向下转换数据层返回的对象。
我可以采取任何建议,包括'搞砸',我将非常感激。谢谢大家!
答案 0 :(得分:1)
如果你有一些业务逻辑,介于两者之间的附加层是绝对有意义的,实现细节当然取决于你的要求。
如果您考虑一下,基础数据类不应该知道如何登录,因为这已经是业务逻辑:这实际上是您考虑的方法背后的真正问题。
将业务逻辑隐藏在另一组服务背后也是您应该考虑的选项,从而在业务逻辑级别获得WCF的所有好处(以及所有权成本)。
Dino Esposito写了一本关于architecting enterprise applications的好书,也许你可以在那里找到一些实现分层架构的灵感。