DirectoryObject クラスの次は DomainObject クラスです。このクラスはドメインの Directory オブジェクト共通のクラスになる抽象クラスで、DirectoryObject クラスを継承し IDomain インターフェイスを実装します。
Windowsアプリではローカルのユーザとグループも扱うため、ローカルのクラスは Directory オブジェクト用のクラスを継承して作成することになります。
ローカルのユーザとグループを扱わないならクラス(と実装インターフェイス)を分ける必要はないですし、IUser と IGroupのインターフェイスもいらないです。
VB
Public MustInherit Class DomainObject
Inherits DirectoryObject
Implements IDomain
#Region " プライベートフィールド "
Private ReadOnly _path, _name As String
#End Region
#Region " プロテクトコンストラクタ "
'DirectoryEntry を指定して DirectoryObject クラスの新しいインスタンスを初期化します。
Protected Sub New(entry As DirectoryEntry)
MyBase.New(entry)
_path = DirectoryAccess.GetBelongPath(entry) '所属パスを取得
_name = entry.Properties.Item("name").Value.ToString()
End Sub
#End Region
#Region " パブリックプロパティ "
'表示用の所属パスを取得します。
Public ReadOnly Property DisplayPath As String Implements IDomain.DisplayPath
Get
Return _path
End Get
End Property
'表示用の名前を取得します。
Public Overrides ReadOnly Property Name As String
Get
Return _name
End Get
End Property
#End Region
End Class
C#
public abstract class DomainObject : DirectoryObject, IDomain
{
#region プライベートフィールド
private readonly string _path, _name;
#endregion
#region プロテクトコンストラクタ
//DirectoryEntry を指定して DirectoryObject クラスの新しいインスタンスを初期化します。
protected DomainObject(DirectoryEntry entry)
: base(entry)
{
_path = DirectoryAccess.GetBelongPath(entry); //所属パスを取得
_name = entry.Properties["name"].Value.ToString();
}
#endregion
#region パブリックプロパティ
//表示用の所属パスを取得します。
public string DisplayPath
{
get
{
return _path;
}
}
//表示用の名前を取得します。
public override string Name
{
get
{
return _name;
}
}
#endregion
}
コンストラクタ内で表示用の所属パスをセットするために DirectoryAccess.GetBelongPath メソッドを呼んでます。
このメソッドは引数で受け取った DirectoryEntry の Path プロパティの値を、表示用の所属パスにして返します。
例えば virtual.testdom.com ドメインの本社OU内の営業部OUにある SalesUser というオブジェクトの DirectoryEntry の場合、Path プロパティは次の値になります。
LDAP://virtual.testdom.com/CN=SalesUser,OU=営業部,OU=本社,DC=virtual,DC=testdom,DC=com
この値から「本社/営業部」という値を返します。