如何在不提供程序范围访问的情况下模拟内存中的数据层?

时间:2015-11-22 20:19:48

标签: java

我正在重新审视一个学校项目,在这个项目中你有一个简单的java控制台程序,该程序采用空格分隔文件来填充内存中的对象数组,并允许用户对存储的数据执行CRUD操作。

我创建了一个基本的MVC模式,它实现了命令模式,以便在控制器和数据之间传递CRUD命令。我还在实例化时创建了一个存储库类,它将所有对象保存在内存中。

我应该如何授予需要了解存储库实例的类的权限?

2 个答案:

答案 0 :(得分:2)

您可以通过传递对数据层的引用来提供访问权限,就像对任何其他对象一样。

我建议您避免使对象static即全局可访问。改为使用依赖注入。

答案 1 :(得分:1)

您可能正在寻找依赖注入模式。

假设您有一个控制器类和一个实现CRUD样式接口的存储库类,那么您的控制器构造函数将获取接口类型的单个参数。无论创建控制器是什么,应用程序或Web框架(如Spring-MVC)都可以传入具体存储库类型的实例。在单元测试中,使用伪造或模拟存储库创建控制器应该很容易。

示例:

public interface Repository {
  MyItem getAnItem(int id);
  void updateItem(MyItem item);
}

public class SqlBackedRepository implements Repository {
  @Override
  public MyItem getAnItem(int id) {
      sqldb.execSql("select item...");
  }
}

public class MyItemController {
  private final Repository repository;
  public MyItemController(Repository repository) {
  ...
  }

  public doControlThing() {
      final MyItem item = repository.getItem();
      item.doStuff();
      repository.updateItem(item);
  }
}

等等。

有很多DI框架 - Spring,Guice,Dagr,Weld,......使用哪一个很大程度上取决于你的用例和个人偏好。