2010-12-13 8 views
1

Ich arbeite in der Entwicklung Team von etwa 12 und wir bauen eine vernünftige Reihe von APIs, die wir auf einer rein innerbetrieblichen Basis verwenden. In der Regel sind alle Klassen und Schnittstellen öffentlich, weil sie so ausgeführt werden. Ich habe oft überlegt, wie wichtig es ist, einige der Konstruktoren intern zu machen, so dass die Konsumenten der API (wenn auch intern) die Fabrik benutzen müssen oder aus einem anderen Grund, an den ich jetzt nicht denken kann.Intern und geschützt in einer privaten api

Ist das etwas, das Sie und Ihr Team praktizieren?

Wie wirkt sich das auf Ihre Einheit aus? Finden Sie, dass es in Ordnung ist, eine Klasse durch die Fabrik zu testen oder greifen Sie auf den Konstruktor über etwas wie PrivateObject zu?

+0

Dies ist nicht wirklich eine Programmierfrage so viel wie eine "Prozess" -Frage. – FatherStorm

+0

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? –

+0

@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. –

Antwort

6

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?

    +0

    Gold, vor allem der letzte Absatz. – jason