z poprzednim zespołem ja pracowałem, gdy nowa klasa Serwis został stworzony do obsługi logiki biznesowej pomiędzy warstwy danych i warstwy prezentacji, coś jak poniżej zostało zrobione:Dlaczego warto sprawdzić, czy zmienna klasy ma wartość NULL przed utworzeniem nowego obiektu w konstruktorze?
class DocumentService
{
public DocumentRepository DocumentRepository { get; set; }
public DocumentService()
{
if (DocumentRepository == null) DocumentRepository = new DocumentRepository();
}
}
Nigdy nie rozumiałem, dlaczego czek dla null
był tam. Jeśli konstruktor jest wywoływany, oznacza to, że ma on wartość null, ponieważ jest to nowa instancja, prawda?
Dlaczego tak się stało? Wydaje mi się, że jest to zbędny krok, ale nie chcę niczego przegapić i przekazać go jako złą praktykę.
Jednym z powodów mogę myśleć: gdzieś w dół drogi, chcesz zrobić to statyczne i zapomnieć o nim w konstruktorze i teraz za każdym razem nowy obiekt zostanie utworzony , Właściwość statyczna zostaje nadpisana. – Corak
Jedyny powód, dla którego mogłem zobaczyć dla tego sprawdzenia, czy istnieją wywołania metod powyżej tego wiersza w konstruktorze, który mógłby ustawić repozytorium. (Rozumiem, że nie ma w twoim przykładzie) – Sayse
Czy własność 'DocumentRepository' jest autoproperty dokładnie tak, jak napisałeś to w pytaniu? Jeśli tak, to faktycznie jest to bezcelowe. Jeśli nie, to nie możemy odpowiedzieć, nie widząc prawdziwej implementacji. –