如何从多个彼此有关系的类中创建一个接口

本文关键字:创建 一个 接口 有关系 | 更新日期: 2023-09-27 18:18:08

请假定有两个类,实现它们的接口:

public interface ICube
{
    ICollection<IColor> sideColors {get; set; }
}
public interface IColor
{
    float getHue ();
}
public class Cube : ICube
{
    public ICollection<IColor> sideColors {get; set; }
}
public class Color : IColor
{
    public Color (float r, float g, float b)
    {
        ...
    }
    public float getHue ()
    {
        ...
    }
}

现在我想将接口公开给另一个程序集,这个程序集必须不知道任何关于模型实现的信息。除此之外,我想用CodeFirst模型来定义数据库设计。在这种情况下,EF不能使用ICollection的定义,而是需要一个类似ICollection的定义。满足这两个要求的最佳实践是什么?屏蔽类Cube的实现-使用EF

的模型

最诚挚的问候,Teimo

如何从多个彼此有关系的类中创建一个接口

您的基本实体类不应该实现或用作接口。
相反,它们应该是简单的poco:

public class Cube
{
    public ICollection<Color> sideColors {get; set; }
}
public class Color
{
    public int SomeProperty {get; set;}
    public Color(float r, float g, float b)
    {
    }
}

注意ICollection<Color>对EF是有效的,但ICollection<IColor>不是。

如果你想在类之间共享属性,使用Abstract Base Classes代替接口。

如果你想让一些在基本实体上执行某种操作和计算,编写单独的类,这些类可以继承接口

public class HandleColor : IHandleColor
{
    public float getHue()
    { 
    }
}

如果使用Public修饰符标记接口,并使用Internal关键字标记实现,则该接口将对引用该接口的另一个程序集可见。如。

public interface ICube
{
    ICollection<IColor> sideColors { get; set; }
}
public interface IColor
{
    float getHue();
}
internal class Cube : ICube
{
    public ICollection<IColor> sideColors { get; set; }
}
internal class Color : IColor
{
    public Color(float r, float g, float b)
    {
    }
    public float getHue()
    { 
    }
}

除非我误解了你的要求

相关文章: