0

それらのインターフェースを実装するクラスに必要であると仮定してください:

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 のモデルを使用する

よろしく、テイモ

4

2 に答える 2

1

基本的なエンティティ クラスを実装したり、インターフェイスとして使用したりしないでください。
代わりに、単純な 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()
    { 
    }
}
于 2013-06-13T16:00:56.967 に答える
0

インターフェイスを 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()
    { 
    }

}

私があなたの要求を誤解していない限り

于 2013-06-13T14:59:58.363 に答える