Helpex - Trao đổi & giúp đỡ Đăng nhập
2

Mục tiêu
Viết một thư viện Active Directory hiệu quả để giảm bớt công việc của các kỹ thuật viên chịu trách nhiệm tạo các mô hình truy cập vào Active Directory của bộ điều khiển miền. Thư viện này phải cho phép những điều sau:

  1. Các thao tác cơ bản: Thêm, Sửa, Xóa, Liệt kê các mục nhập;
  2. Mục nhập có thể là một đơn vị tổ chức, nhóm hoặc người dùng (hiện tại không cần thêm nữa);

Tôi đã nghĩ đến việc có một lớp đại diện cho miền mà chúng tôi muốn làm việc cùng.

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; }
}

Sau đó, tôi đã sử dụng chèn phụ thuộc để thực thi ràng buộc thuộc về miền của một mục nhập. Ví dụ:

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) {
    }
}

Bây giờ, hãy lưu ý rằng tôi thêm mục nhập bằng cách sử dụng Domain.Entries.Add()miền đã cho khi khởi tạo IDirectoryEntrygiao diện.

Câu hỏi

  1. Đây có phải là một phương pháp hay không, nếu tôi không muốn người dùng thay đổi thuộc Domaintính của bất kỳ IDirectoryEntrytrường hợp nào?

  2. Có tốt hơn không nếu chỉ để Domain.Entries.Add()dòng này biến mất và có một phương thức trong Domainlớp của tôi sẽ thêm một mục nhập vào miền?

Mẫu mã cho câu hỏi số 2

public class Domain {
    //See above for other members.
    public void AddEntry<T>(T entry) {
        Entries.Add(entry.Name, entry);
    }
}

  • Theo bạn, công trình kiến ​​trúc tốt nhất trong hoàn cảnh này là gì?

    Cả hai dường như đủ tốt để được xem xét, vì vậy tôi hơi bối rối về việc nó muốn cách dễ nhất có thể cho người dùng cuối thư viện.
2 hữu ích 0 bình luận 458 xem chia sẻ
2

Bạn đã xem không gian tên System.DirectoryServices.AccountManagement của .NET 3.5 / 4 chưa? Nó cung cấp nhiều chức năng bạn yêu cầu trong một giao diện thống nhất và thân thiện với .NET hơn. Cá nhân tôi đã viết một thư viện với các yêu cầu tương tự như của bạn, sử dụng kết hợp cả hai.

Nhìn chung, tôi nghĩ rằng thiết kế của bạn có vẻ tốt, nhưng tôi không biết đủ về lĩnh vực vấn đề của bạn để biết liệu bạn có đang tự vẽ mình vào một góc hay không.

Cụ thể, đối với Câu hỏi 1, tôi nghĩ rằng điều đó sẽ hiệu quả; tuy nhiên, bất kỳ ai có tham chiếu đến một phiên bản của đều Domaincó thể xóa bất kỳ Mục nhập nhất định nào.

Đối với Câu hỏi 2, đó rất có thể là cách tôi sẽ tự thực hiện nó, trừ khi tôi có lý do thuyết phục để không làm vậy.

2 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# .net vb.net architecture dependency-injection , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading