Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von norman_timo
Thema: Rechtliche Frage zu fremden Dateitypen
Am im Forum: Smalltalk

Hallo zusammen,

interessantes Thema, das mir auch einmal untergekommen ist. Wir haben es damals ohne Anwalt "gewagt".

Folgendes halte ich für unproblematisch:
Daten in einem Format XY liegen auf der Platte. Du analysierst Die Datenstruktur auf Dateiebene und greifst dann auf die Daten zu (und machst irgendwelche Verarbeitungen damit). Sollte sich das Dateiformat irgendwann ändern, so wird Dein Programm plötzlich Probleme mit dem Auslesen haben. So weit, und unter der Annahme, dass die Daten selbst urheberrechtlich nicht angetastet sind, halte ich das für unproblematisch.

Problem ist, wenn Du Daten manipulativ verarbeitest und dann direkt in der Datei Änderungen vornimmst. Nicht weil die Daten damit verändert werden, weil sonst das Originalprogramm seine Garantie und Supportansprüche verlieren könnte. Wenn der Betreiber feststellt, dass Fremdsoftware an den Daten gespielt wurden...

Wir sind das Risiko eingegangen, dass Daten kaputt gehen können, das hat aber der Kunde gewusst und hat selbst so entschieden...

Grüße
Norman-Timo

Thema: ASP.Net / Multithreading
Am im Forum: Web-Technologien

Hallo xforfun,

Zitat
Es gibt Stellen, da arbeite ich mit Bildern auf der HDD.

So lange es nur lesend ist, dann kann man beim Öffnen darauf achten, dass es nur lesend geöffnet wird, da sollte es keine Schwierigkeiten geben.

Wenn es auch schreibend (bearbeitend) ist, dann sollte hier ein lock ausreichen, hier würde ich ein lock-Objekt nehmen, das den eindeutigen voll qualifizierten Dateinamen enthält, das ist eindeutig.

Oft ist Mutex zu hoch gegriffen, kann aber sein, dass es in Deinem Anwendungsfall Sinn macht, das kann ich so aus der Ferne nicht beurteilen.

Grüße
Norman-Timo

Thema: Schichtenmodell vs MVVM/MVC/MVP
Am im Forum: Rund um die Programmierung

Hallo zusammen,

wie meine Vorredner schon beschrieben, halte ich Schichtentrennung und Architekturdesign á la MVC etc auch für 2 paar Schuhe, die zunächst einmal nichts miteinander zu tun haben.

Meinem Verständnis nach sorgt die Schichtentrennung dafür, dass man die Applikation in mehrere Teile aufteilt, die man dann verteilen kann (z.b. auf mehrere Prozesse / Rechner). Sinnvollerweise macht man eine Schichtentrennung dort, wo es Aufgabentechnisch auch am leichtesten realisiert werden kann, also klassisch GUI, BL und DAL.
Man könnte es streng genommen aber auch anders aufteilen, z.B. so dass ein Fenster-Objekt von der GUI vom entfernten Server geholt werden muss (was unpraktisch aber nicht unmöglich ist).

Die Design-Patterns (MVC etc.) sorgen dafür, dass Software wartbarer gemacht wird. So wird die Applikation ganz genau nach Aufgaben aufgeteilt. Diese Aufteilung kann man dann im Schichtenmodell unterbringen muss man aber nicht.

Grüße
Norman-Timo

Thema: ASP.Net / Multithreading
Am im Forum: Web-Technologien

Hallo zusammen,

die konkrete Frage, die sich mir stellt ist die: Welche Daten werden "zeitgleich" verändert.

Wenn es sich ausschließlich um Datenbank-Daten handelt, so kann man dort sehr einfach mittels Transaktionen und deren Levels eine Synchronisation erreichen ohne dass man großartig im Quellcode etwas berücksichtigen müsste (mal Fehlerbehandlung im Transaktionsfehlerfall abgesehen).

Wenn es sich um .NET Daten handelt (Werte im Speicher in Klassen/Strukturen), so wird man mittels "lock" schon einiges erreichen können. Ein Singleton ist in aller Regel nicht unbedingt vonnöten, kann aber verwendet werden. Wichtiger sind wohl die so genannten "Factories".

