2012-03-31 14 views
1

у меня есть интерфейс с Create, Update, Delete и Select операций, поэтому для этого я думал, разработать его с помощью командаКак реализовать команда для CRUD операций

MyServlet

public void doGet(HttpServletRequest req,HttpServletResponse res) 
    throws ServletException,IOException 
    { 

InsertCommand insertCommnd = new InsertCommand(); 
DeleteCommand deleteCommnd = new DeleteCommand(); 

// Создание Работника DTO с параметрами запроса и передать его INVOKER

if(req.getParameter("action").equals("insert")) 

    Invoker invoker = new Invoker(); 

invoker.setCommand(insertCommnd); 
invoker.pressButton(emp); 


    } 

// * Invoker *

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 из базы данных?

Также, пожалуйста, поделитесь своими идеями по этому дизайну, так как я новичок в разработке программного обеспечения.

ответ

1

Вы находитесь в правильном подходе, подразумевая, что вы пытаетесь использовать шаблоны проектирования в своем коде.
В вашем случае вы используете неправильный шаблон. Вместо этого вы должны использовать шаблон DAO.

Но неправильное не означает, что ваш подход не может быть использован. Это только DAO является стандартом для БД.

В вашем случае ваша проблема в том, что ваш метод execute возвращает void, и вам нужен способ (дополнительный), который возвращает List.

Вы можете создать второй метод выбора, который возвращает List и дать ему общее имя и в других ваших командах просто бросить UnsupportedMethod исключение

Э.Г.

public interface Command 
{ 
public void execute(); 
public List fetch(); 
} 
+0

Это «просто \» хлопнуть все \ «» подход я упоминаю в моем ответе. Это действительно намного чаще, чем CQRS и отлично подходит для большинства случаев. Есть случаи, когда CQRS лучше подходит, поэтому «неправильный шаблон» слишком силен IMO (моя собственная «шлепать все» формулировка может быть слишком жесткой). Оба действительны, DAO проще и гораздо чаще. – Barend

+0

@ user384706 Спасибо, значит, вы хотите сказать, что идите в Command Pattern в случае, если типы возвращаемого типа будут иметь одинаковый тип? – Pawan

+0

@ yyyi777 хороший, прочный подход состоит в том, чтобы заставить командные классы внедрять 'java.util.concurrent.Future' (самый простой способ - это расширение или перенос в' java.util.concurrent.FutureTask'). – Barend

1

Вы можете создавать операции SELECT как традиционные вызовы методов в классе DAO или сервисе при моделировании CREATE, INSERT и DELETE в качестве команд, отправленных в очередь команд. Это архитектурный образец, известный как Command Query Responsibility Segregation.

CQRS имеет несколько более высокую начальную сложность, чем просто «пощелкать все на объекте DAO», но может предложить преимущества, которые очень трудно достичь иначе, особенно когда сами команды хранятся в хранилище данных (в только добавочный способ). Одна из них - возможность просматривать состояние ваших данных в любой момент времени.

+0

+1: Хороший шаблон – Cratylus

Смежные вопросы