加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何转换此代码,以便它现在使用依赖注入模式?

发布时间:2020-12-15 08:07:06 所属栏目:百科 来源:网络整理
导读:好的,所以我有以下情况.我原来有一些像这样的代码: public class MainBoard { private BoardType1 bt1; private BoardType2 bt2; private BoardType3 bt3; ... private readonly Size boardSize; public MainBoard(Size boardSize) { this.boardSize = boar
好的,所以我有以下情况.我原来有一些像这样的代码:
public class MainBoard {
    private BoardType1 bt1;
    private BoardType2 bt2;
    private BoardType3 bt3;
    ...
    private readonly Size boardSize;

    public MainBoard(Size boardSize) {
        this.boardSize = boardSize;

        bt1 = new BoardType1(boardSize);
        bt2 = new BoardType2(boardSize);
        bt3 = new BoardType3(boardSize);
    }
}

现在,我决定重构该代码,以便注入类的依赖项,而不是:

public class MainBoard {
    private IBoardType1 bt1;
    private IBoardType2 bt2;
    private IBoardType3 bt3;
    ...
    private Size boardSize;

    public MainBoard(Size boardSize,IBoardType1 bt1,IBoardType2 bt2,IBoardType3 bt3) {
        this.bt1 = bt1;
        this.bt2 = bt2;
        this.bt3 = bt3;
    }
}

我的问题是如何处理Board Size?我的意思是,在第一种情况下,我只是通过了所需的电路板尺寸,并且它将尽一切努力创建具有正确尺寸的其他类型的电路板.在依赖注入案例中,情况可能并非如此.你们在这种情况下做了什么?你是否对MainBoard的构造函数进行了任何检查,以确保传入正确的大小?你是否只是假设班级的客户有足够的责任通过相同大小的3种电路板,那么没有问题吗?

编辑

我为什么要这样做?因为我需要单元测试MainBoard.我需要能够在某些状态下设置3个子板,以便我可以测试我的MainBoard正在按照我的预期进行测试.

谢谢

解决方法

我会说在第二种情况下boardSize参数是不必要的,但我会添加一个断言来确保3个板的大小真的相等.

但总的来说,第二种情况对我来说似乎很可疑.我会建议第一种方法,除非你真的需要在主板上注入不同类型的板.即便如此,我会考虑使用例如板factory而不是将3个板参数传递给构造函数,例如

public interface IBoardBuilderFactory {
    public IBoardType1 createBoardType1(Size boardSize);
    public IBoardType2 createBoardType2(Size boardSize);
    public IBoardType3 createBoardType3(Size boardSize);
}

这将确保3个电路板在“电路板系列”和尺寸方面的一致性.

我们应该更多地了解上下文/域模型,特别是主板和子板之间的关系,以便决定DI是否是正确的选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读