dedlfix: Neuer Artikel: Kontextwechsel erkennen und behandeln

Beitrag lesen

Hi!

Ich schreibe an einem Perl-Modul, das das Frontend für einen Formmailer darstellt. Das Modul soll ein anderes Modul einbinden, das dann den SMTP Versand durchführt. In welche Zuständigkeit fällt die Kontextgerechte Behandlung der Mail.
Muss ich die Headerbehandlung durchführen, oder ist das in der Zuständigkeit des SMTP Moduls?

Das kommt darauf an, wie die Schnittstelle aussieht. Wenn man es richtig macht (zumindest würde ich das so machen), setzt man vor das SMTP-Modul noch ein Mail-Modul, das die Einzelteile der Mail (Empfänger, Subjekt, Inhalt, weitere Headerangaben, Angaben zur Zeichenkodierung) entgegennimmt, daraus etwas erstellt, das mit dem SMTP-Modul versendet werden kann. Da sich das SMTP-Modul nur um den Versand kümmert, wäre das Mail-Modul dasjenige, das die Teile kontextgerecht zusammenbaut.

Wenn ich eine Mail via Sendmail versende, dann wird von mir erwartet, dass ich die Headerbehandlung selber durchführe.

Dazu kann ich nichts sagen, da fehlt mir das Wissen.

In diesem Beispiel wäre das nicht schlimm, wenn die Behandlung mehrfach durchgeführt wird, denn das Resultat bleibt sich dasselbe.

Das kommt sicher darauf an, was du genau anstellst.

Aber es zeigt ein Grundproblem: Wie erfahre ich, ob eine Kontextbehandlung durchgeführt wurde?

Im Prinzip gar nicht. Du kannst eine Information nicht entschlüsseln, wenn du nicht weißt, ob das Resultat richtig ist. Es kann zwar gültig nach bestimmten Regeln aussehen. Wenn es aber nach der Intention des Autors nach anderen Regeln aussehen soll ... ohne den Autor zu fragen oder eine Prüfsumme nach bekanntem Algorhitmus prüfen zu können, geht es nicht mit absoluter Gewissheit.

Und wie legt man bei einem modularen Design genau fest, wo Kodierungen durchzuführen sind?

So spät wie möglich (Kodierungen im Sinne eines Kontextes; Zeichenkodierungen sind ja immer vorhanden). Nach Möglichkeit sollte im Rohformat gearbeitet werden. Wenn für einen Empfänger jedoch ein bestimmtes Übertragungsprotokoll verwendet wird, sollte das für dieses Protokoll zuständige Modul die Rohdaten entgegennehmen und für die kontextgerechte Aufbereitung sorgen. Beim Empfänger wird (oder sollte) es ein Gegenmodul geben, das wieder die Rohdaten herstellt.

Es gibt da ja das EVA-Prinzip: Trennung des Codes nach Eingabe, Verarbeitung und Ausgabe. Die Verarbeitung arbeitet mit Daten im Rohformat. Diese bekommte es im Rohformat und gibt sie im Rohformat weiter. Eingabe und Ausgabe sorgen für die kontextgerechte Interpretation beziehungsweise Behandlung.

Lo!