مرحبا! اسمي 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 -
@MockBeanMockito — , - -
@TestPropertySource— , -
@DirtiesContext— ,
, .. . , :
-
@SpringBootTest -
@ActiveProfiles("test") -
protected(@Autowired) - (@MockBean)
, (@AfterEach), / .
, , , , setUp .
@DirtiesContext.
, - .