AspectJ - Зачем ставить контроль транзакций в отдельном месте? - PullRequest
0 голосов
/ 08 мая 2011

Хорошо, я не полностью понял философию, почему AOP AspectJ хорош для. Теперь я реализовал ведение логов и транзакций при снятии денег с банковского счета. Хорошо, почему это хорошо делать? Я мог бы также реализовать элемент управления в том же файле класса, где я также сохранил все свои банковские методы (снятие, внесение, баланс и т. Д.). И при ведении журнала я мог бы создать для него новый класс, а затем сделать его экземпляр в классе BankAccount.

Так зачем мне для этого использовать AOP, AspectJ? Я не до конца понял идею ...

Вот мой файл аспектов

public aspect SafeWithdrawal {                                                                                  

pointcut checking(BankAccount bk, float x): execution(* BankAccount.withdraw(float)) && target(bk) && args(x);                                                                                                   

public static void BankAccount.LogChange(String str){                                                    
    System.out.println(str);                                                                             
}                                                                                                        


before(BankAccount b, float x) : checking(b, x) {
        if(b.getBalance() >= x) {
            BankAccount.LogChange("Account changing. $" + x + " withdrawn...");
        } else {               
            BankAccount.LogChange("Account does not have. $" + x + " to withdrawn...");
        }

}                                                                                                        

}  

1 Ответ

2 голосов
/ 08 мая 2011

Идея состоит в том, что ваши доменные методы, такие как вывод, могут оставаться сфокусированными на ваших бизнес-процессах, а второстепенные проблемы, такие как ведение журнала, транзакции, профилирование и т. Д., Не мешают.

...