【问题标题】:Repository and IoC Patterns存储库和 IoC 模式
【发布时间】:2013-12-14 19:45:38
【问题描述】:

之前我问过this question,得到的回答是这样的:

这是可行的,但据我所知,将容器注入部件并不是 MEF 的“正常”用例。

在我的网络应用程序中,我有一些存储库,当然,它们可以从数据库中检索实体。为了使它们尽可能松散耦合,我让它们返回接口(例如 IUser、IBill、IBlaBlaBla...),并且存储库项目仅引用库项目(包含接口)。我使用 MEF 组合功能将其捆绑在一起...

由于存储库必须有一个具体的对象来填充它从数据库获得的信息,并且唯一的 Container 知道哪个具体类映射到特定接口,我认为存储库必须具有引用容器,以便它可以调用“Resolve()”,获取一个新实例并完成他的工作,但这显然是一个错误。

谁能告诉我为什么以及哪种方法会更好?

PS:我不知道这是否相关,但我正在使用 DDD...

【问题讨论】:

    标签: inversion-of-control mef ioc-container


    【解决方案1】:

    我认为导致这个问题的设计缺陷是使用接口来隐藏实体。由于实体是您领域中的核心概念,因此将它们隐藏在抽象后面是没有用的。换一种说法:你有没有不同的IUser实现?

    换句话说,放弃IUserIBill等接口,让您的存储库和业务命令直接依赖于您的聚合实体。

    【讨论】:

    • 嗯,有 UserTest、BillTest 等(用于单元测试...)。问题是,如果我替换具体类的接口,我会创建一堆紧密耦合的类......我认为这是最糟糕的,因为现在唯一的耦合是在“容器”类中没有?
    • 没有。史蒂文是对的。域实体不应该有外部依赖。这是其他一切都应该依赖的核心。例如,查看洋葱架构或领域驱动设计。
    • @jgauffin 以某种方式实体不直接具有外部引用......它们通过 I*Repository 接口引用存储库(存储库的具体类被注入)并且存储库引用容器。 .. 现在好点了吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多