Ungeziefer
Cadet 4th Year
- Registriert
- Jan. 2009
- Beiträge
- 119
Du solltest mit deinem Frust lieber ein Feedbackgespräch mit deinem Teamleiter bzw. Vorgesetzten suchen. Wenn du willst, dass sich etwas ändert, suche ein konstruktives Gespräch.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Kokujou schrieb:2. Was hat Mocken denn mit Erweiterbarkeit zutun?
Ein Mock ist nur ein Objekt, was ein definiertes Verhalten ausweist. In PHP kann ich anonyme Klassen erstellen, bspw.:https://en.wikipedia.org/wiki/Mock_object schrieb:Mock object
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways, most often as part of a software testing initiative.
<?php
interface Foo
{
public function bar() : string;
}
$mock = new class
implements Foo
{
public function bar() : string
{
return "baz";
}
}
interface IDownloadable
{
void GetMetaData();
void PingHost();
void DownloadFiles();
void VerifyDownload();
}
interface IMetaDataRetriever
{
void GetMetaData();
}
interface INetworkConnectivityChecker
{
void IsHostAlive();
}
interface IContentRetriever
{
void GetContent();
}
interface IContentVerifier
{
void Verify();
}
interface IDownloadable : IMetaDataRetriever,
INetworkConnectivityChecker,
IContentRetriever,
IContentVerifier
{
}
IContentRetriever kann dann bspw. ein HttpContentRetriever sein, der anhand eines HttpClient Daten von einer URL lädt. Oder ein FtpContentRetriever, der Sachen von einer FTP-URL lädt oder oder oder... Das könntest du wiederum mit ner UrlContentRetrieverFactory abstrahieren, wodurch du nur die Factory aufrufen musst und die kümmert sich, ob es ein http-, ftp-, ssh-, UNC-, magnet-, ...-Link ist. Mit einen Interface wärst du extrem unflexibel und bräuchtest für jeden neue Art eine extra Klasse. So kannst du auswählen was du willst und erhälst durch "Zusammensuchen" von vier Teilen eine komplett neue Funktionalität ohne Code schreiben zu müssen. Und wenn, schreibst du eine neue Klasse und erhälst wieder viele neue Möglichkeiten. Statt bspw. den HttpContentRetriever zu nutzen, kannst du dich auch weiter spezialisieren und einen FacebookPostContentRetriever erstellen, der nur Content aus Facebook Posts lädt. Die restlichen Klassen bleiben hierbei die Selben, lediglich der ContentRetriever hat sich geändert.INetworkConnectivityChecker kann es bspw. einen PingNetworkConnectivityChecker sein, der einfach nur den Hostnamen anpingt. In Kombination mit HTTP, wäre vielleicht ein HttpHeadConnectivityChecker relevant, der vorher auf einen `200`er Status prüft (bzw. != [45]xx). Ggf. ist eine Kombination aus beidem sinnvoll?IDownloadable sollte hierbei aber eher eine konkrete Implementierung (= Klasse) darstellen, die durch zusammenfügen von den genannten Interfaces die gewünschte Funktionalität bereitstellt. Wo wir dabei sind: Du kannst auch einfach alle vier Interfaces in einer Klasse bündeln, dagegen spricht überhaupt nichts. Aber es bringt nichts alles in nen Topf zu werfen, nur damit du dann Einzelteile der Klasse nutzt.Also wenns bei dir so schlimm ist (ich kanns ja nicht bestätigen) würde ich mir nen besseren Arbeitgeber suchen. Ich bin jetzt seit ca. 2 Jahren bei mir im Unternehmen, hab zwar am Anfang auch Mist gebaut und nicht immer alles so schlau gelöst wie ich es hätte können, aber man hat meine Vorschläge immer ernst genommen und auf einer Augenhöhe miteinander diskutiert. Deine Aufgabe im Sinne von "na wenns alle machen mach ich es halt auch, is ja nur n Job" wirkt wie die totale Selbstaufgabe eines jungen, motivierten Mitarbeiters, der alle Prinzipien aus Hoffnungslosigkeit wegwirft. Wäre schade drum, wenns wirklich so ist.Kokujou schrieb:Ich bin in der Probezeit und ich bin der Neue. Das heißt egal was ich sage und wie sehr ich recht habe oder auch nicht ich habe Prinzipiell erstmal unrecht mit allem was ich tue oder sage. Und lange Ausführungen darüber warum ich nicht deren Meinung bin führen eher zu einer schnellen Entlassung, habe ich die Befürchtung. Am Ende ist es schließlich Arbeit und es geht mir ums Geld und wenn die dort tatsächlich alle wollen dass ich nur meine Zeit verschwende dann soll es so sein.
I know that feeling. Wir haben zwar ein paar Tests, aber da mancher Code seit zig Jahren einfach weiter entwickelt wird und nie nach TDD entwickelt wurde weiß man selten oder nur mit Recherche, was wirklich irgendwie mit anderen Sachen kollidiert. Manche Sachen fasst man einfach nicht an, weil man die Auswirkungen nur erahnen kann. Aber wir haben auch nicht genug Leute um die Tests alle nachzupflegen und nebenher damit zu entwickeln. Wenn ich könnte...würde ich wohl auch TDD verfolgenGojira schrieb:Auch wenn der Rockstar-Programmierer das Projekt in 2 Wochen ohne Tests anstatt in 4 Wochen mit Tests geschrieben hätte, seit ihr auf lange Sicht viel langsamer.
→ Alles manuell testen
→ Kaum Refactoring möglich, da keine Sicherheit, dass man nichts kaputt macht
→ Codebase gammelt immer weiter vor sich hin
Ach wirklichGojira schrieb:Und ich fluche jedes mal, wenn ich den alten ungetesteten Code anpacken muss. Jede Änderung am Code hat das Potenzial etwas kaputtzumachen. Mit Tests habe ich die Sicherheit, dass das nicht passiert.
Ich sag ja nicht dass man GAR nicht testen muss. Aber man testet meiner meinung nach eher halbwegs komplexe Funktionen als Unit tests und den Rest auf Integration Test ebene. GAR nicht zu testen ist natürlich eine Dummheit die sich bei meinem Master-Projekt,, wo ich noch nichtmal wusste dass es sowas wie Tests gibt (ugh...) rächt. Obwohl ehrlich gesagt bin ich auch da noch ganz gut klar gekommen. Tests hätten mir voraussichtlich nur die 5 Minuten erspart die damit endete: "uff warum hab ich idiot das nicht gleich gemerkt." und das war abzählbar gering.Gojira schrieb:Auch wenn der Rockstar-Programmierer das Projekt in 2 Wochen ohne Tests anstatt in 4 Wochen mit Tests geschrieben hätte, seit ihr auf lange Sicht viel langsamer.
→ Alles manuell testen
→ Kaum Refactoring möglich, da keine Sicherheit, dass man nichts kaputt macht
→ Codebase gammelt immer weiter vor sich hin