Geht es um Daten auf der Platte, dann sollte man sich wirklich Gedanken machen, ob man das nicht anders lösen kann. Das wäre dann extrem unangenehm und wahrscheinlich das komplexeste Szenario.

Grüße
Norman-Timo

Thema: Übergabeparameter an Konsolenapplikation
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

hab jetzt die Google Treffer nicht angeschaut, ob folgendes dabei war, aber ich finde folgendes absolut genial:

Codeproject - Command line argument parser

Ich habe lediglich den Quellcode so umgestellt, dass ein Dictionary (Generics) verwendet wird, und dass der Code in einer Methode ausgeführt wird anstatt im Konstruktor, ist aber Geschmackssache.

Grüße
Norman-Timo

Thema: Gute Vorsätze für das neue Jahr?
Am im Forum: Smalltalk

Hallo zusammen,

für mich gilt das gleiche wie jedes Jahr, ich nehme mir immer den gleichen Vorsatz vor:

Ich möchte immer dann mich ändern, wenn ich es für angebracht halte (also nicht auf einen speziellen Termin hin).

[also handhabe ich es wie einige Vorredner vor mir]

Grüße
Norman-Timo

Thema: XML Stream auslesen
Am im Forum: Datentechnologien

Hallo zusammen,

kleines_eichhoernchen hat schon die Möglichkeiten aufgezählt. Ich wollte nur folgende Informationsquelle hinzufügen:

Microsoft Support - Lesen von XML Streams

Grüße
Norman-Timo

Thema: performante Alternative zu MS Access
Am im Forum: Datentechnologien

Hallo zusammen,

bevor nun das in einen Multithreading Krieg ausbricht folgende Aussagen:

Es ist richtig, dass ein Prozessor nur einen Thread bearbeiten kann.
Es ist also auch folgerichtig, dass gleichzeitig nur so viele Threads laufen können wie es Prozessoren gibt.
Es ist aber meiner Meinung nach überhaupt nicht gegeben, dass eine Anwendung langsamer läuft, wenn sie nicht genauso viele Threads wie CPU's verwendet (also mehr oder weniger). Das hängt ganz stark davon ab, was der Thread macht, in wie weit es atomare Operationen sind und ob Threads nicht sich selbst schlafen legen etc.

Wenn wir schon beim Besipiel Ping sind. Es ist durchaus denkbar (alles Theorie, also nicht nachgewiesen oder überprüft), dass ein Thread damit startet, den Ping abzusetzen, sich dann aber bis zu einer Antwort schlafen legt. Nehmen wir mal an, dass eine Ping-Antwort 30 ms dauert. Derweil kann ein Thread-Contextwechsel stattfinden und ein weiterer Ping abgesetz werden. Somit wäre die Theorie, dass Multi-Threading-Anwendungen, die mehr Threads als CPUs verwenden langsamer laufen widerlegt.

Also die Quintessenz ist hier: Multithreading ist ein sau-komplexes Thema, bei dem man nie pauschalisieren kann. Es hängt immer vom Anwendungsfall, von der Hardware und von der implementierten Logik ab.

@mrdjoker: Deshalb mag ich solche Berechnungen von Dauerangaben im Multithreading-Context überhaupt nicht. Einmal der Virenscanner zwischendrin (der in aller Regel eine höhere Priorität hat), und alle Berechnungen sind hinfällig.

So, nun war das Ausgangsthema aber Datenbanken, dachte ich zumindest.

Grüße
Norman-Timo

Thema: Mit Replace die Zeichenfolge \\ durch ein einfaches \ ersetzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo LarsThorwald,

kann es sein, dass du die Pfadangabe im Debugger verfolgst? Der zeigt Dir nämlich alles "Escaped" an, d.h. ein "C:\Temp" würde er als "C:\\Temp" darstellen.

Kann es also sein, dass Du überhaupt keine Ersetzung vornehmen musst?

Ein Path-Objekt enthält in aller Regel nur syntaktisch korrekte Pfade, da dürfte normalerweise ein "\\" gar nicht vorhanden sein.

Grüße
Norman-Timo

Thema: Designer-Verhalten eigener Controls debuggen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo ErfinderDesRades,

