Właściwie. tak.
W twoim konkretnym przypadku, zawijanie go w ten sposób umożliwia szybkie rozpoczęcie łączenia z logiką, na przykład tworzenie ApplicationDbContext i singleton lub obsługiwanie wyjątku w typowy sposób dla całej aplikacji. Ponieważ konstruktor nie może zwrócić wartości null, może to być bardzo ważne, aby móc przechwycić wyjątek i zwrócić wartość null.
Tuple.Create to główny przykład wnioskowania ogólnego, który nie działa z Konstruktorami. W ten sposób można powiedzieć
Tuple.Create(Item1, Item2.. ItemN);
a niech typy kompilator wywnioskować, zamiast
new Tuple<T1, T2...Tn>(Item1, Item2...ItemN);
który jest bardziej gadatliwy i zajmuje nieco więcej pracy, jeśli chcesz, aby przełączyć się na jeden z tych typów.
Istnieje również przypadek typów anonimowych, których nie można jednoznacznie określić, a zatem nie można ich używać w nowych wyciągach. Specjalnie miałem okazję, gdy podczas wyszukiwania złożeń dla określonego Atrybutu do łączenia struktury poleceń, chciałem wykonać wyliczanie (w tym przypadku Kolejka) z anonimowego typu podczas wyszukiwania, aby powiązać odwołania klasowe z ich konstruktorem i argumenty łańcuchowe, zamiast szukać ich za każdym razem, gdy są potrzebne. Ponieważ mogę ponownie zastosować wnioskowanie ogólne w metodzie, udało mi się owijać konstruktora metodą rozszerzenia i wykonać zadanie.
Istnieją również przypadki dla wzorów singleton, w których chcesz, aby metoda "GetInstance" zwykle tworzyła wartość lub otrzymała jedną, jeśli istnieje. Nie może się zakwalifikować, ponieważ ma nieco więcej niż zawijanie konstruktora.
Ponadto istnieje wiele przypadków, w których można chcieć kontrolować procedury wdrażania, takie jak narzucanie ich na inne wątki, rejestrowanie ich w bazie danych, które mają zostać cofnięte w późniejszym czasie, lub podłączanie systemu uprawnień, z których wszystkie mogą należy zrobić, tworząc opakowanie konstruktora i dodając kilka linii logiki, a następnie prywatyzując konstruktor, aby uniknąć jego bezpośredniego wywoływania.
Są też przypadki, w których stworzyłem metodę fabryczną, która deleguje do znanych dzieci, aby zapewnić inną implementację zwracanego interfejsu lub streszczenia na podstawie podanych parametrów. Dodatkową zaletą jest możliwość ukrywania klas implementujących - klasa Type i interfejs IEnumerable wykorzystują ten wzorzec.
To wydaje się złym realizacji fabryce. –
Czy konstruktor jest prywatny? ... Jest to wzorzec używany do powstrzymania konsumenta przed właśnie tworzeniem obiektu bez określania tego, co jest wymagane - zmuszając go do użycia metody statycznej. Jasne, ten wydaje się bezużyteczny - ale jeśli chcesz go przedłużyć, konfiguracja jest dla ciebie. –
Konstruktor nie jest prywatny. – regularmike