如何实现的CRUD操作
我有创建,更新,删除和选择操作的用户界面,所以为了这个,我想到了用命令模式如何实现的CRUD操作
MyServlet
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException
{
InsertCommand insertCommnd = new InsertCommand();
DeleteCommand deleteCommnd = new DeleteCommand();
设计其命令模式//创建DTO员工与请求参数并把它传递给调用者
if(req.getParameter("action").equals("insert"))
Invoker invoker = new Invoker();
invoker.setCommand(insertCommnd);
invoker.pressButton(emp);
}
// * 祈求 *
public class Invoker
{
private Command command;
public void setCommand(Command command)
{
this.command = command;
}
public void pressButton(Employee emp)
{
command.execute(emp);
}
}
// 命令的.java
public interface Command
{
public void execute();
}
的DeleteCommand的.java
public DeleteCommand implements Command
{
Employee emp;
public DeleteCommand(Employee emp)
{
this.emp = emp;
}
public void execute()
{
// SQL Query to delete Records
}
}
InsertCommand.java
public InsertCommand implements Command
{
Employee emp ;
public InsertCommand(Employee emp)
{
this.emp = emp;
}
public void execute()
{
// SQL Query to insert Records
}
}
同样有一个更新记录命令
我的问题是,我怎么能解决这个在选择操作的情况下,因为它从数据库返回的ArrayList?
也请分享你对这个设计的想法,因为我是设计软件的新手。
你是正确的方法,这意味着你正试图在你的代码中使用设计模式。
在你的情况下,你正在使用错误的pattern.You应该使用DAO
模式。
但是说错了并不意味着你的方法无法使用。它只是DAO
是DB的标准。
在你的情况你的问题是你的execute
方法返回void
,你需要一个方法(额外),返回List
。
您可以为选择返回List
第二种方法,并给它一个通用名称,并在你的其他指令只是抛出一个异常UnsupportedMethod
例如
public interface Command
{
public void execute();
public List fetch();
}
在将CREATE,INSERT和DELETE建模为发送到命令队列的命令时,可以考虑将您的SELECT操作构建为DAO或服务类上的传统方法调用。这是一种称为Command Query Responsibility Segregation的建筑模式。
CQRS的初始复杂度比简单的“掌握DAO对象上的所有事件”命令式编程稍微高一些,但它可以提供非常难以实现的优点,特别是当命令本身存储在数据存储区中时一个附加的时尚)。其中之一就是可以随时查看数据的状态。
+1:尼斯模式 – Cratylus 2012-03-31 08:27:15
这是“简单的\”巴掌一切\“”的方法,我在我的答案提及。它的确比CQRS更普遍,并且在大多数情况下完全有效。有些情况下CQRS更适合,所以“错误的模式”有点过于强调IMO(我自己的“一巴掌”措辞可能有点过于苛刻)。两者都是有效的,DAO更容易和更普遍。 – Barend 2012-03-31 08:21:19
@ user384706谢谢,所以你的意思是说,如果返回类型将是相同类型知道的情况下去命令模式? – Pawan 2012-03-31 08:22:26
@ yyyi777一个不错的可靠方法是使命令类实现'java.util.concurrent.Future'(最简单的方法是从java.util.concurrent.FutureTask中扩展或包装)。 – Barend 2012-03-31 08:26:10