摘要
实际上,我正在编写一个面向对象的类库,用于在Visual Basic.NET 2005中处理Active Directory。
该库允许管理组织单位、组和用户。
我尽力使代码看起来像(简化的)一般化:
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.Entries
通过我的
Domain.Add Method
,我可以打电话给
Domain.AcceptChanges Method
以便处理任何实例。
我的
域.条目
财产是
ICollection(Of DirectoryEntryBase)
.
问题
当我打电话给我的时候
域.AcceptChanges方法
因为我需要访问
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
我曾考虑过将这个集合泛化,但话说回来,词汇表从一个objet变为另一个objet。至于你,我们可以谈谈
儿童
,对于一个团队,我们会说
成员
,等等。事实上,这些并不是指同一个现实,所以我想我会因为一个不好的原因来概括这个集合。
有什么想法吗?
谢谢!