2012-11-29 51 views
0

基於該教程JAVA頁面上的一個DAO層:http://tutorials.jenkov.com/java-persistence/dao-manager.html實現了DAO經理和塊

我想實現在Xcode的iOS相同的概念。

目標是提供DAOManager:DAOCommand(定義爲協議)+他的執行方法的實現。我可以創建一個實現該協議的特定接口,但正如上面提到的示例,我想在調用它時實現該方法。如果我是對的,可以使用BLOCK在objective-c中實現。

的代碼
public interface DaoCommand { 
    public Object execute(DaoManager daoManager); 
} 

樣品請求CRUD服務:

DaoManager daoManager = daoFactory.createDaoManager(); 
    Person person = (Person) 
    daoManager.executeAndClose(new DaoCommand(){ 

    public Object execute(DaoManager manager){ 
     return manager.getPersonDao().readPerson(666); 
    } 

    }); 

我試圖實現它以下面的方式:提供所提到的頁上的Java代碼

例 1/DAOCommand:

@protocol IDaoCommand 

- (id) executeUsingManager:(DAOManager*)pDAOManager; 

@end 

2/My PoiCRUDService接口與方法getListOfPoi調用DAOManager:

- (id) getListOfPoi { 

DAOFactory* daoFactory = [[DAOFactory alloc] initWithOfflineMode:YES]; 
DAOManager* daoManager = [daoFactory createManager]; 

[daoManager executeAndCloseDaoCmdBlock:^(id<POIDAO> pPoiDAO) { 
    [pPoiDAO getListPoi]; 
}]; 
} 

3 /我DAOManager與方法executeAndClose:

- (id) executeAndCloseDaoCmdBlock:(id(^)(id<IDaoCommand>))pDaoCmdBlock { 

// Execute the query 
//id returnObject = [[self getPoiDAO] getListPoi]; 
id returnObject = pDaoCmdBlock(self); 

// Close the connection 
[self.dataSource closeConnection]; 

return returnObject; 
} 

當我看到我的代碼,我沒有看到DAOEntity(POIDAO)的創建。實際上,我很難看到如何將示例Java代碼轉換爲xCode。任何想法的步驟和方法?

感謝您的任何想法或建議。 St.

回答

0

這是我的一瞥。由於缺少Java中的函數類型,似乎DaoCommand僅用作函數對象接口。在Objective-C中,你可以只是一個塊類型。爲了方便起見,您可以將其鍵入DaoCommand

typedef id (^DaoCommand)(DaoManager *); 

然後你的樣品的準確翻譯將是這樣的:

DaoManager *daoManager = [daoFactory createDaoManager]; 
Person *person = 
[daoManager executeAndClose:^(DaoManager *manager){ 
    return [[manager getPersonDao] readPerson:666]; 
}]; 

我不能給你任何幫助與其他功能,因爲我沒有看到他們的Java代碼,但executeAndClose:現在應該採用類型爲DaoCommand(這是塊類型)的參數。確保按照正常的塊編碼規則進行設置。

+0

謝謝你的幫助newacct,我會嘗試一下你給我的代碼樣本。但是在關閉這個主題之前的最後一個問題,我要實現daoManager的executeAndClose方法。假設這個實現必須:1 - 打開一個連接,2 - 執行塊的代碼,3 - 關閉在步驟1打開的連接。它是:(id)executeAndClose:(DaoCommand)pDao {/ * 1-打開連接; */.../* 2 - 執行區塊*/pDao(self);/* 3-Close Connection */...},語法是:pDao(self)是執行將daoManager本身作爲參數傳遞的塊的正確方法 – xiaolong97427