域服务的实现

时间:2014-03-02 22:21:20

标签: c# design-patterns tdd domain-driven-design onion-architecture

我目前正在开发一个严重依赖外部组件的项目 - 主要是物理设备,如路由器,交换机,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);
    }

}

1 个答案:

答案 0 :(得分:0)

问自己这个问题,我的服务是否包含与自然不属于聚合或值对象的域相关的业务逻辑?如果是,则它是域服务并且属于域。如果您要做的是与外部系统(ping,ftp)进行通信,则可能是应用程序服务,甚至是六边形体系结构的端口/适配器环中的应用程序服务。请参阅http://alistair.cockburn.us/Hexagonal+architecture