0

我目前正在试图找到一种方法来映射从一个对象到另一个,其中第一个是域模型,另一个是代表相同事物的对象,但对于完全不同的对象使用。一个简单的例子:域驱动设计映射

public class SnmpDeviceService { 

    private readonly Dictionary<int, 3rdPartyLibObj> devices; 
    private SnmpLibrary snmp; 

    public SnmpDeviceService() { 
     snmp = new SnmpLibrary(); 
     snmp.ObjOnlineEvent += DeviceOnlineEvent; 
    } 

    public void Add(MyDevice device) { 
     3rdPartyLibObj libObj = new 3rdPartyLibObj(device.IpAddress); 
     devices.Add(device.Id, libObj); 
     snmp.Observe(libObj); 
    } 

    public void DeviceOnlineEvent(object sender, args) { 
     // Question here! 
    } 

问题

现在我已经收到libObj(即不是我)回来了更多的信息。我想现在调用一个域事件,但另一个侦听某个域事件的服务不知道类型3rdPartyLibObj,他只知道MyDevice。我现在如何从3rdPartyLibObj映射到MyDevice,如果它们代表相同的东西但看起来不同?如果我在等待DeviceOnlineEvent的时候想保留MyDevice,应该如何在我的字典中引用它以保持MyDevice和3rdPartyLibObj的上下文?

像这个?:

public Dictionary<int id, Tuple<MyDevice, 3rdPartyLibObj>>(); 
+0

不是保存一个元组,而是创建一个包装MyDevice和你的3rdPartyLibObj类的对象。我不知道3rdPartyLibObj的功能,但我更喜欢任何事件直接在这个包装器对象上触发,并作为域事件从其中派发给任何其他观察者。 –

回答

0

如果LibObj是不是你的,你为什么在你的环境中使用它?

告诉我,如果我误解你的问题......在你的上下文(限界上下文明确定义?)你用这个东西的目的是mydevice在和3rdPartyLibObj来自不同背景(所以上下文如何不同沟通吗?你想与Context Map或类似的东西?)。如果确切的话,我建议你限制在你的上下文中使用3rdPartyLibObj(使用反腐层?)。