Czy System.out.println
narusza prawo demeter?Czy System.out.println narusza prawo demeter?
Jeśli nie, dlaczego?
Czy System.out.println
narusza prawo demeter?Czy System.out.println narusza prawo demeter?
Jeśli nie, dlaczego?
W zależności od widoku.
LoD: Tak, ponieważ korzysta z konsoli. W ramach LoD nie można uzyskać dostępu.
LoD-F: Tak, ponieważ używa więcej niż jednej kropki. LoD-F stwierdza, że przy użyciu dowolnej metody tylko obiekt może znać wewnętrzną strukturę samego siebie. IE
System.out.println()
wymaga znajomości struktury systemu (że ma .out), aby osiągnąć println()
Dla systemu nie do złamania LOD-F to musiałoby być
System.println()
łamać reguł formalnych dół przykład println() (metoda) może tylko dostęp:
(wiem, że to odwrócone odniesienie tutaj jako kod powinien być metoda nazywając ją, ale faktycznie huśtawki w obie strony).
Powiedziałbym, że nie, ponieważ nazywa się Object.toString()
i nie łączy się w żaden sposób z żadną klasą; po prostu mówi obiektowi, aby przekształcił się w ciąg znaków.
Edit:
Jeśli masz na myśli samą rozmowę, a nie to, co dzieje się w rozmowy, wtedy powiedziałbym tak to robi, bo go mocno pary program do pola System.out
.
Łamie prawo, ponieważ używa "więcej niż jednej kropki" i ujawnia fakt, że używa innego obiektu do wywołania println.
System.out
jest w rzeczywistości "stanem globalnym", i tak, technicznie narusza "prawo demeter". Ale:
System.out.println(..)
. Zamiast tego użyj rejestratora (log4j, logback, slf4j).Idealnie powinieneś używać Aspektów i całkowicie ukryć logger (problem przekrojowy) od swojej bazy źródłowej. Umożliwia to zamianę rejestratorów w razie potrzeby (ponieważ szybkość, pamięć i inne wymagania są podatne na zmiany). –
cóż, nie zawsze. Możesz rejestrować typowe informacje, takie jak to, co jest wywoływane, z parametrami, czasami wykonania itp. Nie można jednak rejestrować pośrednich komunikatów debugowania. – Bozho
nr
System.out
jest zmienną globalną.
Formalnie, prawo Demetry dla funkcji wymaga metodą m obiektu O może wywołać tylko sposobami z następujących rodzajów obiektów: [2]
- O sam
- parametrów m
- Wszystkie obiekty utworzone/wystąpienia wewnątrz m
- bezpośredni składnik O jest obiektów
- Globalna zmienna, dostępny przez O, w zakresie m < - To jeden
Przez 5. reguły można wywołać dowolną metodę zmiennej globalnej System.out
z dowolnego kontekstu.
W widoku projektu lub w widoku kodu? – Mantar
również, ponieważ demeter jest reglementacją rolnictwa ekologicznego w Niemczech, powiedziałbym, że nie, ponieważ nie ma z tym nic wspólnego;) –
Byłem też moją pierwszą myślą, Joe, ale ponieważ SO nie mówi o rolnictwie .. :-) – moritz