2009-04-08 8 views
1

Ich arbeite derzeit an einem RMI-Client, der mit einem RMI-Server (von einer anderen Abteilung des Unternehmens, für das ich arbeite) sprechen wird. Das andere Team besitzt die Schnittstelle, aber IMO ist es sehr komplex, da viele verschiedene Typen hin- und hergereicht werden, sowie eine unnötige (IMO) komplexe Ausnahmehierarchie.RMI-Schnittstelle Design-Prinzipien

Ich habe schon mehrfach Bedenken geäußert, dass dies die Art von unnötiger Komplexität ist, die später eine sichere Quelle für Probleme ist, wenn wir uns integrieren, aber ich bekomme nicht viel Traktion. IMO wird es zu einer unnötig großen Menge an Code-Sharing führen, und jede einzelne unterschiedliche Klasse, die wir teilen, ist ein zusätzlicher Satz von Versionsanforderungen, die beobachtet werden müssen.

Kennt jemand irgendwelche Ressourcen/Argumente, die ich verwenden kann, um mein Argument zu stärken.

Kann mich jemand sonst davon überzeugen, dass ich den falschen Baum belle?

Antwort

1

Zunächst würde ich sagen, dass das beschriebene Problem nicht nur RMI betrifft, sondern jede Art von Schnittstelle einer Komponente, einschließlich einfacher Java-Schnittstelle, obwohl im Falle von RMI ein schlechtes Design zusätzliche Vorbehalte, z. Performance.

Ohne die Details zu kennen, kann ich nur erraten, indem ich auf meine Erfahrung schaue. Solch eine unnötige Komplexität einer Schnittstelle hängt oft mit ungültigen oder unzureichenden Geschäftsanforderungen zusammen, die für die Komponente definiert sind. Wenn das der Fall ist, werden die Leute in der anderen Abteilung wahrscheinlich in Zukunft die Schnittstelle häufig modifizieren müssen, um neue Funktionen zu finden, was normalerweise für die Benutzer der Komponente ein Grund zur Sorge ist. Obwohl Änderungen der Schnittstelle natürlich im Laufe der Zeit natürlich sind, können sie in diesem Fall zu einem tiefgreifenden Redesign führen.

Darüber hinaus bedeutet eine übermäßig komplexe Schnittstelle in der Regel, dass der Autor Implementierungsdetails offen legt. Natürlich kann dies zu unnötigen Schnittstellenänderungen aufgrund der Entwicklung der Implementierung, des Umschaltens auf eine andere Technologie oder sogar nur der Optimierung führen.

Last but not least, den Benutzern mehr zu geben, als sie brauchen, ist ein direkter Weg, um ihnen Funktionalitäten zu erlauben, die nicht einmal dazu gedacht sind, benutzt zu werden oder überhaupt existieren. In Zukunft kann es sich herausstellen, dass die Benutzer die Schnittstelle auf unerwartete Weise aufrufen. Es macht die Wartung der Komponente zur Hölle.

Um es zu schließen, sind die wichtigsten Argumente für eine einfache Schnittstelle: klare Business-Definition einer Komponente, verbesserte Flexibilität der Implementierung, Wartbarkeit. Und denken Sie daran, dass all diese Gewinne sowohl für die Komponentenentwickler als auch für die Benutzer gut sind.

+0

Danke! Hat mir bei einem Projekt geholfen, an dem ich gerade arbeite – Bigbohne

0

Sie werden nicht den falschen Baum bellen, aber in einer anderen Abteilung zu sein, könnte es Ihnen schwer fallen, die gewünschten Änderungen zu erhalten. Du kannst nicht jeden Kampf gewinnen :-(

Aber requisite dir für "den guten kampf kämpfen." Ich würde vorschlagen, präsentieren sie ihnen mit einer aufgeräumten version der schnittstelle, wenn sie die zeit zu tun haben Aber sonst musst du es vielleicht einfach gehen lassen.

0

Du wirst Daten haben, um das zu erreichen, was du tust.Ich stimme mit unvergebenem3 überein - es ist ein guter Kampf, und du bellst nicht auf der falsche Baum - wenn du jetzt den Vorschlag eines saubereren Codes ohne Munition präsentierst, könnte es auf taube Ohren treffen, und schlimmer, könnte ein "mein Pferd ist größer als dein Pferd" Art des Wettbewerbs beginnen - nicht produktiv.

Nur mein Vorschlag;

  1. Starten Sie die Fehler oder ein anderes Ticket-Element, das auf die ineffiziente Schnittstelle

  2. starten Dokumentation der Code-Reviews, legte in einem Wiki (ein Unternehmen sanktioniert Wiki bezieht oder Punkte zu dokumentieren - nicht bekommen, jetzt in Schwierigkeiten), dokumentiere es einfach für jetzt - es ist noch nicht Zeit, ein Urteil zu fällen, du sammelst nur Daten.

Wenn Sie genug Daten aus diesen 2 haben, einen Fall auf der Produktivität der Programmierer machen, die wegen der ineffizienten Design-Entscheidungen verloren oder missbraucht wird - es ist sehr schwer zu argumentieren, wenn die Kosten beteiligt.

hoffe es hilft.