Die Antwort ist ja; In meinem aktuellen Projekt arbeitet genau ein Entwickler daran - ich - und trotzdem verwende ich Sichtbarkeit und andere Zugriffsmodifizierer, zusammen mit komplexeren Entwurfsmustern, je nach Bedarf. Hier ist warum:
Der Compiler, wenn Sie es zulassen, kann eines Ihrer größten Werkzeuge sein, um gute Entwurfsmuster durchzusetzen. Wenn man alles öffentlich macht, kann das eine Menge Kopfzerbrechen bereiten, wenn man ein Objekt pflegen muss, dessen normaler Zustand während der Programmausführung das objektorientierte Äquivalent eines Menschen ist, der sein Leben auf einem OP-Tisch mit aufgebrochener Brust und allen anderen erlebt kennt ihn von seinen Kindern bis zu seiner elektrischen Kompanie, die in seinen lebenswichtigen Organen herumstochert, um ihn dazu zu bringen, zu tun, was sie wollen. Durch das Hinzufügen einer anderen Hand oder das Entfernen einer anderen Hand kann der Patient einen Herzstillstand erleiden.
Code sollte selbstdokumentieren. Eine Klasse oder ein Klassenmitglied, das als intern markiert ist, bedeutet, dass es wahrscheinlich sein sollte; Wenn alles öffentlich ist, wissen Sie nicht, ob Sie irgendetwas berühren sollten, wenn Sie mit dem Objekt interagieren. Wieder sitzt dein Patient auf dem Operationstisch und plötzlich kommt ein neuer Typ herein, packt die Leber und sagt "Hey, was macht das?". Gegenstände sollten ihre Hände schütteln lassen, dazu aufgefordert werden, etwas zu tun und loslassen, um es zu tun, und die Funktion ihrer Leber interessiert niemanden außer ihnen.
Code sollte von Ihrer Nachwelt verwaltbar sein. Dies hängt mit den ersten beiden Regeln zusammen, aber im Prinzip sollte jemand in der Lage sein, Ihre Codebasis zu öffnen, den Eingangspunkt zu finden und den grundlegenden Ausführungsablauf zu verfolgen, während Sie die Objekte betrachten und ihre allgemeine Form und Funktion bestimmen . Zurück zu unserem Patienten auf dem Operationstisch, sagen wir mal, in fünf Jahren kommt jemand auf diese Szene herein; ein Kerl, der sich auf einen Tisch mit 50 Kerlen in seinem Eingeweide aufspaltet. Es wird nicht wie ein höflicher sozialer Brauch aussehen, den er jemals gesehen hat; es wird wahrscheinlich am meisten wie ein rituelles Menschenopfer aussehen, und der erste Instinkt der meisten Leute, wenn sie einer solchen Situation begegnen, ist zu rennen.
Die Kehrseite der Medaille ist jedoch, dass ein Designmuster, das um seiner selbst willen implementiert wird, im Allgemeinen eine sehr schlechte Sache ist. Sobald du das College absolviert hast und deinen ersten Job hast, kümmert es niemanden wirklich, dass du weißt, wie man ein Strategie-Muster implementiert, und du solltest es nicht bei der ersten Gelegenheit tun, nur um zu sagen, dass du es getan hast. Jedes Muster hat eine Reihe von Umständen, in denen es gilt. Wenn Sie ein Arzt wären, würden Sie eine Angioplastie bei dem nächsten Patienten durchführen, der reinkommt, nur um zu sagen, dass Sie in der Lage waren, es zu tun?
Dies ist nicht wirklich eine Programmierfrage so viel wie eine "Prozess" -Frage. – FatherStorm
Fabriken stehen einer großen Anzahl von statischen Analysen im Weg und sind auch ein Schmerz. Sie sollten zuerst überlegen, ob die Fabrik ein Nettovorteil wäre, bevor Sie dieses Muster verwenden. Warum willst du eine Fabrik benutzen? Planen Sie eigentlich, verschiedene Implementierungen anzuschließen? –
@FatherStorm Ich kämpfte mit einem Weg, um die Frage zu stellen und sie auf dem Boden zu halten, vielleicht habe ich es nicht richtig formuliert. Ich versuche, eine API-Design-Frage zu stellen.Wenn Sie eine API für den internen Gebrauch entwickeln, geht es Ihnen überhaupt um private oder interne Klassen, Konstruktoren oder Schnittstellen? Es ist keine Frage wie "Wie kodierst du das?", Aber ich bin mir nicht sicher, ob es sich um eine "Prozess" -Frage handelt. –