2010-11-12 15 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