代码之家  ›  专栏  ›  技术社区  ›  Thorsten Lorenz

组织界面

  •  11
  • Thorsten Lorenz  · 技术社区  · 17 年前

    .

    ,我会保留ICustomButton界面 接口 .

    本身,但重量要轻得多 接口 项目。

    桂 项目更改并因此导致重建,只有直接引用CustomButton的项目需要重新编译,而引用ICustomButton的项目可能保持不变。

    假设我有这个界面:

    public interface ICustomButton
    {
        void Animate(AnimatorStrategy strategy);
    }
    

    如您所见,它指的是AnimatorStrategy,这是一个具体的类,因此将位于不同的项目中,我们称之为 . 接口

    有什么建议吗?

    4 回复  |  直到 17 年前
        1
  •  16
  •   LBushkin    17 年前

    小心永远、永远、永远——尤其是几乎所有、没有或每一个。

    你是否应该 放

    你是否应该放置你期望代码的外部消费者实现的接口——可能。如果您希望项目中的多个程序集依赖于接口,我会将接口放入外部程序集中——这有助于打破耦合依赖关系。我还使用这种做法来解决循环引用问题,其中程序集需要知道彼此之间的接口。

    我不会将仅在项目内部使用的接口放在单独的程序集中。当我的项目相对较小时,我也不会将接口提升到自己的程序集中,或者在没有依赖于它们的程序集的情况下,接口是不打算使用的。

        2
  •  3
  •   Rich Seller    17 年前

    简单的答案是AnimatorStrategy也应该是一个界面。AnimatorStrategy的实现在Animation项目中,但接口将在AnimationInterfaces或Interfaces(根据需要)项目中。

    值得一提的是,我更喜欢用另一种方式来命名约定。将接口放在Animation中,将实现放在AnimationImpl(或类似)中。这样,您就引用了函数名称。

        3
  •  1
  •   Vilx-    17 年前

    我想说,这没有通用的配方,但你应该根据需要使用“常识”来划分程序集中的接口。

        4
  •  -2
  •   Sarah Vessels    17 年前

    public interface IThing
    {
        int DoMyThing<T>(T variable);
    }
    

    T variable ,你可以这样做:

    int DoMyThing<T>(T variable) where T : IOtherInterface;
    

    IOtherInterface 也在您的接口项目中定义。然后,只要你的特定类继承了这两个类 IThing 和 ,您可以使用 DoMyThing 方法并传入特定类的实例,而不具有循环依赖关系。你的代码可能会变成:

    public interface ICustomButton
    {
        void Animate<T>(T strategy) where T : IAnimateable;
    }
    

    接口没有引用具体类 AnimatorStrategy .