【发布时间】:2010-11-02 00:39:46
【问题描述】:
是否有实现一个使用活动目录(或除关系数据库之外的任何其他数据源)作为数据源并且可以获得能够延迟加载其关联的实体对象的存储库?
一个例子:
两个类将在我们将要开发的各种应用程序中经常使用
class User
{
public string DisplayName {get; set;}
public string UserID {get; set;}
public string Email {get; set;}
public string WorkPhone {get; set;}
// etc.
public string IList<Group> Groups {get; private set;}
public User Manager {get; set;}
}
class Group
{
public string DisplayName {get; set;}
public string Email {get; set;}
// etc.
public IList<User> Members {get; private set;}
public User Owner {get; private set;}
}
我希望能够在我们未来的所有应用程序中重用这两个类。对于某些应用程序,User 和Group 的数据源现在是活动目录,但将来我们可能想使用一些数据库或数据库和活动目录的混合。为了代码重用,我会使用the repository pattern 设计两个存储库MySqlDBRepository 和ActiveDirectoryRepository 供我检索和存储Users 和Groups。
假设我们已经有一个活动目录库,它可以用来获取以文本形式表示的用户信息,即您可以获取用户名、电子邮件、经理 ID 等字符串格式。我需要实现一个存储库,该存储库的使用方式与实体框架或 NHibernate 几乎相同,即
var user = _activeDirectoryRepository.GetUserByUserID("bryan");
foreach(var group in user.Groups)
Console.WriteLine(group.Manager.DisplayName);
最重要的是,user.groups 和 group.Manager 都应该自动延迟加载。我应该如何实现_activeDirectoryRepository.GetUserByUserID("bryan")?
【问题讨论】:
-
不确定如何在活动目录上方实现存储库...但我会说这绝对是要走的路。
标签: c# design-patterns domain-driven-design repository-pattern