كيف تبدأ في كتابة خدمة مصغرة في Spring Boot حتى لا تصاب بالصداع لاحقًا

مرحبا! اسمي Zhenya ، أنا مطور Java في Usetech ، مؤخرًا كنت أعمل كثيرًا مع بنية الخدمات المصغرة ، وفي هذه المقالة أود مشاركة بعض النقاط التي قد تكون مفيدة للاهتمام بها عند كتابة خدمة مصغرة جديدة في Spring Boot.



قد يجد المطورون المتمرسون هذه التوصيات واضحة ، لكنهم جميعًا مأخوذة من ممارسة العمل في مشاريع حقيقية.



1. ترك وحدات التحكم رقيقة



في بنية الطبقات التقليدية ، تقبل فئة وحدة التحكم الطلبات وتوجهها إلى الخدمة ، بينما تتعامل الخدمة مع منطق الأعمال. ومع ذلك ، في بعض الأحيان في طرق وحدة التحكم ، يمكنك العثور على نوع من التحقق من صحة معلمات الإدخال ، وكذلك تحويل الكيان إلى DTO.



على سبيل المثال:



@GetMapping
public OperationDto getOperationById(@PathVariable("id") Long id) {

    Optional<Operation> operation = operationService.getById(id);

    if (operation.isEmpty()) {
        return EMPTY_OPERATION_DTO;
    }

    OperationDto result = mapperFacade.map(operation.get(), OperationDto.class);
    return result;
}


من ناحية أخرى ، يستغرق التعيين سطرًا واحدًا فقط ، ويبدو التحقق من عدم وجود نتيجة منطقيًا تمامًا. ومع ذلك ، في مثل هذه الحالة ، يتم انتهاك مبدأ المسؤولية الحصرية للمراقب. في حين أن التحقق من الصحة أو التعيين بسيط ، فإن سطرين إضافيين من التعليمات البرمجية في طريقة وحدة التحكم ليست ملفتة للنظر على الإطلاق ، ولكن في المستقبل ، قد يصبح منطق التحقق من الصحة والتخطيط أكثر تعقيدًا ، ومن ثم يصبح من الواضح أن وحدة التحكم لا تقبل الطلبات وتعيد توجيهها فحسب ، بل تتعامل معها أيضًا منطق الأعمال.



, , , "", , DTO.



:



@GetMapping
public OperationDto getOperationById(@PathVariable("id") Long id) {
    return operationService.getById(id);
}


:



public OperationDto getById(Long id) {

    Optional<Operation> operationOptional = ... //  operation

    return operationOptional
        .map(operation -> mapperFacade.map(operation, OperationDto.class))
        .orElse(EMPTY_OPERATION_DTO);
}


2. DTO



, DTO REST API, DTO Kafka. , REST Kafka, , DTO . , DTO .



, DTO, , DTO, , . DTO , .



3. WARN-,



, , , , , Spring Boot , , .



WARN, "" Spring Boot 2 Hibernate:

spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning



, - Spring Boot 2 Open Session In View, Hibernate HTTP-.



Open Session In View LazyInitializationException, , Hibernate , , -. , , , ( n+1). .



, Open Session In View , — application.yml :



spring:
  jpa:
    open-in-view: false


4.



, @SpringBootTest , , . , @SpringBootTest, , Spring . , . , , .



:



  • @Import,
  • @ActiveProfiles
  • @MockBean Mockito — , -
  • @TestPropertySource — ,
  • @DirtiesContext — ,


, .. . , :



  • @SpringBootTest
  • @ActiveProfiles("test")
  • protected ( @Autowired) - (@MockBean)


, (@AfterEach), / .



, , , , setUp .



@DirtiesContext.



, - .




All Articles