目的
要写出effecient活动目录库,以缓解技术面谁负责创建访问模型到域控制器的Active Directory的工作。该库必须允许下列:其中哪些是更好的架构/设计方法?
- 基本操作:添加,修改,删除,列出条目;
- 条目可以是组织单位,组或用户(至今不需要其他条件);
我想过要有一个代表我们想要使用的域的类。
public class Domain {
public Domain(string root) {
Root = root;
Entries = new Dictionary<string, IDirectoryEntry>();
}
public string Root { get; private set; }
public Dictionary<string, IDirectoryEntry> Entries { get; private set; }
}
然后,我已经使用依赖注入来强制对条目域的所有权限制。例如:
public abstract class DirectoryEntry : IDirectoryEntry {
public DirectoryEntry(Domain domain, string name) {
Domain = domain;
Name = name;
Domain.Entries.Add(name, this);
}
public Domain { get; private set; }
public Name { get; set; }
}
public class OrganizationalUnit : DirectoryEntry {
public OrganizationalUnit(Domain domain, string name)
: base(domain, name) {
}
}
public class Group : DirectoryEntry {
public Group(Domain domain, string name)
: base(domain, name) {
}
}
现在,请注意我在一个IDirectoryEntry
接口的实例使用Domain.Entries.Add()
的条目添加到给定域。
问题
这是一个很好的做法,如果我不希望用户更改任何
IDirectoryEntry
实例Domain
财产?简单地让这个
Domain.Entries.Add()
行消失,并且在我的Domain
类中有一个方法可以将一个条目添加到域中吗?对于问题
代码示例2
public class Domain {
//See above for other members.
public void AddEntry<T>(T entry) {
Entries.Add(entry.Name, entry);
}
}
- 是什么,根据你,在这种情况下,最好的架构?
两者似乎都足以被考虑,所以我对图书馆最终用户想要最简单的方法感到困惑。
谢谢你Nate。不幸的是,我的客户禁止使用.NET 2.0,否则我会使用3.5。此外,我不害怕被涂到角落,因为我打算以更灵活的方式编写我的代码,正如您可能已经注意到的那样。因此,我仍然在想这个问题。最后,两种方式是等价的,除了如果有一天我想从AD中分离出一个入口,我想我将不得不移除依赖注入。假设我想管理底层数据库的安全性。否则,我看到这种依赖注入是合理的。你怎么看? – 2010-11-12 20:42:54
我在其他类的构造函数中看不到任何需要'Domain'对象的问题;尽管它紧密耦合,但如果你从LDAP迁移出来,“安全组”和“组织单元”的概念可能会消失并被别的东西取代。 – Nate 2010-11-12 20:45:24
他们没有与您建立已在.NET 3.5中的问题,但他们不会让你使用3.5?这根本没有任何意义。 – 2010-11-12 20:56:39