klar kann man da was machen, man kann VS selbst debuggen (und somit den Designer). Siehe hier: Fail to create component / Not marked as serializable

Das ging zumindest mit VS2005, sollte aber meines Erachtens auch mit VS2008 gehen.

Mit dieser Vorgehensweise konnte ich bisher immer meine eigenen Controls debuggen, vom Drag-In aus der Toolbox inkl. zur Laufzeit.

Grüße
Norman-Timo

Thema: Codeportierung von .Net 1 auf .Net 3.5
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Kuchiki,

naja es kommt auf das Projekt an. Sollte es sich um hauptsächlich Backbone Komponenten ohne grafische Oberfläche sein, dann einfach Quellcode mit VS konvertieren lassen neu kompilieren (Fehler, z.B. Obsolete Fehlermeldungen beheben) und gut ist.

ASP.NET Projekte würde ich neu konzipieren und dann explizit schauen, ob und welche Codeteile ich übernehme, da ist so viel passiert zwischen 1.x und 3.5, da liegen Welten dazwischen.

WinForms Projekte: Das kommt darauf an, was man haben möchte. Wenn man mit der "alten" WinForms Anwendung zufrieden ist, dann genügt eine Portierung. Sollten viele Win32 API Zugriffe realisiert sein, dann würde ich schauen, ob es nicht inzwischen im Framework .NET Klassen dafür gibt.

Allgemein:
Es sind z.B. Generics hinzugekommen, ebenso die ganzen Dinge wie WPF, WCF etc. Das sind Komponenten, bei denen ein Einsatz sich echt lohnt. Von daher würde ich mir jederzeit den Aufwand in Kauf nehmen, und schauen, was es neues gibt, und wo man in der alten Software das sinnvoll einsetzen könnte.

Eine 1:1 Portierung ist meist ungenügend, so hab zumindest ich bisher immer die Erfahrung gemacht.

Grüße
Norman-Timo

Thema: Coding Styles Horror
Am im Forum: Smalltalk

[offtopic]Hallo zusammen,

konnte man das Runden nicht immer mittels:


double d= 2.5;
int roundedVal = Math.Round(d+0.5);

ermitteln?

Grüße
Norman-Timo
[/offtopic]

Thema: Coding Styles Horror
Am im Forum: Smalltalk

Hallo Junky,

Zitat

public bool IsMatch(string name)
{
    return (IsIncluded(name) == true) && (IsExcluded(name) == false);
}

Das kann aber unter Umständen sogar Sinn machen. Wenn intern 2 Listen geführt werden (inc und exc). Ähnlich wie bei Firewallregeln, die expliziten Angaben vor impliziten Angaben überprüfen.

Aber ich gehe jetzt einfach mal davon aus, dass das hier nicht der Fall ist, dann ist diese Abfrage natürlich doppeltgemoppelt.

Grüße
Norman-Timo

Thema: Berufschancen als Softwareentwickler
Am im Forum: Smalltalk

Hallo zusammen,

wenn man als Softwareentwickler erfolg haben will, dann sollte man sich nicht auf eine einzelne Plattform/Technologie konzentrieren. Klar kann man (und muss man) Schwerpunkte setzen.

Nehmen wir mal an, man ist ein .NET Spezialist, dann stellt sich zumindest mir die Frage, wie lange gibt es noch .NET, einen Beruf übt man in aller Regel mindestens 40 Jahre aus, ich will nicht wissen, was in 20-30 Jahren aktuell ist.

Ich finde, als Softwareentwickler hat man dann Erfolg, wenn man sich mit Softwareengineering und Softwarearchitektur beschäftigt. Es ist viel wichtiger Softwareentwicklungsprozesse zu verstehen, zu etablieren und zu verbessern. Teamfähigkeit, Flexibilität und Einsatzbereitschaft sind die Eigenschaften, die zum Erfolg führen.

Embedded Software ist deshalb so attraktiv, weil sich viele Entwickler nicht mehr mit der eigentlichen Hardware beschäftigen. Java und .NET fördern die Hardwarenähe auch nicht gerade, weshalb hier dann Spezialisten gefragt sind. Aber auch der Embedded Bereich verändert sich. Wo früher z.B. auf Handys Symbian und Java lief ist heutzutage auch Windows und .NET anzutreffen. Selbst Getränkeautomaten haben Windows als Betriebssystem installiert (ob das gut oder schlecht ist, darüber kann man sich nun streiten, ist aber nicht meine Intension).

