集成应用程序
在本节中,我们将整合我们测试驱动的应用程序的各个组件。我们将形成一个微服务,运行我们的端点并提供服务的前端 Web 接口。它将使用 Postgres 数据库进行存储。
我们需要编写一个简短的 main()
方法,将代码的主要组件链接在一起。这将涉及创建具体对象并将依赖项注入构造函数中。main()
方法存在于 WordzApplication
类中,这是我们完全集成的 Web 服务的入口点:
package com.wordz;
import com.wordz.adapters.api.WordzEndpoint;
import com.wordz.adapters.db.GameRepositoryPostgres;
import com.wordz.adapters.db.WordRepositoryPostgres;
import com.wordz.domain.Wordz;
public class WordzApplication {
public static void main(String[] args) {
var config = new WordzConfiguration(args);
new WordzApplication().run(config);
}
private void run(WordzConfiguration config) {
var gameRepository
= new GameRepositoryPostgres(config.getDataSource());
var wordRepository
= new WordRepositoryPostgres(config.getDataSource());
var randomNumbers = new ProductionRandomNumbers();
var wordz = new Wordz(gameRepository,
wordRepository,
randomNumbers);
var api = new WordzEndpoint(wordz,
config.getEndpointHost(),
config.getEndpointPort());
waitUntilTerminated();
}
private void waitUntilTerminated() {
try {
while (true) {
Thread.sleep(10000);
}
} catch (InterruptedException e) {
return;
}
}
}
main()
方法实例化了领域模型,并将适配器类的具体版本依赖注入其中。一个值得注意的细节是 waitUntilTerminated()
方法。这可以防止 main()
在应用程序关闭之前终止。这反过来又使 HTTP 端点能够继续响应请求。
应用程序的配置数据保存在 WordzConfiguration
类中。它具有端点主机和端口设置的默认值,以及数据库连接设置。这些也可以通过命令行参数传递。该类及其相关测试可以在本章的 GitHub 代码中看到。
在下一节中,我们将使用流行的 HTTP 测试工具 Postman 来使用 Wordz Web 服务应用程序。