Aktywne Wpisy
![](https://wykop.pl/cdn/c3397992/EjniaKK_S0bkHhieyb,q60.jpg)
EjniaKK +133
![](https://wykop.pl/cdn/c3201142/656cf9fc4bae86250aa2a9e8cc4a129cf16d877a611bed8fa069403973a6cfd6,w150.png?author=EjniaKK&auth=769e630c4a82c077b490b03042bfce15)
![](https://wykop.pl/cdn/c3397992/redofrompolsza_kOs7c7M2UO,q60.jpg)
redofrompolsza +210
Uważam, że dodatek do Wiedźmina 3 "Serce z Kamienia" jest ogólnie najlepszą historią w grze jaką spotkałem pod względem klimatu. Nawiązania do polskich dzieł, wybór pomiędzy złem, a złem? Z jednej strony dziwnie fałszywa postać o możliwościach większych niż w sumie najgroźniejszy potwór z jakimi idzie nam walczyć, z drugiej zachłanny szlachcic który dopiero gdy osiąga swój cel tracąc po drodze wszystko na czym mu zależało. Miłość, honor, demony, jak zawsze świetna
![](https://wykop.pl/cdn/c3201142/036485086547467243855512626d614c27923ddc5e3894f94bd8410527164cb1,w150.jpg?author=redofrompolsza&auth=5edf5905f246605741084770ac1e6122)
W zasadzie trafiłem na post Jimmy-ego Bogard-a, gdzie proponował podobne rozwiązanie zamiast stosowania repozytorium.
Moja interpretacja tego co on tam napisał, wygląda mniej więcej tak:
Interfejs dla queries
public interface IQueryHandler
where TResult: class
where TArg: class
{
TResult Execute(TArg query);
}
Przykładowa implementacja:
public class TreesTransQuery : IQueryHandler, TreeTransQuery>
{
private readonly DatabaseContext _context;
public TreesTransQuery(DatabaseContext context)
{
_context = context;
}
public List Execute(GetTree query)
{
return _context.Trans
.Where(x =>
_context.Trees
.Where(z => z.Id == query.TreeId)
.Union
( _context.Trees
.Where(z => z.Id == query.TreeId)
.SelectMany(z => z.Children)
).Select(z => z.Id)
.Any(q => x.Entity == $"{q}tree"))
.ToList();
}
}
Wykonanie
var result = new TreesTransQueryHandler(context).Execute(query);
gdzie query jest instancją klasy:
public class TreeTransQuery
{
public int TreeId { get; set; }
}
W sumie koncepcja nie wygląda źle. Zamiast repozytorium z 1000 linii kodu, mamy wiele obiektów, z których każdy reprezentuje konkretne zapytanie czy komendę. Komendy czy zapytania można wstrzyknąć poprzez kontener DI, a można też tworzyć je bezpośrednio korzystając z operatora new. Jak kto woli. Co wy o tym sądzicie?
#programowanie #csharp #aspnet #entityframework #aspnetmvc #wzorceprojektowe
_context.Set
i ograniczyć użycie dodatkowych jeszcze obiektów dla każdego zapytania, jeżeli będzie ono np. takie samo dla wielu różnych encji :>