Ich denke auch, dass man seine Branche wählen sollte, denn die ist auch von einem beruflichen Erfolg abhängig. Ich würde die Medizin und Healthcare, sowie Arzt- und Apothekenbranche als vielversprechend halten. Aber auch Banken haben aktuell dringenden Bedarf sich die ollen Softwarestrukturen zu erneuern.

Alles oben gesagte spiegelt nur meine eigene Meinung wider.

Grüße
Norman-Timo

Thema: TableAdapter füllen dauert zu lange, in Delphi schneller
Am im Forum: Datentechnologien

Hallo FastGarrett,

das ist meines Erachtens kein Problem zwischen Delphi und .Net (naja ein bisschen vielleicht doch). Ich muss hier mal etwas mehr ausholen:

Betrachten wir zunächst die Datenbank:
- DBase ist eine sehr alte Datenbank. Die ersten Versionen waren reine Dateiendatenbanken, ähnlich wie bei MS Access auch heute. Wie der aktuelle Stand aussieht weiß ich ehrlich gesagt nicht. Wenn Du aber sagst, dass hier direkt auf Festplatte und Records zugegriffen werden kann, dann wäre das definitiv vergleichbar.
- MS SQL Server (Express ist nur limitiert gegenüber der Vollversion, arbeitet aber genauso) ist aus heutiger Sicht eine vollwertige Datenbank, die über SQL angesteuert wird.

Unterschiede sind hier in Folgenden Bereichen deutlich zu spüren:
Versuche mal mit einer Dateiendatenbank im Multi-User und Multi-Threaded Umfeld zu verwenden. Da kommen Dateidatenbanken schnell an Ihre Grenzen. Ebenfalls werden Dateidatenbanken bei Tabellenverknüpfungen und Filterungen deutlich langsamer. Das sollte im SQL Server erheblich schneller gehen.

Betrachtung der Programmierplattform:
Delphi arbeitet wohl Deiner Aussage nach mit Recordsets, .NET bietet hier eine weitere Abstraktion, das ADO.NET. ADO.NET liest Datenbankabhängig zunächst die Struktur der Datenbank aus (Abfragebezogen) und generiert im Speicher die so genannten DataSets, die wiederum aus DataTables und diese dann DataRows beinhalten. Ein direkter Zugriff auf die Daten ist mittels ADO.NET nicht möglich. Somit ist auch das Arbeiten mit RecordSets nicht möglich. Dafür garantiert diese Arbeitsweise transaktionale Sicherheit und eine Abstraktion der Daten (sollte damit auch flexibler in der Anbindung verschiedenster Datenquellen sein).

Wie bekommt man in Deinem Anwendungsfall eine Performanceverbesserung hin?
Es gibt mehrere Möglichkeiten. Du könntest z.B. auf ADO.NET verzichten und noch die veraltete Technik DAO verwenden, nur weiß ich überhaupt nicht, ob das mit dem SQL Server funktioniert und ich würde solch eine Technik nicht mehr einsetzen. Man kauft sich durch das Recordbasierte Arbeiten zu viele Nachteile ein.
Besser ist es eine Intelligenz bei der Dateninitialisierung einzubauen. 1 Mio Datensätze kann kein Mensch überblicken und schon gar nicht gleichzeitig darstellen. Deshalb ist mein Vorschlag immer nur die Datensätze zu holen, die einmal direkt sichtbar werden, und schon als Vorbereitung die, die per Useraktion als nächstes angezeigt werden können (z.B. die nächsten 10, die vorigen 10, die allerersten 10 und die allerletzten 10 Datensätze) [hängt von der UI Gestaltung ab)

Du könntest hier z.B. für die Performanceunterschiede folgendes ausprobieren:
Versuche mal mit Delphi und DBase einen Filter laufen zu lassen (auf die 1 Mio Datensätze). Sagen wir mal es gibt eine Spalte "Nachname". Du möchtest jetzt alle Datensätze sehen, die mit "ler" enden, wie z.B. "Mueller" oder "Keller" etc. So etwas solltest Du dann mal vergleichen mit SQL Server und ADO.NET.

