目的
要寫出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