Request for Comments: String2 und Decimal2

Diskussionen über den Quellcode (Module, Klassenstruktur, Schnittstellen u.s.w.) der Access Code Library

Request for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Fr 1. Jun 2012, 10:45

Hallo Zusammen,

in der draft-Branch gibt es seit kurzem eine Klasse String2 sowie Decimal2.

Damit sind aktuell beispielsweise folgende Operationen möglich:
Code: Alles auswählen

?Decimal2Factory.Value(999.99).Round(1).ToString2.Append(" €").PadLeft(10, "_")
____1000 €
?String2Factory.Value(" Max Mustermann").Substring(0,4).Trim()
Max
 


Code: Alles auswählen

?Decimal2.NewValue(999.99).Round(1).ToString2.Append(" €").PadLeft(10, "_")
____1000 €
?String2.NewValue(" Max Mustermann").Substring(0,4).Trim()
Max
 


Haltet Ihr sowas für sinnvoll oder für unnötigen Ballast?
Zuletzt geändert von Sten Schmidt am Fr 1. Jun 2012, 22:15, insgesamt 2-mal geändert.
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Requests for Comments: String2 und Decimal2

Beitragvon Josef Pötzl » Fr 1. Jun 2012, 11:39

Ja, ein Factorymodule für jede dieser Klassen halte ich für unnötigen Balast. ;)
Hier würde ich eher auf Singleton (VB_PredeclaredId = True) umstellen. Allerdings müsste man dann den Code so gestalten, dass im Fall der Singleton-Nutzung eine neue Instanz geliefert wird, damit m_vvalue immer im richtigen Kontext verwendet wird.

BTW: String2 ist von Decimal2 abhängig.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Requests for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Fr 1. Jun 2012, 12:31

Josef Pötzl hat geschrieben:BTW: String2 ist von Decimal2 abhängig.


Ups. :) Ist in Rev. 160 berichtigt (inkl. der versehentlich übertragenen Testfunktion in den MathTools).
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Requests for Comments: String2 und Decimal2

Beitragvon Josef Pötzl » Fr 1. Jun 2012, 13:03

Hallo!

Noch etwas ist mir aufgefallen:
Du verwendest die Factory in der Klasse selbst. Mir würde es besser gefallen, wenn man innerhalb der Klasse ohne Factory-Modul auskommt. Sonst wird man gezwungen, das Factory-Modul mitzukopieren, auch wenn man es gar nicht verwenden will.
Eine Factory-Prozedur könnte man auch in der Klasse selbst unterbringen.

Code: Alles auswählen
Public Property Get Lenght() As Decimal2
    Set Lenght = Decimal2Factory.Value(StringTools.Lenght(m_vvalue))
End Property

Ist Decimal2 für die Länge nicht etwas übertrieben?
Mehr als ein Integer (Long) würde ich eigentlich nicht von einer Property "Length" erwarten.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Requests for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Fr 1. Jun 2012, 13:21

Hi,

Josef Pötzl hat geschrieben:Ist Decimal2 für die Länge nicht etwas übertrieben?
Mehr als ein Integer (Long) würde ich eigentlich nicht von einer Property "Length" erwarten.


vom Wertebereich auf jeden Fall, ja. Da es die Klasse Integer2 noch nicht gibt hab ich erst mal den Decimal2 eingesetzt.

Meine Idee war es, die Funktionalitäten den Datentypen gegenseitig zur Verfügung zu stellen, so dass ich z.B. mit der Länge eines Strings auch gleich noch weiterrechnen, und dann von mir aus mit dem Rechenergebnis wieder zurück nach String konvertieren könnte (um z.B. nochmal eine Formatfunktion dranzuhängen).

Klarer Nachteil: Die Klassen sind dann am Ende alle voneinander abhängig... daher hab ich das hier erst einmal zur Diskussion gestellt.
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Request for Comments: String2 und Decimal2

Beitragvon Josef Pötzl » Fr 1. Jun 2012, 13:46

Ein anderer Gedanke: wäre es vielleicht sinnvoller, diese neuen Typen als COM-dll zur Verfügung zu stellen?
Mir gefällt nämlich der Gedanke nicht besonders, dass man 4711 Klassen importieren muss, um z. B. die String2-Klasse nutzen zu können.
(Außerdem wären die Klassen übersichtlicher zu gestalten, da man bestimmt einige Methoden mehrmals eingesetzt werden.)

