我目前正在开发一个严重依赖外部组件的项目 - 主要是物理设备,如路由器,交换机,NVT及其相关协议(SNMP,Ping,RTSP ......)。我需要监控这些设备(它们是否在线?它们的状态是什么?)并向它们发送操作消息。 (启动该任务,启用此端口......)
不出所料,这是我真正需要的唯一域名实体:
public class Device {
public long IpAddress { get; set; }
...
}
但我确实有很多服务。像ISnmpService,IPingService,IFtpService,... 现在我问自己:DDD如何帮助我?我必须在哪个层实现这些服务?那些甚至是“真正的”域名服务吗?它们属于基础架构层,还是可以在域层中实现服务?
这样的实现如何解决这样的问题:
public HorribleController : ApiController {
public HorribleController(
ISnmpService snmpService,
IRtspService rtspService,
IPingService pingService,
IOnVifService onvifService)
{
...
}
public AddDevice(Device device) {
snmpService.Add(device);
rtspService.Add(device);
rtspService.Connect(device);
pingService.Watch(device);
onvifService.Add(device);
}
}
答案 0 :(得分:0)
问自己这个问题,我的服务是否包含与自然不属于聚合或值对象的域相关的业务逻辑?如果是,则它是域服务并且属于域。如果您要做的是与外部系统(ping,ftp)进行通信,则可能是应用程序服务,甚至是六边形体系结构的端口/适配器环中的应用程序服务。请参阅http://alistair.cockburn.us/Hexagonal+architecture。