我正在重新审视一个学校项目,在这个项目中你有一个简单的java控制台程序,该程序采用空格分隔文件来填充内存中的对象数组,并允许用户对存储的数据执行CRUD操作。
我创建了一个基本的MVC模式,它实现了命令模式,以便在控制器和数据之间传递CRUD命令。我还在实例化时创建了一个存储库类,它将所有对象保存在内存中。
我应该如何授予需要了解存储库实例的类的权限?
答案 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,......使用哪一个很大程度上取决于你的用例和个人偏好。