C# 领域驱动设计中的映射
我目前正试图找到一种从一个对象映射到另一个对象的方法,其中第一个是域模型,另一个是表示相同事物的对象,但用途完全不同。一个简单的例子:C# 领域驱动设计中的映射,c#,design-patterns,mapping,domain-driven-design,domain-events,C#,Design Patterns,Mapping,Domain Driven Design,Domain Events,我目前正试图找到一种从一个对象映射到另一个对象的方法,其中第一个是域模型,另一个是表示相同事物的对象,但用途完全不同。一个简单的例子: public class SnmpDeviceService { private readonly Dictionary<int, 3rdPartyLibObj> devices; private SnmpLibrary snmp; public SnmpDeviceService() { snmp = n
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!
}
公共类SnmpDeviceService{
专用只读字典设备;
专用snmplibrarysnmp;
公共SnmpDeviceService(){
snmp=新的SnmpLibrary();
snmp.ObjOnlineEvent+=设备Onlineevent;
}
公共无效添加(MyDevice){
3rdpartylibbj libObj=新的3rdpartylibbj(device.IpAddress);
devices.Add(device.Id,libObj);
snmp.Observe(libObj);
}
公共无效设备OnlineEvent(对象发送方,参数){
//问题在这里!
}
问题
我现在收到了libObj(那不是我的)返回附加信息。我现在想调用一个域事件,但另一个侦听某个域事件的服务不知道3rdPartyLibBj的类型,他只知道MyDevice。如果3rdPartyLibBj表示相同的内容但看起来不同,我现在如何从3rdPartyLibBj映射到MyDevice?如果我想在此期间保留MyDevice我在等待DeviceOnline事件,我应该如何在字典中引用它来保持我的设备和第三方数据库在上下文中
像这样
public Dictionary<int id, Tuple<MyDevice, 3rdPartyLibObj>>();
公共字典();
如果LibObj
不是您的,为什么要在您的上下文中使用它
如果我误解了您的问题,请告诉我……在您的上下文中(定义良好的有界上下文?)您用于此内容的对象是MyDevice,而
3rdPartyLibj
来自不同的上下文(那么不同的上下文如何进行通信?您是否考虑使用或类似的方式?)。如果确实如此,我建议您限制在您的上下文中使用3rdpartylibbj
(使用反腐败层?).与其保存元组,不如创建一个包装MyDevice和您的3rdPartyLibBj类的对象。我不知道3rdPartyLibBj的功能,但我更希望任何事件都直接在这个包装对象上触发,并作为域事件进一步发送给任何其他观察者。