【问题标题】:Are Fully Defined Relationships in Entity Framework a code-smell实体框架中完全定义的关系是一种代码气味
【发布时间】:2019-07-25 09:54:55
【问题描述】:

这是一个经典的例子:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public Blog Blog { get; set; }
}

这会创建一个循环(或循环)依赖关系。因此,您会遇到循环依赖带来的所有问题:单一职责违规、JSON 序列化程序异常和 IoC 容器异常等等。

感觉很像代码气味。

是吗?

【问题讨论】:

    标签: entity-framework design-patterns circular-dependency anti-patterns


    【解决方案1】:

    实体框架中完全定义的关系是一种代码味道

    不在抽象级别。这意味着仅仅因为您定义了所有关系并不意味着存在存在问题

    这会创建一个循环(或循环)依赖关系。

    您的代码没有这样的依赖关系。使用您设置的导航属性,即使使用有效的 EF 实体生成器设置,无需更改这些类,您也没有此类依赖关系。您决定使用这些类的方式会改变是否存在此问题。

    你会得到所有带有循环依赖的讨厌

    一直存在。简单地使用 EF 不应该神奇地让它消失。

    我们围绕现实世界的场景/实体设计课程。这些场景/实体有完全相同的问题。

    【讨论】:

    • 我的代码没有依赖?真的吗?您希望我引用 Martin Fowler 的话还是深入了解成为依赖项的根本意义?
    • 其次,当然,目前可能没有问题,但这正是“代码气味”的含义;它正在为将来成为一个令人头疼的问题奠定基础,最有可能是最终清理你造成的烂摊子的人。此外,只有在存在循环依赖时才会存在讨厌的东西。正如您所建议的,我当然不会使用 EF 来“让它们消失”。恰恰相反,正如我的问题清楚地表明的那样。最后,是的,虽然现实世界显示循环依赖关系,但我们肯定不必那样对我们的类建模。
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多