摘要
實際上,我寫一個面向對象的類庫與Active Directory在Visual Basic .NET 2005面向對象設計的氣味?
庫允許管理組織單位,組和用戶打交道。
我一直努力推廣,就像我可以讓我的代碼看起來像(簡體):
Public Interface IDirectoryEntityBase
ReadOnly Property DistinguishedName As String
ReadOnly Property Domain As String
Property Name As String
ReadOnly Property Schema As String
End Interface
Public Interface IDirectoryEntity
Inherits IDirectoryEntryBase
Property Login As String
End Interface
Public MustInherit Class DirectoryEntity
Implements IDirectoryEntity
Private _distinguishedName As String
Private _domain As String
Private _name As String
Private _schema As String
Public Sub New(ByVal pName As String)
Name = pName
End Sub
Public ReadOnly Property DistinguishedName As String Implements IDirectoryEntryBase.Name
Get
Return _name
End Get
End Property
Public ReadOnly Property Domain As String Implements IDirectoryEntryBase.Domain
Get
Return _domain
End Get
End Property
Public Property Name As String Implements IDirectoryEntryBase.Name
Get
Return _name
End Get
Set(ByVal value As String)
If (String.IsNullOrEmpty(value)) Then Return
_name = value.Trim()
End Set
End Property
Public ReadOnly Property Schema As String Implements IDirectoryEntryBase.Schema
Get
Throw New NotImplementedException()
End Get
End Property
End Class
Public Interface IOrganizationalUnit
Inherits IDirectoryEntity
ReadOnly Property Children As ICollection(Of IDirectoryEntityBase)
End Interface
Public Class OrganizationalUnit
Inherits DirectoryEntity
Implements IOrganizationalUnit
Private _children As ICollection(Of IDirectoryEntityBase)
Public Sub New(ByVal pName As String)
MyBase.New(pName)
_children = new List(Of IDirectoryEntity)()
End Sub
Public ReadOnly Property Children As ICollection(Of IDirectoryEntityBase) Implements IOrganizationalUnit.Children
Get
Return _children
End Get
End Property
End Class
Public Interface IGroup
Inherits IDirectoryEntity
ReadOnly Property Members As ICollection(Of IDirectoryEntity)
End Interface
Public Class Group
Inherits DirectoryEntity
Implements IGroup
Private _members As ICollection(Of IDirectoryEntity)
Public Sub New(ByVal pName As String)
MyBase.New(pName)
_members = New List(Of IDirectoryEntity)()
End Sub
Public ReadOnly Property Members As ICollection(Of IDirectoryEntity) Implements IGroup.Members
Get
Return _members
End Get
End Property
End Class
現在,當我通過Domain.Add Method
加入我的哪個類型的實例到我Domain.Entries
,我可能調用Domain.AcceptChanges Method
以便處理任何實例。
我的Domain.Entries
屬性是ICollection(Of DirectoryEntryBase)
。
問題
這是當我把我的Domain.AcceptChanges Method
,我發現自己具有知道什麼架構或我的工作是什麼類型的,因爲我需要訪問取決於OrganizationalUnit.Children
或Group.Members
集合他們戴上手銬類型。
Public Class Domain
Public Sub AcceptChanges()
For Each e As DirectoryEntry In Entries
'How may I find out what collection to work with here?'
Next
End Sub
End Class
我曾經想過推廣這個集合,但是再一次,詞彙從一個物體變成另一個。至於OU,我們可能會說子女,當對於一個組,我們會說成員等等。其實這些都不是指同一個現實,所以我會把這個集合概括爲一個不好的理由,我猜。
有什麼想法?
謝謝!
對於這個BaseList的想法+1,從來沒有想通過這種方式。 – 2010-11-24 00:27:27