I have to create a batch process which reads data from DB , process it and saves it in db . The batch data is fetched organization wise ( each organization has set of data to be processed) at once.We need to process only specific set of data i.e organization related and save it into db. Hence i have designed below classes . Does this design breaks SRP and OCP?
Should the process method in DepositProcess have the code to iterate the batch data ?
Batch Processor Interface
package com.ibank.batch;
public interface BatchProcessor {
public void process();
}
Deposit Processort class
package com.ibank.batch;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.ibank.batch.svc.DepositBatchProcessorSvc;
public class DepositProcessor implements BatchProcessor {
@Override
public void process() {
DepositBatchProcessorSvc svc = new DepositBatchProcessorSvc();
HashMap<String, List<String>> batchData = svc.fetchBatchData();
Set<String> key = batchData.keySet();
Iterator<String> keyItr = key.iterator();
while (keyItr.hasNext()) {
String organizationId = (String) keyItr.next();
List<String> claimsList = batchData.get(organizationId);
svc.saveBatchData(claimsList);
}
}
}
Service interface and implementation class
package com.ibank.batch.svc;
import java.util.List;
public interface BatchProcessorSvc {
public Object fetchBatchData();
public <T> void saveBatchData(List<T> data);
}
package com.ibank.batch.svc;
import java.util.HashMap;
import java.util.List;
public class DepositBatchProcessorSvc implements BatchProcessorSvc {
@Override
public HashMap<String, List<String>> fetchBatchData() {
return null;
}
@Override
public <String> void saveBatchData(List<String> claimList) {
}
}
DAO interface and implementation
package com.ibank.batch.dao;
import java.util.List;
public interface BatchProcessorDao {
public Object fetchBatchData();
public <T> void saveBatchData(List<T> data);
}
package com.ibank.batch.dao;
import java.util.HashMap;
import java.util.List;
public class DepositBatchProcessorDao implements BatchProcessorDao {
@Override
public HashMap<String, List<String>> fetchBatchData() {
return null;
}
@Override
public <String> void saveBatchData(List<String> claimList) {
}
}