Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 远程设备的域模型_Oop_Design Patterns_Domain Driven Design_Solid Principles - Fatal编程技术网

Oop 远程设备的域模型

Oop 远程设备的域模型,oop,design-patterns,domain-driven-design,solid-principles,Oop,Design Patterns,Domain Driven Design,Solid Principles,我正在寻找一个领域模型场景的设计建议 假设我有一组机器人,每个机器人都可以通过无线网络连接控制 我有一个IRobot域对象,它代表一个真实世界的机器人。界面看起来是这样的: public interface IRobot { void MoveHeadUp(int toAngle); void MoveHeadDown(int toAngle); int GetHeadAngle(); } 示例场景:一个虚拟机器人显示在GUI中。在脱机模式下,GUI显示如果我们告诉域对

我正在寻找一个领域模型场景的设计建议

假设我有一组机器人,每个机器人都可以通过无线网络连接控制

我有一个IRobot域对象,它代表一个真实世界的机器人。界面看起来是这样的:

public interface IRobot
{
    void MoveHeadUp(int toAngle);
    void MoveHeadDown(int toAngle);
    int GetHeadAngle();
}
示例场景:一个虚拟机器人显示在GUI中。在脱机模式下,GUI显示如果我们告诉域对象(IRobot)将其头部抬起5度会发生什么

在联机模式下,GUI将显示机器人移动,命令将发送给物理机器人,它也将移动

我正在尝试围绕此域对象添加远程功能,即通过以太网或串行等获取/设置远程状态。我不想因网络连接问题而污染域对象


实现IRobot域行为并将远程连接实现细节分开的最佳方法是什么?

我的观点是消息传递

你的所有命令(这就是你给你的机器人的命令)都可以通过你需要的任何东西(你选择的交通工具)进行有效的通信,你的机器人(虚拟的或物理的)将接收命令并执行它

您可以将这些机器人视为端点。每个端点都有一个名称/地址。您正在向这些机器人发送命令,而不再关心如何在机器人上执行(物理或模拟)命令

你提到

在线模式


这是否意味着您也有脱机模式?如果是这样的话,我肯定会调查消息传递

我对这一点的看法是信息

你的所有命令(这就是你给你的机器人的命令)都可以通过你需要的任何东西(你选择的交通工具)进行有效的通信,你的机器人(虚拟的或物理的)将接收命令并执行它

您可以将这些机器人视为端点。每个端点都有一个名称/地址。您正在向这些机器人发送命令,而不再关心如何在机器人上执行(物理或模拟)命令

你提到

在线模式


这是否意味着您也有脱机模式?如果是这样的话,我肯定会调查消息传递

我不确定DDD是否最适合这个。它最适合用于由人发起业务流程的协作领域。你会从DDD中得到很多刚性,在IMO中几乎没有什么好处。这是一个有趣的问题。我会继续关注它@guillaume31这与更新数据库有什么不同吗?我可以看出,在使用活动记录时,对象直接与DB/IRobot对话,而在使用DDD时,域模型的行为类似于实际的机器人,并在将其提交给真正的机器人之前验证所有动作。不确定是否使用DDD进行通信。是的,我不是建议使用DDD进行通信:)我想对域行为进行建模并分离通信。我不确定DDD是否最适合这种情况。它最适合用于由人发起业务流程的协作领域。你会从DDD中得到很多刚性,在IMO中几乎没有什么好处。这是一个有趣的问题。我会继续关注它@guillaume31这与更新数据库有什么不同吗?我可以看出,在使用活动记录时,对象直接与DB/IRobot对话,而在使用DDD时,域模型的行为类似于实际的机器人,并在将其提交给真正的机器人之前验证所有动作。不确定是否使用DDD进行通信。是的,我并不是建议将DDD用于通信:)我想对域行为进行建模并分离通信。我还考虑了消息总线方法,随着设计的充实,它开始变得更有意义。谢谢你的帮助!我还考虑了消息总线方法,随着我们充实设计,它开始变得更有意义。谢谢你的帮助!