jan*_*y02 5 c# asp.net-mvc domain-driven-design dependency-injection inversion-of-control
我刚开始用DDD设计(我既没有老师也没有经验)
我有一些域服务类,必须在某些时候互相引用.所以我决定通过构造函数注入引用.
当我创建一个有很多数据要显示在控制器中的视图时,我必须创建一堆服务(其中一些引用彼此)
此时我的控制器的第一行看起来像这样:
EmployeeRepository employRepository = new EmployeeRepository();
ShiftModelRepository shiftModelRepository = new ShiftModelRepository();
ShiftModelService shiftModelService = new ShiftModelService(shiftModelRepository);
EmployeeService employeeService = new EmployeeService(employRepository, shiftModelService);
OvertimeRepository overtimeRepository = new OvertimeRepository();
OvertimeService overtimeService = new OvertimeService(overtimeRepository, employeeService);
Run Code Online (Sandbox Code Playgroud)
但我开始为服务创建接口并使用IoC控制器(名为StructureMap)
现在,同一控制器的第一行看起来像这样:
IShiftModelService shiftModelService = ObjectFactory.GetInstance<IShiftModelService>();
IOvertimeService overtimeService = ObjectFactory.GetInstance<IOvertimeService>();
IEmployeeService employeeService = ObjectFactory.GetInstance<IEmployeeService>();
Run Code Online (Sandbox Code Playgroud)
我认为使用它会好得多,但我知道它是否是DDD中的一个好习惯.
使用接口几乎总是更好的做法,也是良好的做法 - 所以第二个示例中的内容更好。
但正如 StuartLC 提到的,您确实想考虑将这些依赖项作为构造函数参数注入。
ObjectFactory.GetInstance 实际上是一种服务定位器,通常不是最佳使用模式,因为对象没有声明它具有哪些依赖项。通常最好将依赖项公开为构造函数参数并将它们注入。