Ansonsten kann man Dir hier auch sicherlich konkret in einzelnen Performanceoptimierungen zur Seite stehen.

Viele Grüße
Norman-Timo

Edit: Zu früh am Morgen, deshalb Grammatik- und Rechtschreibfehler

Thema: C# FTP Upload: Error 550: Access denied
Am im Forum: Netzwerktechnologien

Hallo zusammen,

eine der besten und vollständigsten C# Freeware FTP Komponente die ich bisher gesehen habe:
BytesRoad.NetSuit Library 2.0

Grüße
Norman-Timo

Thema: "Vorladen" von Forms
Am im Forum: GUI: Windows-Forms

Hallo Gremgiz,

ob Du eine Kopie von WinForms erstellen / produzieren kannst weiß ich ehrlich gesagt nicht. Habe auf die schnelle nur Codeproject - Clone/Serialize/Copy WinForm gefunden, wahrscheinlich hilfts.

Aber Du kannst initial die Form mittels "new MyForm()" erstellen lassen und Dir die Form dann in einer Variablen vorhalten. Später dann kannst Du diese dann mit "Show()" bzw "ShowDialog()" anzeigen lassen.

Grüße
Norman-Timo

Thema: C# FTP Upload: Error 550: Access denied
Am im Forum: Netzwerktechnologien

[offtopic]Hallo Tom,

Zitat
Btw es gibt auch schon fertige FTP Client Klassen im .NET Framework. Siehe FTPWebRequest.

Die Framework FTP Klassen sind aber nur eingeschränkt verwendbar. Versuche mal mit einer offenen FTP Verbindung ein Verzeichnis zu wechseln...

Daher ist die Verwendung einer FTP Library zumindest für mich sehr verständlich.
[/offtopic]

Hallo dr.hardware,

ich vermute genau wie Tom auch, dass Du keine Schreibrechte auf dem FTP Server hast. Gibt es vielleicht dort ein Verzeichnis "public" oder "upload"? Meist hat man nur auf diesen Verzeichnissen Schreibrechte.

Oder aber Du vebindest Dich anonym mit dem FTP Server und hast dann per se nur Leserechte. Dann versuche Dich mal mit Benutzername und Kennwort zu authentifiezieren, funktioniert es dann?

Ein Fehler 550 ist in der Tat kein Fehler in der Anwendung, sondern eine gültige Fehlermeldung von Seiten des Servers.

Grüße
Norman-Timo

Thema: Sequenzielles Deserialisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo gordon2001,

hatte Dir ne PM geschickt und Dir Hilfe angeboten !?

Aber unabhängig davon lässt sich Dein Code stark optimieren. Das Arbeiten mit Streams bedeutet eben nicht, dass man bei jedem Verarbeitungsschritt den Stream komplett verarbeiten muss. Im Gegenteil, man übergibt einfach jeder Verarbeitungskette den Stream, und sobald einer daran zieht durchläuft dieser alle Kettenglieder.

Ein Besipiel hierfür (Dateistream <-> GZipStream <-> (De)Serialisierungsstream):


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.IO.Compression;

namespace StreamTest
{
    public class Program
    {
        #region main entry point

        static void Main(string[] args)
        {
            TestDataClass deserializedObject = null;
            Program myApp = new Program();
            
            myApp.CreateZipFileFromObject(new TestDataClass(), "TestData.zip");
            deserializedObject = (TestDataClass)myApp.GetObjectFromZipFile("TestData.zip");
            
            Console.WriteLine(String.Format("Testwerte: {0} | {1}", deserializedObject.IntVal, deserializedObject.StrVal));
            Console.WriteLine("Tastendruck beendet das Programm!");
            Console.ReadKey();
        }

        #endregion

        #region Public methods

