代码之家  ›  专栏  ›  技术社区  ›  Will Marcouiller

哪一种是更好的架构/设计方法?

  •  2
  • Will Marcouiller  · 技术社区  · 14 年前

    目标
    编写一个有效的Active Directory库,以简化负责在域控制器的activedirectory中创建访问模型的技术人员的工作。此库必须允许以下操作:

    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) {
        }
    }
    

    现在,注意我使用 Domain.Entries.Add() 在实例化 IDirectoryEntry 接口。

    问题

    1. 如果我不想用户更改 Domain 任何人的财产 董事会 实例?

    2. 最好就这样 域.条目.添加() 线走了,我有个办法 类将向域中添加项?

    问题2的代码示例

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

    • 在你看来,在这种情况下,什么是最好的建筑?

      两者似乎都很好,可以考虑,所以我有点困惑,它想要最简单的方式为图书馆的最终用户。
    1 回复  |  直到 14 年前
        1
  •  2
  •   Will Marcouiller    14 年前

    你看过.NET 3.5/4的System.DirectoryServices.AccountManagement命名空间吗?它在一个更加统一和.NET友好的界面中提供了您需要的许多功能。我个人写了一个与你有相似要求的库,两者结合使用。

    总的来说,我认为你的设计看起来不错,但我对你的问题领域了解不够,不知道你是否会把自己画到一个角落,可以这么说。

    具体地说,对于问题1,我认为这是可行的;但是,任何引用 Domain 无法删除任何给定项。

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