C# SoftDelete的抽象类或接口

C# SoftDelete的抽象类或接口,c#,ef-code-first,soft-delete,C#,Ef Code First,Soft Delete,我有一个项目,我先用COE。 在我的项目中,我想实现SoftDelete有两种方法 1st:用户界面如下: public interface ISoftDelete { bool IsDeleted { get; set; } } public abstract class SoftDelete { public bool IsDelelted { get; set; } } 如果我使用这种方式,我应该实现我想要softDelete的所有类 2nd:使用如下抽象类: pu

我有一个项目,我先用COE。 在我的项目中,我想实现
SoftDelete
有两种方法

1st:用户界面如下:

 public interface ISoftDelete
{
    bool IsDeleted { get; set; }
}
public abstract class SoftDelete
{
    public bool IsDelelted { get; set; }
}
如果我使用这种方式,我应该实现我想要softDelete的所有类

2nd:使用如下抽象类:

 public interface ISoftDelete
{
    bool IsDeleted { get; set; }
}
public abstract class SoftDelete
{
    public bool IsDelelted { get; set; }
}

我不知道哪一个更好,网络上也没有类似的问题。

接口是一个数据传递契约,您没有任何实现,但抽象类可以有默认实现。 若要在基类(此处为SoftDelete)中实现,则必须使用抽象类

  • 保持它的美观和简单,您不需要对IsDeleted对象进行任何特殊处理

  • 您将需要在数据库中处理继承,这意味着实际上每个类型的表继承。我建议不要使用这种方法,因为它会使查询和迁移复杂化,并可能导致性能问题

  • 所以我认为1更好,尽管它需要代码中的重复,但它可能会在数据库中为您节省一些麻烦。

    根据MSDN

    如果您正在创建的功能在各种不同的对象中都很有用,请使用接口。抽象类应该主要用于密切相关的对象,而接口最适合为不相关的类提供公共功能

    我认为界面是更好的选择

    可能存在的副本