Fabryki „Singleton”, ok lub złe?
Mam wiele (abstrakcyjnych) fabryk i zazwyczaj są one implementowane jako singletony.
Zazwyczaj dla wygody nie trzeba ich przekazywać przez warstwy, które naprawdę nie mają nic wspólnego z używaniem lub znajomością tych fabryk.
W większości przypadków muszę tylko podjąć decyzję o uruchomieniu implementacji fabrycznej pozostałej części programu kodu, być może za pomocą jakiejś konfiguracji
to wygląda na przykład lubić
abstract class ColumnCalculationFactory {
private static ColumnCalculationFactory factory;
public static void SetFactory(ColumnCalculationFactory f) {
factory = f;
}
public static void Factory() {
return factory;
}
public IPercentCalculation CreatePercentCalculation();
public IAverageCalculation CreateAverageCalculation();
....
}
Coś w tym pachnie, po prostu nie jestem pewien, co to jest - może bardziej zniechęcony świat niż singleton. To naprawdę nie takmusieć bądź tylko jedną fabryką, która kiedykolwiek tworzy obliczenia kolumn - chociaż moje programy nie potrzebują więcej.
Czy to jest uważane za najlepszą praktykę? Czy powinienem raczej wypuścić je w jakiejś (pół) globalnej klasie AppContext? Coś innego (nie jestem jeszcze całkiem gotowy, aby przejść do jakiegoś większego kontenera IoC, lub jeszcze spring.net całkiem btw)?