"EF + Repo considered harmful" considered harmful

1

ale click bait xD

tak mnie właściwie naszło, że chyba ta cała krytyka tego połączenia jest z jakiegoś powodu nadmuchana

pomijając te potencjalne przejścia pomiędzy z np. postgresa na jakieś mongo, to wydaje mi się, że repo nabiera więcej sensu jeżeli zamiast traktowania go jako abstrakcje nad bazą danych, to traktowalibyśmy go jako abstrakcja nad data storage.

Jakiś context: Załóżmy że mamy kilka końcówek w aplikacji które zwracają podobne dane (nie, nie stosujemy graphql)

user_full_profile: imie, nazwisko, obrazek_id, opis, nazwa bloga, opis bloga

user_mobile_profile: imie, nazwisko, obrazek_id, opis

user_for_ad_profile: imie, nazwisko, obrazek_id, nazwa bloga, liczba odsłon bloga w miesiącu

stosując jakiś zewnętrzny mechanizm cachowania typu np. redisa mamy tam te swoje klucze tworzone za pomocą jakiejś konwencji

user_full_fd95069c07504f788f871db95146e5ca
user_mobile_fd95069c07504f788f871db95146e5ca
user_for_ad_fd95069c07504f788f871db95146e5ca

i mając repo łatwo moglibyśmy dodać cache invalidation z jednego miejsca, która zawsze będzie wykonywana niezależnie czy ktoś zapomni dodać / źle to zrobi / coś się pozmienia itd.

public x y z Edit(c data)
{
	var user = updateduser;
	await context.SaveChangesAsync();

	foreach (var key in Redis.Keys.Where(x => x.Contains(user.Id.ToString()))
	{
		Redis.RemoveKey(key);
	}
}

co sądzicie?

0
WeiXiao napisał(a):

pomijając te potencjalne przejścia pomiędzy z np. postgresa na jakieś mongo, to wydaje mi się, że repo nabiera więcej sensu jeżeli zamiast traktowania go jako abstrakcje nad bazą danych, to traktowalibyśmy go jako abstrakcja nad data storage.

Baza danych to nie jest data storage?
A repozytorium jest jeszcze warstwę wyżej.

0

@somekind:

jest, i w tym rzecz, bo cache to nie baza danych(chociaż ktoś mógłby się sprzeczać...). Chodziło mi aby ująć w tym mechanizmy typu cache, a nie ograniczyć repo do db.

1

Repozytorium to kolekcja obiektów biznesowych, ORM służy do operacji na bazie, jeśli chcesz przy okazji operacji na bazie robić coś jeszcze, to w ogóle z repozytorium to związku nie ma, bo to problem infrastrukturalny.

0

@somekind:

To gdzie byś to dał?

0

Zależy jak często jest to potrzebne, jeśli rzadko, to jawnie tam, gdzie Update jest robiony, a jak często to bym zrobił jakiś automat odpalający się w jakimś post-update event dla odpowiednio oznaczonych operacji/modeli.

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