gpt4 book ai didi

java - 索引服务设计-同步/异步

转载 作者:行者123 更新时间:2023-11-30 04:24:47 25 4
gpt4 key购买 nike

我需要对项目建立索引。此服务应运行同步或异步。

我开始设计界面

public interface IndexService{
public void index();
}

还有两种实现,一种用于异步索引:

public class AsyncIndex implements IndexService {

public void index(){
//... Creates a Thread and index the items
}

}

另一个同步索引

public class SyncIndex implements IndexService {

public void index(){
//... Creates a Thread and index the items
}

}

但是现在有另一种设计,它有一个 IndexService,它有一个标志作为异步服务或同步服务执行:

public interface IndexService{
public void index(int mode);
}

现在实现将知道如何基于该标志运行。

我知道第一个设计更好,但我需要优点和缺点来解释原因。

最佳答案

我选择第一种方法,因为

1-代码更干净 AsyncInex 类仅具有与异步调用相关的代码,而syncIndex 将具有其自己的代码。2-你可以避免 else if

...
public void runService(IndexService service) {
service.index()
}

// some where in your code
runService(new AsyncIndex());
// or
runService(new SyncIndex());

当您使用接口(interface)“IndexService”时,您可以随时更改实现,而无需更改客户端代码。特别是如果您使用 DI 框架,您可以享受它的乐趣;)。

这对于不允许客户端代码了解实现非常重要。假设您正在为数据库建立索引。当数据量很大时,您希望执行异步索引;当数据量较小时,您希望执行同步索引。调用者不应该了解 Index 的调用方式。这样您就可以在不同情况下采用不同的策略,而无需更改调用者代码。如果您采用第二种方法,您必须做一些额外的工作。

关于java - 索引服务设计-同步/异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com