使用DAO Manager和Block实现DAO层

时间:2012-11-29 11:38:04

标签: xcode ios5 objective-c-blocks dao data-layers

基于页面上的JAVA教程:http://tutorials.jenkov.com/java-persistence/dao-manager.html

我尝试使用xCode for iOS实现相同的概念。

目标是提供DAOManager:DAOCommand(定义为协议)+执行方法的实现。我可以创建一个实现协议的特定接口,但是如上所述,我想在调用它时实现该方法。如果我是对的,可以使用BLOCK在objective-c中实现。

上述页面提供的java代码示例:

 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);
    }

  });

我尝试以下列方式实现它: 1 / DAOCommand:

@protocol IDaoCommand

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

@end

2 /我的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。有关步骤和方法的想法吗?

感谢您的任何想法或建议。 圣

1 个答案:

答案 0 :(得分: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类型的参数(这是一种块类型)。确保遵循块的正常编码规则,您应该设置。