2010-11-12 59 views
2

目的
要写出effecient活动目录库,以缓解技术面谁负责创建访问模型到域控制器的Active Directory的工作。该库必须允许下列:其中哪些是更好的架构/设计方法?

  1. 基本操作:添加,修改,删除,列出条目;
  2. 条目可以是组织单位,组或用户(至今不需要其他条件);

我想过要有一个代表我们想要使用的域的类。

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()的条目添加到给定域。

问题

  1. 这是一个很好的做法,如果我不希望用户更改任何IDirectoryEntry实例Domain财产?

  2. 简单地让这个Domain.Entries.Add()行消失,并且在我的Domain类中有一个方法可以将一个条目添加到域中吗?对于问题

代码示例2

public class Domain { 
    //See above for other members. 
    public void AddEntry<T>(T entry) { 
     Entries.Add(entry.Name, entry); 
    } 
} 

  • 是什么,根据你,在这种情况下,最好的架构?

    两者似乎都足以被考虑,所以我对图书馆最终用户想要最简单的方法感到困惑。

回答

2

你看过.NET 3.5/4的System.DirectoryServices.AccountManagement命名空间吗?它提供了更多统一和.NET友好界面所需的大部分功能。我亲自为您写了一个类似要求的图书馆,并将两者结合使用。总的来说,我认为你的设计看起来不错,但我对你的问题领域还不够了解,不知道你是否会将自己描绘成一个角落。

具体来说,对于问题1,我认为会有效;但是,任何参考Domain实例的人都可以删除任何给定的条目。

对于问题2,这很可能是我自己实现它的原因,除非我有一个令人信服的理由不这样做。

+0

谢谢你Nate。不幸的是,我的客户禁止使用.NET 2.0,否则我会使用3.5。此外,我不害怕被涂到角落,因为我打算以更灵活的方式编写我的代码,正如您可能已经注意到的那样。因此,我仍然在想这个问题。最后,两种方式是等价的,除了如果有一天我想从AD中分离出一个入口,我想我将不得不移除依赖注入。假设我想管理底层数据库的安全性。否则,我看到这种依赖注入是合理的。你怎么看? – 2010-11-12 20:42:54

+0

我在其他类的构造函数中看不到任何需要'Domain'对象的问题;尽管它紧密耦合,但如果你从LDAP迁移出来,“安全组”和“组织单元”的概念可能会消失并被别的东西取代。 – Nate 2010-11-12 20:45:24

+0

他们没有与您建立已在.NET 3.5中的问题,但他们不会让你使用3.5?这根本没有任何意义。 – 2010-11-12 20:56:39