gpt4 book ai didi

java - 对象继承 - 重构问题 - 创建灵活服务的可能性

转载 作者:行者123 更新时间:2023-12-02 09:43:44 25 4
gpt4 key购买 nike

这应该很容易,但显然我缺乏基本知识。我有一项服务,用于在 BugTracking 系统中创建票证。创建插件非常简单。有一个界面

public interface BugTracker {
boolean createAndSendIssue(Issue issue);
boolean updateAndSendIssue(Issue issue);
boolean closeIssue(Issue issue);
}

以及 JIRA 的 API 客户端:

@Component
public class JiraClient implements BugTracker {
@Override
public boolean createAndSendIssue(Issue issue) {
//Logic for using JIRA REST API
return false;
}

@Override
public boolean updateAndSendIssue(Issue issue) {
//Logic for using JIRA REST API
return false;
}

@Override
public boolean closeIssue(Issue issue) {
//Logic for using JIRA REST API
return false;
}
}

Bugzilla 的 API 客户端:

@Component
public class BugzillaClient implements BugTracker {

@Override
public boolean createAndSendIssue(Issue issue) {
//Logic for using BUGZILLA REST API
return false;
}

@Override
public boolean updateAndSendIssue(Issue issue) {
//Logic for using BUGZILLA REST API
return false;
}

@Override
public boolean closeIssue(Issue issue) {
//Logic for using BUGZILLA REST API
return false;
}
}

处理 MVCService 出现问题。它的一部分看起来像:

@Service
public class BugTrackerService {
private final BugzillaClient bugzillaClient;
private final JiraClient jiraClient;
private static final String JIRA_TYPE = "Jira";
private static final String BUGZILLA_TYPE = "Bugzilla";

@Autowired
BugTrackerService(BugzillaClient bugzillaClient, JiraClient jiraClient) {
this.bugzillaClient = bugzillaClient;
this.jiraClient = jiraClient;
}

boolean processIssueTicketRequest(Issue issue){
if ( issue.getBugTrackerType().bugTrackingSystemType.name.equals(JIRA_TYPE)) {
return jiraClient.createAndSendIssue(issue);
} else if (issue.getBugTrackerType().bugTrackingSystemType.name.equals(BUGZILLA_TYPE)){
return bugzillaClient.createAndSendIssue(issue);
} else {
return false;
}
}
}

是否可以在不自动连接所有客户端的情况下创建方法 BugTrackerService.processIssueTicketRequest ?目前这并不是什么大问题,但在与越来越多的系统集成后,该服务将变得复杂。

最佳答案

根据您希望实现的可重用程度,我可能会将检查给定问题是否与接口(interface)中的输入匹配的逻辑,例如

boolean canWorkWithGivenIssue(Issue issue);

有了这个,您就不需要知道您调度的跟踪器的实际类型,只需将它们聚合到列表中即可。如果您使用@Autowired注释一个集合,Spring将为您做到这一点,在这种情况下,它将为您提供所有具有匹配类型的bean。您的服务可能如下所示

@Autowired List<BugTracker> trackers; //autowired on field for brevity

boolean processIssueTicketRequest(Issue issue){
for (BugTracker t : trackers)
if (t.canWorkWithGivenIssue(issue))
return t.createAndSendIssue(issue);
return false;
}

关于java - 对象继承 - 重构问题 - 创建灵活服务的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086205/

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