Как реализовать командный шаблон для операций CRUD - PullRequest
1 голос
/ 31 марта 2012

У меня есть пользовательский интерфейс с операциями создания, обновления, удаления и выбора, поэтому для этого я подумал о том, чтобы спроектировать его с помощью шаблона команд

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

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

Ответы [ 2 ]

1 голос
/ 31 марта 2012

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

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

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

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

например.

public interface Command 
{ 
public void execute(); 
public List fetch();  
}
1 голос
/ 31 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...