使用DIY-DI创建简单的对象?

时间:2010-06-10 17:37:31

标签: dependency-injection

I recently ran across this great article by Chad Parry entitled "DIY-DI" or "Do-It-Yourself Dependency Injection".我处于一个我尚未准备好使用IoC框架的位置,但我想朝着这个方向前进。看起来DIY-DI是一个很好的第一步。

然而,在阅读完文章后,我仍然对创建对象感到困惑。这是一个简单的例子: enter image description here

使用手动构造函数依赖注入(不是DIY-DI),这就是必须构建一个Hotel对象的方式:

PowerGrid powerGrid;           // only one in the entire application
WaterSupply waterSupply;   // only one in the entire application

Staff staff;
Rooms rooms;
Hotel hotel(staff, rooms, powerGrid, waterSupply);

创建所有这些依赖项对象使得很难单独构造Hotel对象,这意味着为Hotel编写单元测试将很困难。

使用DIY-DI会更容易吗?
DIY-DI与手动构造函数依赖注入相比有什么优势?

2 个答案:

答案 0 :(得分:2)

你所谓的DIY-DI和手动构造函数注入之间没有区别。

如果创建Hotel实例太困难,您可以做两件事:

  • 确保依赖关系表示为接口或抽象基类。这使您可以通过提供Test Doubles(例如动态模拟或类似操作而不是具体类)来单独测试Hotel类。
  • 如果依赖项太多,则为refactor to aggregate services

随着应用程序的复杂性增加,管理所有依赖项的生命周期的任务也越来越多。虽然技术上可以手动编写整个应用程序,但这正是 DI容器非常有用的地方。

答案 1 :(得分:1)

提示

  

创建所有这些依赖项对象使得很难单独构建Hotel对象

正如我所看到的,蓝色对象与红色对象之间不应存在依赖关系。具有不同寿命的对象不应相互依赖。另见:http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/