如何从多个彼此有关系的类中创建一个接口
本文关键字:创建 一个 接口 有关系 | 更新日期: 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()
{
}
}
除非我误解了你的要求