代码之家  ›  专栏  ›  技术社区  ›  Grokys

使一个类仅对另一个类可用

  •  2
  • Grokys  · 技术社区  · 14 年前

    我有一个C#项目,其中我使用Memento/Command模式来实现Undo/Redo功能。该应用程序是一个WPF应用程序,它使用StructureMap for IOC,具有广泛的单元测试,并通过使用rhinomock的接口使用mock。

    在我的代码里我有一个 Operation IRepositoryWriter 接口,通过该接口可以路由所有对数据库的写入。

    我想知道执行这项政策的最好办法是什么 只有 操作 它的派生类应该能够使用 .

    实现这一目标的明显方法是 一种受保护的嵌套接口 操作

    优势 :仅限 派生类可以访问 IRepositoryWriter公司 .

    缺点 :不能再与StructureMap或单元测试一起使用。

    还有什么其他的解决办法?政策不需要修改 严格地 强制-只要给其他在代码库上工作的人一个提示就足够了。

    5 回复  |  直到 14 年前
        1
  •  1
  •   Jamiec    14 年前

    这个策略不需要严格执行——只要给其他在代码库上工作的人一个提示就足够了

    /// <summary>
    ///    blah blah, what this interface is for
    /// </summary>
    /// <remarks>
    ///   This interface should only be implemented by inheritors of Operation.
    /// </remarks>
    public interface IRepositoryWriter{}
    

        2
  •  2
  •   Ronald Wildenberg    14 年前

    您可以将应用程序划分为多个库,如下所示:

    Lib1
        UI code
    Lib2
        Operation and derived classes
    Lib3
        IRepositoryWriter and implementation
    

    仅限 Lib2 应该参考 Lib3 . 你甚至可以用 InternalsVisibleToAttribute 锂3 只有 锂离子电池2 IRepositoryWriter 和实施 internal .

    Lib1 锂3 但这更容易执行。

        3
  •  1
  •   Doobi    14 年前

    用以该操作为参数的构造函数替换RepositoryWriter和RepositoryWriter怎么样?

        4
  •  0
  •   Nobody    14 年前

    事后看来,可能弊大于利,因为您可以添加一条评论来警告其他开发人员您正在做什么,但至少对您来说,这是一个不同的角度来看待问题。

        5
  •  0
  •   Mark Mullin    14 年前

    这个 内部的 关键字将对类的访问限制为单个程序集中的元素,即内部类在程序集外部不可见-将操作、操作子类和IRepositoryWriter单独放入单个程序集中