Domino 9 und frühere Versionen > ND8: Entwicklung

WARNUNG: 8.5.3 Signatur- Funktion: Mieseste Code- Qualität

(1/2) > >>

Tode:
Ich arbeite gerade daran, die Signatur- Funktion für einen Kunden aufzubohren und bin ERSCHROCKEN, wie schlecht die Code- Qualität des ganze Dings ist. Nur so als Warnung, wenn sich mal jemand dran macht...

Das schlimme: Die meisten Bugs wirken sich erst dann aus, wenn man was am Code macht, weil sie zufälligerweise in der Konstellation nicht "weh" tun... Trotzdem hier mal eine Liste dessen, was ich gefunden habe

1. Gemeinsame Aktion "removeSignature": Sinnlose Zeile nach If

--- Code: ---Sub Click(Source As Button)
Dim uiw As New notesuiworkspace
Dim s As New NotesSession

If s.GetEnvironmentValue("SigState") <> "3" Then
s.GetEnvironmentValue("SigState") <> "3"
Call s.SetEnvironmentVar ("SigState","3")
Call cMemoObject.RemoveSignature
Call uiw.ViewRefresh
End If
End Sub
--- Ende Code ---
s.GetEnvironmentValue("SigState") <> "3" gehört da nicht hin, tut aber auch nicht weh

2. Gemeinsame Aktionen "Vorgabesignatur" , "removeSignature" und "Neue Signatur aus Datei"

--- Code: ---s.GetEnvironmentValue("SigState") <> "1"
--- Ende Code ---
Sieht auf den ersten Blick gut aus, vergleicht aber Äpfel mit Birnen: GetEnvironmentValue liefert einen NUMERISCHEN Variant. Der wird mit einem String verglichen. Funktioniert zufällig, weil es sich bei beiden Werten um Zahlen handelt... Ich wollte hier "1_1" reinschreibern und habe mich gewundert, warum immer "1" zurückkam... Da gehört überall GetEnvironmentString hin (oder als Vergleich eben auch eine Zahl)

3. Die Info, ob in einem Dokument bereits eine Signatur eingefügt wurde, wird über die Environment- Variable "SigState" geregelt... Macht doch mal zwei Mails auf und spielt ein wenig mit den Signature- Buttons... Da kommen witzige Ergebnisse raus... Wie kann man einen Dokumenten- Status über eine zentrale ini- Variable steuern...

4. CoreEmailClasses_de-DE, InsertSignature- Sub der UIMemoDocument- Klasse, ab Zeile 1023:

--- Code: ---If Me.m_nSignatureOption = 2 Then
Me.m_nSignatureOption =  2  'get imported file from Preferences
End If
--- Ende Code ---
Kein Fehler, aber absolut Sinnloser Code... was sollte da wirklich rein? vielleicht was wichtiges...

5. Über solche Zeilen sage ich lieber nichts... Ist das einfach effizienter code, oder Faulheit?

--- Code: ---resetSigOption = Evaluate(|@getprofilefield("CalendarProfile"; "SignatureOption")|)
resetSignature = Evaluate(|@getprofilefield("CalendarProfile"; "Signature")|)
--- Ende Code ---

Das ist ganz schön harter Toback...

koehlerbv:
Torsten, hast Du schon irgendwann mal in IBM-Templates LS-Code gesehen, von dem Du sagen könntest: "Wow!" oder "Das muss man sich zum Vorbild nehmen!"? Irgendwelche Konsistenz in der Erstellung und Notation? Sinnvolle Kommentare für spätere Bearbeitung / Erweiterung? Oder gar: "Die haben da wirklich vorbildliche Programmierer"?

Anfangs wurden Templates ja wirklich als Beispiele ausgeliefert, man verstand Notes als Middleware (ist es ja auch). Zu "ruhmreichen Beispielen" hat es aber auch mehr als zwanzig Jahre später nicht gereicht.

Bernhard

eknori:
Als ich zum ersten Mal von der Funktion im Rahmen des Design Partner Forums gehört habe, habe ich gedacht: "Wow, Klasse"
Als ich dann zum ersten Mal die Funktion ausprobiert habe, habe ich gedacht:"Hmm, OK, ist ja noch Beta";
Als dann 8.5.3. GOLD herauskam, habe ich mir den Code angesehen und gedacht:"Och, neeeee" ...  :-X

Sieht mir nach einer Arbeit eines Praktikanten aus.

pram:
... irgendwo in der MailDB hab ich mal folgendes gefunden (sinngemäß):
@if (@lowercase(feld)="VergleichsWert"....)   ;D

Gruß
Roland

Glombi:
Die Formeln und Scripte in der Mailschablone sind einfach nur geil.  O0
Wäre schade, wenn IBM irgendwann mal einen da heranlassen würde, der das professionell macht  ;)

Ich liebe Kommentare wie
' <start> I don't think we need any of this -CS

' do not do this, it will fail if you update more than 1 user -CS
' Me.note.ReadCalendar = Fulltrim(result)


' MAPI UPDATE - if it fails, we still update the acl - because we can!
If Not InvokeAdminP() Then Call RaiseUIError(ERROR_ADMINP)

Sub RaiseUIError(nStringID As Integer)
      'this function is virtual so the WEB and Client can handle them thier own way   OR NOT AT ALL
   End Sub


Ein kleiner Auszug aus der Script Library ACLManagement...


 :love:

Andreas

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln