【问题标题】:Implementation of domain services领域服务的实现
【发布时间】:2014-03-02 22:21:19
【问题描述】:

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

}

【问题讨论】:

  • 我认为您在域边界缺少意图揭示命令。

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


【解决方案1】:

问自己一个问题,我的服务是否包含与自然不属于聚合或值对象的域相关的业务逻辑?如果是,那么它是一个域服务并且属于该域。如果您尝试做的是与外部系统(ping、ftp)通信,那么它可能是和应用程序服务,甚至更远,在六边形架构的端口/适配器环中。见http://alistair.cockburn.us/Hexagonal+architecture

【讨论】:

    猜你喜欢
    • 2015-12-30
    • 2021-01-08
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多