如果模型实现接口,会有什么缺点?

时间:2019-07-28 07:23:53

标签: c# entity-framework-core

我是EF Core的新手。我的网络应用程序的某些型号将显示为下拉控件的列表项。

我按如下方法创建一个接口和一个模型。

public interface ISelectListItemable
{

    int Id { get; set; }

    string Name { get; set; }
}


public class Tag : ISelectListItemable
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }
}

因此我可以创建

public static class IEnumerableExtension
{
    public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<ISelectListItemable> items, int selectedValue)

    {
        return from item in items
               select new SelectListItem
               {
                   Text = item.Name,
                   Value = item.Id.ToString(),
                   Selected = item.Id.Equals(selectedValue)
               };
    }
}

轻松获得SelectListItem列表。

问题

据我所知,我没有看到任何有关实现接口的模型的教程。所以我的问题是我上面的代码有什么弊端吗?

1 个答案:

答案 0 :(得分:2)

这取决于您使用的是什么(或多少)体系结构。

名称ISelectListItemable表示与UI有关。我认为这对于ViewModel而不是Model是可行的。

当您直接在视图中使用模型时,可以这样做,但这会降低设计的可伸缩性和灵活性。

基本上,它与将[DisplayName()]放在模型属性中处于同一个联盟。有人这样做,但仅限于较小的项目。

关于EF Core中的映射,

  

我注意到,应用于接口属性的任何数据注释属性都不会影响生成的模式。

正确无误,这是设计使然,也是唯一可行的方法。

与基本类相比,它使接口更具侵入性。 EF可能永远都看不到该界面。因此,当您使用这样的东西时,它比继承要好得多。