>how to structure(design pattern)同一进程中涉及的多个类之间的关系

m1m5dgzv  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(502)

tldr公司;我的dailyrecorddatamanager类有代码味道吗?是“神课”吗?我该如何改进结构?
你好,
我正在和spring合作我的第一个项目。它将从马德里(我住的地方)政府网站获取covid-19数据,按地点组织,并通过api提供。
下面是我正在使用的json数据示例。

  1. {
  2. "codigo_geometria": "079603",
  3. "municipio_distrito": "Madrid-Retiro",
  4. "tasa_incidencia_acumulada_ultimos_14dias": 23.4668991007149,
  5. "tasa_incidencia_acumulada_total": 1417.23308497532,
  6. "casos_confirmados_totales": 1691,
  7. "casos_confirmados_ultimos_14dias": 28,
  8. "fecha_informe": "2020/07/01 09:00:00"
  9. }

每个json对象都是特定日期和特定市政区的病例和感染率记录。
在获取数据之后,程序:解析它,过滤它,修剪/舍入一些属性,按位置Map它,使用它为每个位置创建一个对象(districtdata),并将位置districtdata对象写入monodb示例。
目前,我已经按照单一责任原则将流程中的每个步骤划分为不同的类。在链接的屏幕截图中可以看到:
intellij包结构截图
我的问题是我不知道如何将这些多个类链接在一起。
目前我有一个经理班,对我来说有点像上帝班:

  1. @Service
  2. public class DailyRecordDataManager implements DataManager {
  3. private final Logger logger = LoggerFactory.getLogger(DailyRecordDataManager.class);
  4. private final DailyRecordDataCollector<String> dataCollector;
  5. private final DataVerifier<String> dataVerifier;
  6. private final JsonParser<DailyRecord> dataParser;
  7. private final DataFilter<List<DailyRecord>> dataFilter;
  8. private final DataTrimmer<List<DailyRecord>> dataTrimmer;
  9. private final DataSorter<List<DailyRecord>> dataSorter;
  10. private final DataMapper<List<DailyRecord>> dataMapper;
  11. private final DataTransformer dataTransformer;
  12. private final DistrictDataService districtDataService;
  13. public DailyRecordDataManager(DailyRecordDataCollector<String> collector,
  14. DataVerifier<String> verifier,
  15. JsonParser<DailyRecord> parser,
  16. DataFilter<List<DailyRecord>> dataFilter,
  17. DataTrimmer<List<DailyRecord>> dataTrimmer,
  18. DataSorter<List<DailyRecord>> dataSorter,
  19. DataMapper dataMapper,
  20. DataTransformer dataConverter,
  21. DistrictDataService districtDataService) {
  22. this.dataCollector = collector;
  23. this.dataVerifier = verifier;
  24. this.dataParser = parser;
  25. this.dataFilter = dataFilter;
  26. this.dataTrimmer = dataTrimmer;
  27. this.dataSorter = dataSorter;
  28. this.dataMapper = dataMapper;
  29. this.dataTransformer = dataConverter;
  30. this.districtDataService = districtDataService;
  31. }
  32. @Override
  33. public boolean newData() {
  34. String data = dataCollector.collectData();
  35. if (!dataVerifier.verifyData(data)) {
  36. logger.debug("Data is not new.");
  37. return false;
  38. }
  39. List<DailyRecord> parsedData = dataParser.parse(data);
  40. if (parsedData.size() == 0) {
  41. return false;
  42. }
  43. List<DailyRecord> filteredData = dataFilter.filter(parsedData);
  44. List<DailyRecord> trimmedData = dataTrimmer.trim(filteredData);
  45. List<DailyRecord> sortedData = dataSorter.sort(trimmedData);
  46. Map<String, List<DailyRecord>> mappedData = dataMapper.map(sortedData);
  47. List<DistrictData> convertedData = dataTransformer.transform(mappedData);
  48. districtDataService.save(convertedData);
  49. return true;
  50. }
  51. }

我还考虑过将所有涉及的类链接在一个注入依赖项的链中->这样每个类都有流程中的下一个类作为依赖项,并且,如果数据没有问题,在需要时调用链中的下一个类。
但是我也觉得一定有一个设计模式可以解决我的问题!
谢谢!

ulydmbyx

ulydmbyx1#

如果有人发现了这个并且想知道我最终选择了什么样的管道模式。
它让我可以轻松地将我正在使用的所有单独的类组织到一个干净的工作流中。它还使过程的每个阶段都非常容易测试。以及管道类本身!
我强烈建议对java模式感兴趣的人阅读本文,这篇文章是我广泛使用的。

相关问题