        /// <summary>
        /// Method which takes an object to serialize it. Than the method will generate
        /// and zip file from the serialization stream.
        /// </summary>
        /// <param name="p_Data">Object to serialize and zip.</param>
        /// <param name="p_zipName">Filename for the zip file.</param>
        public void CreateZipFileFromObject(object p_Data, string p_zipName)
        {
            using (FileStream fs = new FileStream(p_zipName, FileMode.Create))
            {
                using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress))
                {
                    BinaryFormatter binFormatter = new BinaryFormatter();
                    binFormatter.Serialize(zipStream, p_Data);
                }
            }
        }

        /// <summary>
        /// Method which takes the zip filename which is used to decompress and deserialize.
        /// </summary>
        /// <param name="p_zipName">Filename for the zip file.</param>
        /// <returns>Deserialized object.</returns>
        public object GetObjectFromZipFile(string p_zipName)
        {
            object retValue = null;

            using (FileStream fs = new FileStream(p_zipName, FileMode.Open))
            {
                using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Decompress))
                {
                    BinaryFormatter binFormatter = new BinaryFormatter();
                    retValue = binFormatter.Deserialize(zipStream);
                }
            }

            return retValue;
        }

        #endregion

    }
}


Das optimiert in Deinem Falle schon einiges. Verhält sich danach der Speicher besser?

Grüße
Norman-Timo

Thema: Sequenzielles Deserialisieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo gordon2001,

der herkömmliche (De)Serialisierungsprozess für Objekte ist bestimmt nicht 100%ig optimal (nicht falsch verstehen, er ist sehr zu empfehlen, ich vermute aber, dass man hier bei 98% Performanceoptimal liegt und dass nur minimal Verbesserungen möglich sind), aber dass eine 6 MB Datei zum Deserialisieren plötzlich 1,2 GB Speicher benötigt, da muss definitiv etwas ganz schräg laufen.

Ich vermute aber auch sehr stark, dass das nicht am Deserialisierungsprozess aus dem Framework heraus passiert, sondern, dass eventuell die Deserialisierung falsch verwendet bzw. etwas anderes dafür verantwortlich sein muss.

Kannst Du genauer Beschreiben wie Du (De)Serialisierst?

Grüße
Norman-Timo

Thema: Logging
Am im Forum: Web-Technologien

Hallo zusammen,

ich sehe das genauso wie Tom: Die relevanten ContextInformationen in eine eigene Datnstruktur (Klasse, Struct, oder nur String) kopieren und dem Workerthread und dem Loggen mitgeben.

Genau dafür bietet sich die Logging-Überladung an, die könnte als weiteren Parameter die ContextInformationen erwarten.

Grüße
Norman-Timo

Thema: Biztalk Web Services Problem
Am im Forum: Netzwerktechnologien

Hallo vollmond,

wenn ich das richtig im Kopf habe will BizTalk den WebService Code haben, damit er diesen bereitstellen kann.

Hast Du schon versucht (testweise), ob Du den WebService auch ohne BizTalk deployen kannst (z.B. über VS und dem IIS)?

Anderer Ansatz ist zu prüfen, ob Du zufälligerweise Assemblies referenzierst, die BizTalk bereits in den Ressourcen aufführt? Versuche mal die Assemblies aus den Referenzen herauszunehmen.

Ansonsten ist eine zirkuläre Abhängigkeit einfach zu erklären:
- Assembly A referenziert Assembly B und umgekehrt

Grüße
Norman-Timo

Thema: Auslagern von SectionGroups per configsource
Am im Forum: Web-Technologien

Hallo nochmal,

ich bin kein Mod und werde hier nicht darüber entscheiden. Vielleicht gibt hierzu ein Verantwortlicher ein Statement dazu ab?

Grüße
Norman-Timo

Thema: Nur Basisklasse serialisieren?
Am im Forum: Netzwerktechnologien

Hallo sunnyandy,

hier musst Du auf die manuelle Serialisierung zurückgreifen, denn die automatische nimmt immer die konkrete Klasse, und begnügt sich nicht nur mit der Basisklasse. Wie kann auch ein außenstehender wissen, ob die Kindklasse nicht relevante "Daten" aus der Basisklasse verwendet und verändert.

Die manuelle Serialisierung ist nicht sonderlich schwer, Du musst lediglich das Interface "ISerializable" in der Basisklasse implementieren und einen speziellen "protected" Konstruktor anbieten. Ein sehr gutes Beispiel hierzu findest Du in der MSDN: ISerializable.GetObjectData-Methode

