Interfejsy - CRUD

0

Czy dobrą praktyką jest użycie interfejsu gdy ma się do czynienia z operacjami CRUD?

1

Pytanie jest zbyt ogólne, wiec odpowiedz: „To zależy”. O co konkretnie chodzi? Masz jakiś kawałek kodu, żeby sprawdzić zasadność użycia interfejsu?

0

Nie mam kawałka kodu. Podniosłem się z łóżka i wpadło mi do głowy takie pytanie. Poza tym kilka dni temu widziałem gdzieś w sieci kawałek kodu w którym zastosowano interfejs do wspomnianych operacji.

Załóżmy jednak że mamy taki przykład. Dwie tabele Employee, Company. Na obu będą operacje crudowe (bez Delete). Będą reprezentowały różne obiekty. Kilka firm, a w nich zatrudnieni pracownicy. Skupmy się na samej operacji Create.

Dla takiej operacji kiedy zastosować interfejs, a kiedy go pominąć?
Implementacja metod będzie różna ze względu na różne typy obiektów. Czy to wystarczy? W pierwszym przypadku dodajemy pracowników, w drugim firmy.

2

To zależy od architektury. Jak masz ordynarnego chamskiego CRUDA (czyli aplikacja to przelotka do bazy danych) to może nie potrzebujesz, jak masz jakąs logike to takie coś się przyda bo możesz wstrzyknąć implementancje z HashMapą do testów jednostkowych (na pewno lepsze to niż mockosturbacja), a na przykład w hexagonalnej to już podstawa, tam masz np


public interface PersistEmployeePort {

  EmployeeId saveEmployee(Employee employee);
  
  Traversable<EmployeeId> saveEmployees(Traversable<Employee> employees);

}

Umożliwia to zmiane sposobu zapisu do bazy danych, możesz zmienic SQL na NOSQL albo nawet na pliki bez zmiany logiki aplikacji.

Zakładam że chodzi o operacje dostępu do warstwy persystencji

2

Słusznie zauważyłeś, że już był taki wątek: Kiedy rozbijać serwis na interefejs?

Jeśli masz 100% cruda to pewnie nie znajdzie się żadne zastosowanie interfejsu (pomijam tutaj interfejsy pod Spring Data czy Feign Client), bo nawet jeśli chodzi o testowalność, to całość ogarniesz testem integracyjnym.

Natomiast rzadko kiedy jest taki czysty CRUD, wiele zależy od planów na rozwój aplikacji. Dzięki modularyzacji możesz wydzielić taki crudowy moduł i zastosować wewnątrz uproszczona architekturę (bez logiki, bez interfejsów, bez niczego).

1 użytkowników online, w tym zalogowanych: 0, gości: 1