Mam nadzieję, że potrafię to wyjaśnić nieco cnotliwie, ponieważ dzisiaj wyrzuca mi bezpiecznik w moim mózgu. Uczę się TDD w języku C#, więc wciąż próbuję naprawić mój mózg, aby go dopasować.TDD: Metody statyczne, wtrysk zależności, buforowanie i ty!
Załóżmy, że mam klasę Użytkownik, która poprzednio miała statyczną metodę pobierania obiektu użytkownika (uproszczoną poniżej).
public static User GetUser(string username)
{
User user = GetUserFromCache(username);
if(user == null)
{
user = GetUserFromDatabase(username);
StoreObjectInCache(user);
}
return user;
}
Więc staram się przepisać ten używać iniekcji zależność więc mogę Fałszywe poza „GetUserFromDatabase” metoda, jeżeli musi tam pojechać. Oznacza to, że muszę sprawić, aby funkcja nie była statyczna. Podczas gdy warstwa dostępu do danych skonstruowałaby obiekt użytkownika z bazy danych, odwzorowując zwrócone kolumny na właściwości obiektu, pobieranie z pamięci podręcznej zwróci prawdziwy obiekt niebieski. Jednak w przypadku metody niestatycznej nie można po prostu powiedzieć, że jest to nie działa w ten sposób. Chociaż nie jestem światowym ekspertem w tańcu wokół tego z OO, wygląda na to, że prawie będę musiał pobrać obiekt User z pamięci podręcznej i napisać inną funkcję odwzorowania, która przechowałaby zwrócone właściwości obiektu użytkownika do nowego Instancja użytkownika.
Jakie jest rozwiązanie tutaj? Czy brakuje jakiejś magii OO? Czy jedynym rozwiązaniem jest refaktoryzowanie wszystkiego w celu użycia fabryk, zamiast posiadania logiki instancji w samym obiekcie? A może patrzyłem na to zbyt długo i tęskniłem za czymś zupełnie oczywistym?
Dzięki za informację zwrotną! Jeśli chodzi o przeniesienie logiki pamięci podręcznej do trwałości, jestem ciekawy, co się stanie, jeśli obiekt, który stawiam, ma grupę odwołań do buforowanego obiektu ... a następnie buforowany obiekt wypada z pamięci podręcznej. Boli mnie głowa. – Chris
+1: zdecydowanie trzeba oddzielić obawy więcej. posiadanie pamięci podręcznej jako oddzielnej warstwy między aplikacją a warstwą trwałości ma wiele sensu. –