【发布时间】:2017-02-22 11:07:32
【问题描述】:
我正在尝试并行运行 15 项服务,每项服务都会向不同的客户群发送邮件。提取标准因每个服务而异
服务 1、服务 2、服务 3.... 服务 15。每个类都扩展了 NotificationService 类。
NotificationService 类有方法 extractRecipients()、sendMail()、sendSMS()、logNotification()。
所有服务类[1 到 15] 都有 process() 方法,该方法将调用 NotificationService 方法并完成它们的工作。
这是设计java代码的正确方法吗?
而且下面的代码看起来很难看,有什么聪明的方法来处理。请有人帮助我。
public void startService() {
try {
ExecutorService service = Executors.newFixedThreadPool(3);
for (;;) {
service.submit(new Service1(conn) {
public Object call(){
try {
process(conn, param2); // Passing connection & obj
} catch (Exception e) {
throw e;
}
return null;
}
});
service.submit(new Service2(conn) {
public Object call(){
try {
process(conn, param2);
} catch (Exception e) {
throw e;
}
return null;
}
});
// like above i have 15 services. so its ugly.
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public boolean process(Connection conn) throws Exception {
try {
// getRecipientsList(serviceID);
// sendMail(recipientsList);
// logNotificationDetails(notificationList);
} catch (Exception e) {
}
}
【问题讨论】:
-
当您有相同的任务(电子邮件)要执行时,为什么要提供不同的服务?
-
15 封电子邮件?给同一个客户?多么烦人。我建议使用一些逻辑来组合它们。我还将服务操作与发送电子邮件分开。使它成为一个单独的步骤。它们不应扩展 NotifyingService。
-
每个服务类[Service1-15] 都会调用自己的sql并提取收件人。所以15个子类和一个父类..
-
为了可重用性,我编写了 extractRecipients()、sendMail()、sendSMS()、logNotification() 等方法。因为它对所有服务都是通用的。
-
15 封电子邮件未发送给同一客户。例如。不同的客户有不同的提取标准。提取标准将因每个服务类别而异。
标签: java executorservice