Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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
Java 命令设计模式在这个用例中的应用?_Java_Design Patterns - Fatal编程技术网

Java 命令设计模式在这个用例中的应用?

Java 命令设计模式在这个用例中的应用?,java,design-patterns,Java,Design Patterns,命令模式:-请求作为命令包装在对象下,并传递给调用者对象。Invoker对象查找可以处理该命令的适当对象,并将该命令传递给执行该命令的相应对象 考虑一个员工管理系统,其中HR人员可以创建/读取/更新/删除员工。在我的职业生涯中,我总是设计这样的用例 Request from browser -> EmployeeController -> EmployeeService -> EmployeeDao java将包含从控制器调用的所有创建/读取/更新/删除操作 在阅读命令模式

命令模式:-请求作为命令包装在对象下,并传递给调用者对象。Invoker对象查找可以处理该命令的适当对象,并将该命令传递给执行该命令的相应对象

考虑一个员工管理系统,其中HR人员可以创建/读取/更新/删除员工。在我的职业生涯中,我总是设计这样的用例

Request from browser ->  EmployeeController -> EmployeeService -> EmployeeDao
java将包含从控制器调用的所有创建/读取/更新/删除操作

在阅读命令模式之后,我看到了另一种方法,控制器将作为调用程序调用适当的CommandHandler,如DeleteCommandHandler/UpdateCommandHandler/CreateComandHandler/ViewCommandHandler


在这里应用命令设计模式有意义吗?

命令设计模式将提供良好的间接层,它不需要仅限于CRUD命令。可能服务层是更合适的调用程序,因为命令对象可以在层内传递,以便更好地使用。Command对象是用Receiver对象(以处理程序的形式)预先编程的,它能够处理请求。额外的优势是审计(命令层操作,如日志记录)命令,因为它们是独立于调用它们的位置调用的。

请详细说明
命令设计模式将提供良好的间接层,它不需要仅限于CRUD命令。可能服务层是更合适的调用器,因为命令对象可以在层内传递以更好地使用。
?@emily在您的设计中,您已经有了服务层。该服务层直接调用DAO对象。您可以根据适当的命令对象实现所有请求(包括CRUD)。这将形成一个命令层,它将打破服务层和能够执行它的实际对象(称为接收方)的直接耦合。这种间接层在大型应用程序中非常有用。命令层可以很好地控制日志记录命令、撤消操作等。元命令可以在其中封装命令。如果我选择命令模式,控制器将找到合适的命令处理程序,如delete命令处理程序,类似于edit命令处理程序。所以,从控制器到服务并没有直接的方向,而是从控制器到commandhandler。对吗?@emily这取决于你的服务层在做什么。一般来说,架构不应该跨层(尽可能)。但在这种情况下,您的命令层将位于控制器和服务之间。只需注意不要在控制器中添加太多的业务逻辑,它应该将业务部分委托给适当的助手类。