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

我是 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列表。


问题

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


翻翻过去那场雪
浏览 93回答 1
1回答

HUX布斯

这取决于您使用什么(或:多少)架构。这个名字ISelectListItemable暗示了用户界面的担忧。我认为这是对 ViewModel 的可行补充,而不是对 Model 的补充。当您直接在视图中使用模型时,您可以这样做,但这会降低设计的可扩展性和灵活性。[DisplayName()]基本上它与放置模型属性处于同一级别。有些人这样做,但仅限于较小的项目。关于EF Core中的映射,我注意到应用于接口中的属性的任何数据注释属性都不会影响生成的架构。正确,这是设计使然,也是它可以工作的唯一方式。它使接口比基类的侵入性更小。EF 可能永远不会看到该界面。所以当你确实使用这样的东西时,它比继承要好得多。
打开App,查看更多内容
随时随地看视频慕课网APP