Co zrobić gdy zaczyna się obchodzenie enkapsulacji?

0

Powiedzmy, że mamy taką prostą klasę

public class Order
{
	public DateTime CreationDate { get; } = DateTime.Now;
}

i nagle w testach potrzebuję zrobić Ordery z CreationDate na rok 2009

Czy jest jakiś inny prosty sposób niż ctory(a dalej pewnie builder), które miałyby jedynie zastosowanie w testach lub refleksjami?

public class Order
{
	public DateTime CreationDate { get; } = DateTime.Now;
	
	public Order(DateTime cd)
	{
		CreationDate = cd;
	}
}
2

Nie wiem, czy w C# się tak robi, ale w PHP unikam używania "gołego" DateTime. Najlepiej mi się sprawdza używanie wrapperów. Wtedy taki wrapper ma metodę setTestNow, która załatwia sprawę.

To podejście ma jeszcze taką zaletę, że nie musisz protezować w kilku miejscach, tylko masz ogarnięte testy oparte o czas na przestrzeni całego projektu.

2

Czy na pewno taki konstruktor ma tylko zastosowanie w testach? Co z wyciąganiem obiektu z bazy danych? No chyba że nie zapisujesz obiektu Order w ogóle. No ale nadal nie widzę problemu z posiadaniem konstruktora który przyjmuje datę utworzenia. Możesz mieć dwa konstruktory- domyślny ustawiający datę na teraz, i drugi jak w a twoim przykładzie przyjmujący datę. Moim zdaniem naprawdę nie ma co kombinować i takie rozwiązanie jest jak najbardziej ok.

2

Pomyliłem leki.

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