Moi koledzy lubią mówić „logowanie / buforowanie / itd. To problem przekrojowy”, a następnie wszędzie używają odpowiedniego singletonu. A jednak uwielbiają IoC i DI. Czy to naprawdę słuszna wymówka, by złamać zasadę SOLI D.
Czytałem różne opinie na temat wzoru singletonu. Niektórzy twierdzą, że należy tego unikać za wszelką cenę, a inni, że może być przydatny w niektórych sytuacjach. Jedną z sytuacji, w której używam singletonów, jest sytuacja, w której potrzebuję fabryki (powiedzmy obiektu f typu F), aby utworzyć obiekty określonej klasy A. Fabryka …
W niektórych moich kodach mam statyczną fabrykę podobną do tej: public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } Podczas przeglądu kodu zaproponowano, aby był to singleton i został wstrzyknięty. Powinno to wyglądać tak: public class SomeFactory { …
Słyszałem o zastosowaniu zastrzyku zależności od Singletona dla mojego kolegi. Nadal nie mogę zrozumieć, czy są to dwa ortogonalne wzory, które można ze sobą zastąpić? A może DI jest metodą na przetestowanie wzorca Singleton? Proszę spojrzeć na następujący fragment kodu. IMathFace obj = Singleton.Instance; SingletonConsumer singConsumer = new SingletonConsumer(obj); singConsumer.ConsumerAdd(10,20); …
Tradycyjnie singleton jest zwykle implementowany jako public class Foo1 { private static final Foo1 INSTANCE = new Foo1(); public static Foo1 getInstance(){ return INSTANCE; } private Foo1(){} public void doo(){ ... } } Dzięki enum Java, możemy zaimplementować singleton jako public enum Foo2 { INSTANCE; public void doo(){ ... } …
Tworzę API RESTful i myślę, że wygodnie jest używać DAO dla moich zasobów, ponieważ chociaż planuję po prostu używać pamięci do ich przechowywania, nie chcę zamykać drzwi przed kimkolwiek, kto korzysta z mojej biblioteki, jeśli zdecydują się użyć implementacja bazy danych dla DAO. Moje pytanie brzmi, czy DAO powinno być …
Studiuję OOP w C ++ i chociaż jestem świadomy definicji tych 3 pojęć, tak naprawdę nie jestem w stanie zrozumieć, kiedy i jak go używać. Użyjmy tej klasy na przykład: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age …
Jestem obecnie 4 miesiące na stażu, a podczas przeglądania mojego kodu mój szef nie spodobał się, że trzymałem konkretny obiekt lokalnie dla wielu metod w kilku oddzielnych klasach w ramach jednego zestawu. Nie podobało mu się, że za każdym razem tworzyłem nowy obiekt, a zamiast tego kazałem stworzyć jeden obiekt, …
Czasami spotykam te interfejsy API w stylu koncentratora komunikatów, na przykład Cocoa NSNotificationCenter: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html Zwykle te interfejsy API zapewniają globalny punkt dostępu, w którym subskrybujesz lub emitujesz wiadomości / zdarzenia. Myślę, że jest to problem, ponieważ zachęca do płaskiej i nieustrukturyzowanej architektury programu, w której zależności nie są jawne w …
Ostatnio nastąpiła jakaś rewolucja przeciwko singletonom, ale czy jest coś z nimi nie tak, jeśli są bezpaństwowcami? Wiem, że mowa o nadużywaniu i wszystko ... dotyczy to wszystkiego, nie tylko singli.
Problem Ostatnio dużo czytałem o tym, że Singletony są złe i jak lepsze jest wstrzykiwanie zależności (które rozumiem jako „używanie interfejsów”). Kiedy zaimplementowałem część tego z wywołaniami zwrotnymi / interfejsami / DI i przestrzegając zasady segregacji interfejsu, skończyło się to dość bałaganem. Zależności rodzica interfejsu użytkownika były w zasadzie połączone …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.