Das direkte Beispiel in der MSDN - ISerializable-Schnittstelle ist wesentlich schwieriger zu verstehen, zeigt aber, dass es auch für komplexe Fälle anwendbar ist.

Viele Grüße
Norman-Timo

Thema: SVN Repositoryaufbau
Am im Forum: Rund um die Programmierung

Hallo thomas.at,

ich glaube nicht, dass ein Repository in der Sourcecodeverwaltung für Komponententrennung gedacht ist.

Für mich war mein bisheriges Verständnis, dass wenn ich aus einem Repository einen bestimmten Quellcodestand auschecke, dass ich den Quellcode kompilieren kann und dann mein Produkt in der angeforderten Version habe.

Also mal grob erklärt:
- Ein Repository sind für mich eigenständige Produkte bzw. Solutions
- Ein Branch ist für mich ein zwischenzeitlich separater Quellcodestrang, der eine definierte Ausgangsbasis hat und ggf. in den Hauptstrang zurückgemergt wird
- Ein Trunc (den sollte man immer definiert haben) ist der Hauptstrang, in den auch alle Branches zurückfliessen müssen, sofern man die Entwicklung nicht verwerfen will
- Nur aus dem Trunc werden Release-Versionen gezogen
- Plugins werden für die Quellcodeverwaltung als benötigter Quellcode angesehen, auch wenn er separat kompiliert werden muss

Ich würde Dein gesamtes Konstrukt (Server_BL, Interfaces etc.) allessamt in ein Repository stecken. Falls parallel Dinge entwickelt werden, dann würde ich einen neuen Branch aufmachen.

Ich hoffe ich habe es verständlich rübergebracht?

Grüße
Norman-Timo

Thema: Auslagern von SectionGroups per configsource
Am im Forum: Web-Technologien

Hallo UliA,

in diesem Forum sind keine Crossposts geduldet, siehe hierzu:
Punkt 2.2 - [Hinweis] Wie poste ich richtig?

Grüße
Norman-Timo

Thema: Auslagern von SectionGroups per configsource
Am im Forum: Web-Technologien

Crosspost:http://dotnet-forum.de/forums/t/1894.aspx

Thema: Dynamisches Laden von DLLs -> Suchpfad von Windows ändern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Peter,

Zitat
wird xulrunner diese dll laden und nicht mehr in c:\foo\xulrunner nachschauen, ob eine neuere verfügbar ist
Handelt es sich zufälligerweise um eine .NET Dll (Deine bar.dll)? Weil dann könntest Du eine bestimmte Version beim Laden anfordern.

Wenn Du es z.B. in VS per Referenz hinzufügen würdest, dann kann man dort auch "use specific version" einstellen. Das Ganze funktioniert auch bei einem Assembly.Load.

Falls es sich um keine .NET Dll handelt, dann wird mein Vorschlag nicht helfen.

Grüße
Norman-Timo

Thema: Logging
Am im Forum: Web-Technologien

Hallo joh.w,

für einen Entwicklertest kann man hier die Originalmethode gerne auskommentieren, dann solltest Du alle Stellen sehen, die betroffen wären.

Zitat
oder ich überlade dann vergesse ich möglicherweise an dieser und jener Stelle was
Das ist bei einer Erweiterung immer der Fall. Zumindest wenn schon vorhandene Stellen die Erweiterung verwenden sollen.

Auch wenn Du es ohne Überladung lösen würdest, kämst Du in die gleiche Problematik etwas vergessen zu können (außer Du sperrst die Originalmethode).

Also Du gewinnst nichts, wenn Du keine Überladung anstrebst.

Grüße
Norman-Timo

Thema: Logging
Am im Forum: Web-Technologien

Hallo zusammen,

Zitat
Wegen unterschiedlichen Kategorien könntest du deine bisherige Methode auch überladen und eine default Kategorie nutzen.
So war das gemeint. Wenn keine Kategorie angegeben kommen die Logging Einträge in eine Standard Datei / Datenbanktabelle ...

Schnittstellen sollten generell immer nur erweitert werden, nicht geändert :-)

Grüße
Norman-Timo