使用DAO管理器和块实现DAO层



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

我试图用xCode for iOS实现同样的概念。

目标是提供一个DAOManager:一个DAOCommand(定义为协议)+他的执行方法的实现。我可以创建一个实现协议的特定接口,但正如前面提到的例子,我想在调用该方法时实现它。如果我是对的,那么在objective-c中使用BLOCK可以实现这一点。

上述页面上提供的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/My PoiCRUDService接口,带有调用DAOManager:的方法getListOfPoi

- (id) getListOfPoi {
DAOFactory* daoFactory = [[DAOFactory alloc] initWithOfflineMode:YES];
DAOManager* daoManager = [daoFactory createManager];
[daoManager executeAndCloseDaoCmdBlock:^(id<POIDAO> pPoiDAO) {
[pPoiDAO getListPoi];
}];
}

3/My 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。你知道该怎么做吗?

谢谢你的任何想法或建议。圣

这是我的建议。由于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的参数(这是一种块类型)。请确保遵循块的正常编码规则,并且应该进行设置。

最新更新