Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以下哪一种是更好的体系结构/设计方法?_C#_.net_Vb.net_Architecture_Dependency Injection - Fatal编程技术网

C# 以下哪一种是更好的体系结构/设计方法?

C# 以下哪一种是更好的体系结构/设计方法?,c#,.net,vb.net,architecture,dependency-injection,C#,.net,Vb.net,Architecture,Dependency Injection,目标 编写有效的Active Directory库,以简化负责创建域控制器Active Directory访问模型的技术人员的工作。此库必须允许以下操作: 基本操作:增加、修改、删除、列出条目 条目可以是组织单位、组或用户(目前无需更多) 我想用一个类来表示我们想要使用的领域 public class Domain { public Domain(string root) { Root = root; Entries = new Dictionary<

目标
编写有效的Active Directory库,以简化负责创建域控制器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; }
    }
    
    现在,请注意,在实例化
    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);
        }
    }
    
    公共类域{
    //其他成员见上文。
    公共作废补遗(T条目){
    条目.添加(条目.名称,条目);
    }
    }
    

    • 根据您的说法,在这种情况下,什么是最好的体系结构?

      这两种体系结构似乎都足够好,值得考虑,因此我有点困惑,它希望为图书馆最终用户提供最简单的方式

    您看过.NET 3.5/4的System.DirectoryServices.AccountManagement命名空间吗?它在一个更加统一和.NET友好的界面中提供了许多您需要的功能。我个人编写了一个与您的要求类似的库,将两者结合使用

    总的来说,我认为你的设计看起来不错,但我对你的问题领域了解不够,不知道你是否会把自己弄到一个角落

    具体来说,对于问题1,我认为这会起作用;但是,任何引用了
    实例的人都可以删除任何给定条目


    对于问题2,这很可能是我自己如何实现它的,除非我有令人信服的理由不这么做。

    谢谢你,内特。不幸的是,我的客户禁止我使用.NET2.0,否则我会使用3.5。此外,我并不害怕被画进一个角落,因为正如您可能已经注意到的那样,我打算以更灵活的方式编写代码。因此,我仍然对这个问题感到疑惑。最后,这两种方法都是等效的,只是如果有一天我想从广告中分离一个条目,我想我必须删除依赖注入。假设我想针对底层数据库管理安全性。否则,我认为这种依赖注入是合理的。你认为呢?我看不出有任何问题需要在其他类的构造函数中使用
    对象;虽然它是紧密耦合的,但如果您迁移出LDAP,
    安全组
    组织单位
    的概念很可能会消失,并被其他东西取代。他们对您构建.NET 3.5中已有的东西没有问题,但他们不允许您使用3.5?这一点毫无意义。当你提到任何引用实例od
    Domain
    的人都可以删除任何给定条目时,你在回答Q1时提到了这一点。我以前没想过。很有趣!=)@OJ:我完全同意!尽管如此,我可能理解他们的担忧,因为他们仍在使用Windows 2000。他们只是迁移到Vista,这是因为2000不再受支持。我猜他们会担心,如果某些系统被迫更新到,它们将不支持.NET3.5。这是一个政府组织,因此您可能会理解,这可能会造成的所有麻烦都是由于不兼容的原因而无法工作的。此外,负责这一选择的有机建筑师非常固执。
    public class Domain {
        //See above for other members.
        public void AddEntry<T>(T entry) {
            Entries.Add(entry.Name, entry);
        }
    }