Аспект ориентируемое программирование в QT

Я пытаюсь получить голову вокруг AOP, и некоторый спокойный Код действительно помог бы.

Из Википедии вот некоторый пример кода (легок для QT/программиста на C++ читать):

void transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger)
   throws Exception {
   logger.info("transferring money...");
   if (! checkUserPermission(user)){
     logger.info("User has no permission.");
     throw new UnauthorizedUserException();
   }
   if (fromAcc.getBalance() < amount) {
     logger.info("Insufficient Funds, sorry :( ");
     throw new InsufficientFundsException();
   }

   fromAcc.withdraw(amount);
   toAcc.deposit(amount);

   //get database connection

   //save transactions

   logger.info("Successful transaction. :) ");
 }

И затем "aspectized":

void transfer(Account fromAcc, Account toAcc, int amount) throws Exception {


   if (fromAcc.getBalance() < amount) {
     throw new InsufficientFundsException();
   }

   fromAcc.withdraw(amount);
   toAcc.deposit(amount);
 }

aspect Logger 
{

    void Bank.transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger)
    {
    
        logger.info("transferring money...");
    }

    void Bank.getMoneyBack(User user, int transactionId, Logger logger)
    {
        logger.info("User requested money back");
    }

    // other crosscutting code...
}

QT имеет сигналы и слоты для отделения объектов. Но я все еще должен испустить сигналы.

Так: это может быть сделано с QT, или мне нужна некоторая специальная платформа/препроцессоры, как ссылается в статье Википедии?

У меня есть чувство, что должен быть некоторый прием, так как QT использует Компилятор Метаобъекта, и некоторая функциональность могла бы быть "введена" с динамическими методами.... просто сматывание в клубок слюны здесь ;)

Править: Дать лучший контекст: Я действительно люблю динамические аспекты (питание) спокойного метаобъекта с сигналами и слотами и хотел бы сохранить спокойное чувство к нему. Таким образом моя идея состоит в том, чтобы использовать слоты (или сигналы), когда точка сокращает. Например:

Если я определяю slot Bank::transfer(...) и затем signal Bank::OnBeforeTranfer() и signal Bank::OnAfterTransfer(). Если я затем подключаю их к другим аспектам, говорят Security::transfer() и Logger::transfer() (весь QObjects) я могу заблокировать вызовы (как сбой OnBeforeTransfer).

Но, если бы мы затем берем его к следующей эволюции для получения меньше и более чистый код, я хотел бы избавиться от OnXXXX сигналы и подключение Bank::transfer слот к Security::transfer слот и Logger::transfer. Что-либо динамическое в QT?: Как порядок вызова слотов и и предотвращение следующего вызова в "цепочке слота"?

Этот целый контекст можно все еще считать правом AOP? Я пытаюсь придерживаться "сокращений точки уровня метода" или являюсь мной полностью не по существу здесь?

13
задан Derick Schoonbee 2 April 2011 в 10:17
поделиться