【问题标题】:Implementing an DAO layer with a DAO Manager and Block使用 DAO 管理器和块实现 DAO 层
【发布时间】:2012-11-29 11:38:03
【问题描述】:

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

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

目标是提供一个 DAOManager :一个 DAOCommand(定义为协议)+他的 execute 方法的实现。我可以创建一个实现协议的特定接口,但正如上面提到的例子,我想在调用它时实现该方法。如果我是对的,则可以使用 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/ DAO 命令:

@protocol IDaoCommand

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

@end

2/ 我的 PoiCRUDService 接口,带有调用 DAOManager 的方法 getListOfPoi :

- (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。关于步骤和方法的任何想法?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助 newacct,我将尝试使用您给我的代码示例。但是在关闭这个主题之前的最后一个问题,我确实实现了 daoManager 的 executeAndClose 方法。假设这个实现必须:1 - 打开一个连接,2 - 执行块的代码,3 - 关闭在第 1 步打开的连接。它会是:(id)executeAndClose:(DaoCommand)pDao { /*1-打开连接;*/... /*2-执行块*/ pDao(self); /*3-关闭连接*/ ...},语法是:pDao(self) 执行块的正确方法,将 daoManager 本身作为参数传递
    猜你喜欢
    • 2012-09-30
    • 2019-10-10
    • 2014-01-28
    • 1970-01-01
    • 2010-11-05
    • 2011-12-28
    • 2012-09-21
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多