=> Import-Assistent müsste um den Import von COM-dlls erweitert werden. Dafür könnte man vielleicht irgendwelche Textdateien (Dummy-Klassen o. ä.) nutzen, die die notwendigen Import-Informationen enthalten.
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Request for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Fr 1. Jun 2012, 14:23

Josef Pötzl hat geschrieben:Ein anderer Gedanke: wäre es vielleicht sinnvoller, diese neuen Typen als COM-dll zur Verfügung zu stellen?
Mir gefällt nämlich der Gedanke nicht besonders, dass man 4711 Klassen importieren muss, um z. B. die String2-Klasse nutzen zu können.
(Außerdem wären die Klassen übersichtlicher zu gestalten, da man bestimmt einige Methoden mehrmals eingesetzt werden.)


Ja, das wäre natürlich besser. Ich dachte mir:

1) Entwurf der Klassen in VBA
  • kann erst einmal mit geringem Aufwand realisiert werden.
  • Das Ergebnis sind ja im Endeffekt "Hüllen", die Berechnungen etc. finden ja in den *Tools.-Modulen statt

2) Schaffen der Infrastruktur für COM-dlls
  • Anpassungen des Import-Wizards
  • .NET Projekt für Interop-DLLs (wahrscheinlich analog des SQL-Generator-Projekts
  • Erweiterung der Code-Lib diese DLLs benutzen zu können

3) Portierung der VBA-Klassen nach c# oder VB .NET
  • Die in der Codelib vorhandenen VBA-Klassen bilden die Grundlage/Vorlage für die Interop-DLLs
  • Dann schrittweise die VBA-Klassen ersetzen

Aber natürlich gab es noch einen anderen Grund... :D
Ich habe nämlich gerade ein recht großes Excel-VBA-Projekt überarbeitet... da wären DLLs arg hinderlich gewesen.

EDIT
...dass man 4711 Klassen importieren muss...


Nee, keine Angst, bei 42 machen wir Schluss. :lol:
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Request for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Fr 1. Jun 2012, 17:19

Josef Pötzl hat geschrieben:Ja, ein Factorymodule für jede dieser Klassen halte ich für unnötigen Balast. ;)
Hier würde ich eher auf Singleton (VB_PredeclaredId = True) umstellen. Allerdings müsste man dann den Code so gestalten, dass im Fall der Singleton-Nutzung eine neue Instanz geliefert wird, damit m_vvalue immer im richtigen Kontext verwendet wird.


EDIT

Revision 162:

  • String2 und Decimal2 auf Singleton umgestellt sowie Factory-/Konstruktor-Methode in Klasse selbst
  • String2Factory + Decimal2Factory gelöscht.
  • String2: Abhängigkeit von Decimal2 entfernt
  • String2 + StringTools: InsertAt() hinzugefügt
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte

Re: Request for Comments: String2 und Decimal2

Beitragvon Josef Pötzl » Sa 2. Jun 2012, 10:05

Nee, keine Angst, bei 42 machen wir Schluss


Spätestens bei 2000 macht Access für uns Schluss. :)

Excel-VBA-Projekt überarbeitet... da wären DLLs arg hinderlich gewesen.

Warum? Wegen der Anzahl der Dateien, die dann benötigt werden?

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 748
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re: Request for Comments: String2 und Decimal2

Beitragvon Sten Schmidt » Sa 2. Jun 2012, 10:45

Josef Pötzl hat geschrieben:
Excel-VBA-Projekt überarbeitet... da wären DLLs arg hinderlich gewesen.

Warum? Wegen der Anzahl der Dateien, die dann benötigt werden?


Eigentlich wg. dem Deployment. In Access kann man die DLL ja in einem LocalTable ablegen und bei Bedarf irgendwo hinkopieren. Bei Excel wüsste ich jetzt nicht ob es da eine Alternative gibt.

Apropos: Ich hab mir mal die Testversion von VBWatchDog angesehen... der speichert ja Binärdaten in einem VBA-Modul und läd diese dann zur Laufzeit direkt in den Arbeitsspeicher (vermute ich mal... genau kapieren tu ich es nicht wie es funktioniert). Nur als Idee: Könnten wir nicht auch sowas ähnliches machen? Also die DLLs die wir brauchen als "Text" in Modulen zu speichern und bei Bedarf den Code in Files rauszuschreiben und verlinken?

EDIT

Einen möglichen Ansatz, wenn auch nicht ganz so elegant, habe ich hier beschrieben.
Sten Schmidt
Entwickler
 
Beiträge: 138
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2007, 2010
Access-Erfahrung: Experte


Zurück zu Quellcode

cron