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 Peter Bucher
Thema: Cloud-Speicher? Skydrive, Dropbox, Google Drive & Co - Wer nutzt was?
Am im Forum: Smalltalk

Hallo zusammen

Dropbox da es sehr viele nutzen und es praktisch ist, auch auf dem Smartphone.
Und GoogleDrive wegen der schon genannten Umwandlung, so erhält man das ob man will oder nicht.


Gruss Peter

Thema: [erledigt] Wie erstelle Ich ein Event für einen Button der erst zur Laufzeit erzeugt wird in ASP.NET
Am im Forum: Web-Technologien

Hallo Omega90

Übergib die ID doch per Url?
Ansonsten musst du genauer sagen, was du nicht verstehst.

Was ist das Problem mit OnClick?
Das geht ja im ItemTemplate.


Gruss Peter

Thema: Dateityp ermitteln - speziell für Bilder
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen

Ja, würde ich auch sagen @chilic.

@Palladin007
Mach dann eine Abfrage mit:

var value = dictionary[extension.ToLower()];

Thema: ASP.net 4.0 - Suchmaschinenfreundliche URLs
Am im Forum: Web-Technologien

Salute ravel

Leerzeichen gibt es so nicht in der Url, ausser das korrekt codierte %20 vom IE.
Ich würde - wie es so üblich ist - Bindestriche verwenden um nicht nur Leerzeichen, sondern auch Sonderzeichen (Umlaute, Symbole, ...) Url-freundlich zu machen.

Machen kannst du das einfach gesagt, indem du die Links die generiert werden, sowie das was erwartet wird, durch eine Funktion laufen lässt.

Bspw.:


public static string GetCleanUrl(string dirtyUrl) {
    if (dirtyUrl == null)
        return String.Empty;

    string allowedChars = "abcdefghijklmnopqrstuvwxyz1234567890-_";
    dirtyUrl = dirtyUrl.ToLower();
    dirtyUrl = dirtyUrl.Replace("\x00e4", "ae");
    dirtyUrl = dirtyUrl.Replace("\x00fc", "ue");
    dirtyUrl = dirtyUrl.Replace("\x00f6", "oe");
    dirtyUrl = dirtyUrl.Replace(" ", "-");

    StringBuilder cleanUrl = new StringBuilder();
    int i = 0;
    int length = dirtyUrl.Length;
    while (i < length) {
        char c = dirtyUrl[i];
        if (allowedChars.IndexOf(c) > -1) {
            cleanUrl.Append(c);
        }
        i++;
    }
    return cleanUrl.ToString();
}

Das wäre jetzt ein Whitelist-Verfahren, ziemlich simpel aber ausreichend.

Thema: JavaScript aufrufen
Am im Forum: Web-Technologien

Salute toemsel

Kann ich nicht nachvollziehen.
Hast du die Javascript Datei auch ins Output-Verzeichnis kopiert (copy always)?

Teste es nur mit der Html-Datei aus, wenn du dort die externe Funktion aufrufst.

Wenn es mit der oben stehenden Frage noch nicht klappt, poste doch mal deinen Quelltext.


Gruss Petert

Thema: DirectX: Fehler bei "new Device (...)" [==> wegen Grafikkarte ohne HardwareVertexProcessing]
Am im Forum: Grafik und Sound

Hallo Sebb767

Wie lautet der Exceptiontext und kannst du was aus dem StackTrace entnehmen?
Seit wann kommt der Fehler?
Was hast du seit da gemacht (installiert, etc..)?


Gruss Peter

Thema: Repositories und Dependency Injection
Am im Forum: Rund um die Programmierung

Hallo Ahrimaan

Zitat von Ahrimaan
Das verstehe ich aber nicht so recht : Wenn ich eh eine Konkrete Implementierung in eine Assembly packe, muss ich ja nicht mehr zwingend gegen das interface schreiben, sondern kann direkt auf die Implementation zugreifen, da ich die Assembly ja eh eingebunden habe.
Das ist genau der Punkt.

Gegen ein Interface implementieren "reicht", könnte man sagen.

Ob du auf die Implementation eine harte Referenz hast / oder diese im gleichen Assembly hast (ist hierfür beides dasselbe), resultiert einzig und alleine nur im Unterschied, dass du die ganze Anwendung neu kompilieren musst, um deine Anwendung auf einer andere Implementation umzubiegen. Das ist aber alles.

So wie du schreibst, beziehst du den zweiten Teil - der nicht so relevant ist - als _der_ Grund für DI, bzw. dass es ohne diesen keine Rolle spielt.

Genau das ist eben nicht so.

Ausser du meinst mit "nicht mehr zwingend" die Gefahr, das du aus Versehen irgendwo den konkreten Typen benutzt, weil du ihn benutzen kannst.
Zitat von Ahrimaan
Wieso gibt es da so viele Nachteile ? So wie ich das sehe , verdrahte ich in meiner jeweiligen Klasse ja nur 2 Assemblys : Das Model als Assembly und das Interface des generischen Repositorys.
Das wäre eigtl. gängiger Standard um absolut Austauschbar zu bleiben oder irre ich mich da ?
Ich muss mich korrigieren: "Man handelt sich damit einige Nachteile ein, die nicht sein müssten, wenn man den einen Vorteil nicht braucht".

Als Beispiel kannst du in deiner Anwendung die DI-Registrierung nicht per Code machen (Delegates), auch die NHibernation müsstest du per Xml machen.

Das ist ein wesentlicher Nachteil, da die Typsicherheit und der Komfort der Registrierung nachlässt.


Gruss Peter

Thema: Repositories und Dependency Injection
Am im Forum: Rund um die Programmierung

Hallo zusammen

@gfoidl
Ich nehme an, dass Ahrimaan mit "Verweis" eine harte Assemblyreferenz meint, die ja bei irgendeiner Typabhängigkeit - ob als Typargument oder wegen der Nutzung für eine Instanz - immer vorhanden ist.

@Ahrimaan
Rein theoretisch kannst du alles in einer Assembly haben, komplett alles.
Auch dann hat DI noch alle Vorteile (bis auf die Austauschbarkeit der Implementation ohne Neukompilierung).

Der Vorteil ist, dass du die Abhängigkeit vom konkreten Typen gelöst hast und die konkreten Typen zentral konfigurieren kannst, durch ein Austausch an einer Stelle.

Aber das halte ich nicht für sinnvoll, wie gfoidl sagt, sollte die Assembly-Aufteilung logisch sein und Solution-interne Abhängigkeiten minimieren. Wie feinkörnig ist dann wieder eine andere Entscheidung.

Der einzige zusätzliche Vorteil, wenn du bspw. die Interfaces und Implementierungen für die Repositories nicht in einer Assembly hast - und das ist die Voraussetzung dafür, also:

- Project.Data.Interfaces

- Project.Data.Sql
- Project.Data.Xml

ist die Austauschbarkeit der Implementation, ohne das du irgendetwas neu kompilieren musst, nur per Registrationsänderung in einer Xml-Datei.

Nur wenn du das brauchst, macht es Sinn, keine harten Referenzen zu haben und die Assemblies feinkörnig aufzuteilen.

Meistens braucht es dies nicht und die Nachteile, die diese Vorgehensweise mit sich zieht, sind grösser als die Vorteile.

Zitat
Mein kollege ist der Meinung das Datenmodel MUSS in den DAL rein , ich sage es ist nicht so.
Wenn du nicht feinkörnige Assembly-Unterteilungen machst, kannst du die Entities / Models in deine DAL-Assembly packen. Wenn feinkörniger, gehören diese zumindest logisch zusammen. Das ergibt sich auch aus der mindestens weichen, wenn nicht harten Referenz.

Was versteht er unter "DAL"?
Eine Assembly? Eine logische Zusammenhörigkeit?


Gruss Peter

Thema: PlugIns mit LightCore entwickeln
Am im Forum: Rund um die Programmierung

Hallo zusammen

MEF und IoC- bzw. / DI-Komponenten darf man nicht gleichsetzen.
Man kann mit beidem alles machen, bzw. mit dem einen, das machen, für dass das andere konzipiert und spezialisiert ist.
Siehe:
- Googlesuche nach mef versus ioc

Daher spricht auch nichts gegen eine Mischung.

Zu deiner Frage Norbert:
LightCore ist OpenSource, du kannst den Quellcode runterladen.
Die internet Methode, die den Typen "auflöst", arbeitet mit Type.LoadType(...),
diese geht standardmässig das bin-Verzeichnis durch.

Wenn du diesen Bereich ganz wenig anpasst, ggf. geht auch was in Richtung "Probing", solltest du dein Wunsch realisieren können.

Was auch häufig gestellt wird, ist die dynamische - zur Laufzeit - Registrierung.
Ich muss zugeben, das ist nicht dokumentiert, ist aber sehr simpel:

var builder = new ContainerBuilder();
builder.Register<IFoo, Foo>();

var container = builder.Build(); // erste Registrierung drin

// Irgendwo zur Laufzeit mit der selben Builder-Instanz.

builder.Register<IBar, Bar>();

container = builder.Build(); // erste und diese Registrierung drin


Gruss Peter

Thema: LightCore - Konstruktor-Parameter mitgeben
Am im Forum: Rund um die Programmierung

Hallo zusammen

Pharao2k hat es richtig erraten, das ist die Lösung.
Anstelle eines Typvergleichs auf gleichheit, braucht es einen Typvergleich auf Kompatibilität.

Also anstelle von == ein type.IsAssignable(type)

Mit Mithilfe aus der Community ist dieser Bug schon behoben und funktioniet 1a.
Beim nächsten Release ist dieser Bugfix drin.


Gruss Peter

Thema: String.Replace will nicht - wie ersetze ich ein Fragezeichen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Salute steschu :-)

Hier die simple Erklärung:
Die Klassenmethode "Replace", der Klasse "String", gibt dir das Resultat zurück.
Wenn du das verwirfst, ist das nirgendwo mehr.

Gab es auch bei VBScript, gibt es auch bei C, überall, so ziemlich überall :-)

common problem. common solution.


Gruss Peter

Thema: Warum setzt man externe Build Systeme wie z.B. MSBuild ein?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Piico1184

Jein.

Wenn du eine Komponente, Projekt gegen verschiedene Frameworks oder Umgebungen kompilieren willst, brauchst du sowieso Build-Scripts.
Zusätzlich zu denen die du schon mit den .proj und .sln hast.

Falls du bei einem Kunden dann kein MSBuild installieren willst, könntest du die Geschichte per NAnt lösen.
Dort gibts ein MSBuild-Task.

Du solltest dann am Schluss nur noch eine cmd oder bat Datei so ähnlich aufrufen müssen:

build -cf -v. 4.0

etc...


Grus Peter

Thema: O/R-Mapper für XML-Dateien - Ablehung des Formats
Am im Forum: Rund um die Programmierung

Hallo zero_x, Hallo zusammen

Ich sehe natürlich, das die Nachteile oder die Argumente für die Ungeeignetheit von XML als "Datenbankersatz" wohl stimmen mögen.

Aber wenn es um kleinere Datenmengen geht, sich auch den Text von herbivore durchliest, sowie es doch cool ist, die Dateien mit dem Notepad zu öffnen und zu lesen :-).

Aus praktischen Gründen (Kein MSSQL Server zur Verfügung auf dem Webserver), sowie auch weil ich es einfach ohne Serversystem machen wollte, habe ich dann etwas eigenes entwickelt.

Im Grunde basiert es ganz unten auf LINQ to XML, aber das ist Nebensache.
Pro Klasse wird eine XML-Datei generiert und du hast dann einfach eine Liste von Objekten von deiner Klasse zur Verfügung.

Abfrage per LINQ, Rückgabe ist IEnumerable<Klasse>.

Intern arbeitet die Komponente so, wie es herbivore erklärt hat.
InMemory und atomare Operationen.

Im Anhang findest du die aktuelle Version davon zum probieren.
Achtung: Weitere Features, wie bspw. Lazyloading, Aggregation, etc... sind noch nicht implementiert, könnte man aber noch machen.

Wer also etwas komplexeres als nur 1 Klasse == 1 XML Datei / Tabelle braucht, muss schauen, ob er das so abbilden kann.
Vererbung wird allerdings unterstützt.

Per: <IEnumerable>.ToQueryable(); kann man auch entweder das oder NHibernate mit einer Datenbank verwenden ;-)

Viel Spass!


Gruss Peter

Thema: Rückgabe von Methoden: Ergebnis, falls erfolgreich, Fehler sonst. Wie am besten?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen

Programmierhans meinte damit sicherlich folgendes:
- Wenn du einen Fehler behandeln kannst, sodass das Programm in einem definiertem Zustand weiterlaufen kann, passts.

Dann könntest du ggf. ein Boolean zurückgeben, wenn du einen bestimmten Status brauchst, bspw. um nach einer Pause erneut einen Versuch zu starten (Netzwerkverbindung, I/O, etc...).

Exception meinte er sicherlich nicht als Rückgabewerden, sondern eine Exception werfen.

Auffangen?

Nur, wenn man die Exception im äusseren Kontext so behandeln kann - wie oben beschrieben - dass das Programm in einem konsistenten Zustand weiterlaufen kann.

Statusklassen und ErrorCodes würde ich mit Vorsicht anschauen und benutzen, meistens gibt es bessere Möglichkeiten.

Ein Real-World-Beispiel für eine "Exception" die geworfen, aber nicht aufgefangen wird, weil die Software sonst "Amok" läuft, heisst, der Zustand inkonsistent wird (zum dritten Mal):
- Windows Bluescreen :-)

Wenn der BSOD nicht kommt, kann Windows ohne Probleme weiterlaufen, und das heisst einiges. Da ich seit W7 einen Bluescreen hatte, der allerdings mit einem Hardwareproblem zusammengehangen hat.


Gruss Peter

Thema: Linq to Object Query Frage
Am im Forum: Datentechnologien

Hallo elron

Was ist "Manager.Items" und besteht eine solche ID (GUID) in der Items-Auflistung?
Wenn ja, müsste es theoretisch funktionieren.

Falls du nicht weiterkommst, nimm den Code auseinander.
D.h. sowas wie:

var items = Manager.Items; // gucken was drin ist
var single = items.Single(item => item.Id == <Guid>); // Exception, wenn nicht vorhanden.

usw.

So kannst du die Geschichte auch debuggen und besser nachvollziehen.


Gruss Peter

Thema: Delegate aus Methode erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo marcom

Das freut mich.
Ja, die Delegates werden vom Kompiler inferiert und schlussendlich im Code ersetzt / hinzugefügt.
Es entfällt ab .NET 2.0 (AFAIK) also += new XYZEventHandler(method);

Weil der Kompiler sowieso wissen _kann_, von welchem Typ - Signatur - deine Methode ist.

Es entfällt ab .NET 2.0 (AFAIK) also += method;

Du kannst es aber auch explizit angeben, und so etwas anderes nutzen.

Gruss Peter

Thema: Querverbindungen zwischen Klassen - OOP
Am im Forum: Rund um die Programmierung

Salute wickedcsharper

Genau das was ich hier schrieb: Querverbindungen zwischen Klassen - OOP

Du musst es nur umkehren, dann weisst du was das impliziert.

Um es klar zu sagen: Das impliziert das die Klasse mehrere Zuständigkeiten hat / haben soll / möglicherweise hat.


Gruss Peter

Thema: Querverbindungen zwischen Klassen - OOP
Am im Forum: Rund um die Programmierung

Hallo wickedcsharper

So einfach wie möglich, so komplex wie nötig. Wobei zweiteres eine deutlich niedrigere Priorität hat und du jedes Problem, sei es noch so komplex, schlussendlich auch simpel abbilden kannst.

Das Geheimnis liegt in den Zuständigkeiten, Anzahl und Verbindungen / Abhängigkeiten der Typen.
Und schlussendlich, das du mit Blackboxes arbeitest (Komponenten mit einer öffentlichen Schnittstelle) und das was du im Moment wissen musst, um was zu ändern, so simpel wie möglichst hältst.

Das ganze System an sich, wird dann durch die oben genannten Dinge komplexer, je komplexer die Problemstellung ist.
Aber auch hier kann man das Thema an sich wieder trennen und in Richtung logische Modularisierung arbeiten.


Gruss Peter

Thema: Delegate aus Methode erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Salute marcom

Ja das tut es.

Du kannst alles, wie du es schon gemacht hast, theoretisch auf Delegate oder sogar den Typ object abbilden.
Auch eine Containerklasse mit object[] für Argumente (oder null für keine), sowie eben einer Eigenschaft für die Delegatespeicherung ist schon der richtige Ansatz / Weg.

Das Problem ist, dass sobald du den Delegaten dann schlussendlich brauchen willst, du schlussendlich auch den konkreten Typ brauchst.
Aber nicht in jedem Fall.

Wenn du also weisst: Ich habe einen Delegate, der kann Argumente bekommen, muss aber nicht. Und der kann ein Ergebnis zurückgeben, oder nicht, kannst du das mit dem Typ Delegate abbilden.

Aufruf dann wie folgt:


Delegate testDelegate; // Irgend eine Methode ist darin referenziert.
object[] arguments; // Entweder null, wenn keine Argumente enthalten sind, oder die Argumente in einem object[].

object result = testDelegate.DynamicInvoke(arguments);

Was du hier wissen musst?
Nur ob es eine Rückgabe gibt, und wenn, was für ein Typ diese Rückgabe besitzt.
Dann castest du die Rückgabe und alles passt. Der Rest ist nicht wichtig.

Wenn das nicht reicht, musst du den konkreten Typen des Delegates zum Zeitpunkt des Aufrufes wissen.
Es kann sehr gut sein, das du diesen zwar zur Speicherung sein, aber nicht mitgibst. Oder den nicht mal weisst. Allerdings weisst du ihn dann bei der Aufruf des Delegates.

Einfaches Beispiel ist eine Methode wie folgt:


TTypeOfResult RequestSomeResult<TTypeOfResult>()
{
    return (TTypeOfResult)delegateDictionary[typof(TTypeOfResult)].DynamicInvoke(arguments);
}

Wenn das immer noch nicht reicht, musst du dich wohl eingehender mit der Metaprogrammierung beschäftigen, sprich: Reflection, späte Bindung, frühe Bindung, dynamisches Laden von Assemblies, etc... sowie auch der Typisierung zur Laufzeit, nicht zur Kompilezeit. (Dynamische Typisierung vs. statische Typisierung).


Gruss Peter

Thema: Querverbindungen zwischen Klassen - OOP
Am im Forum: Rund um die Programmierung

Hallo wickedcsharper

Sobald du ein Verbindungswort wie bspw. "und", "mit", "oder", ... in einem Klassennamen hast, ist schon was falsch.
Stichwort SOC: Seperation of concerns.
Beschreibung: Eine Klasse sollte nur eine Zuständigkeit besitzen.

Auf Methodenlevel kann man das auch anwenden: Eine Methode soll nur eine Sache tun.

Noch weiter gehts mit "Command / Query seperation".

Am besten guckst du mal in: http://clean-code-developer.de/

Mit anderen Worten: Ich würde das nicht so machen.

Zitat von herbivore
Ansonsten sollten Klassen möglichst nicht zyklisch von einander abhängig sein. Die einzige Ausnahme ist, wenn die Klassen untrennbar zusammengehören. Also TreeView darf TreeNode kennen und umgekehrt, weil eine Klasse ohne die andere sowieso keinen Sinn macht. Aber normalerweise sind solche Zyklen unbedingt zu vermeiden.
Volle Zustimmung.
Für Referenzen gilt dasselbe, nur dort sollte es noch strikter gehandhabt werden. (Wird schon von der IDE verhindert, oder gewarnt).


Gruss Peter

Thema: Vererbungstiefe OOP
Am im Forum: Rund um die Programmierung

Hallo wickedcsharper

Grundsätzlich sollte die Vererbungstiefe so niedrig wie möglich gehalten werden.
Aber natürlich kann es mehr Sinn machen, zwei Vererbungsstufen zu haben, oder 3, als ein riesen Aufwand um das zu vermeiden, weil es eben die beste Lösung ist.

Aber für Vererbungen über 4, 5 Ebenen kann (sollte) man schon mal den Sinn hinterfragen.

Der Hintergrund ist:
Die Komplexität steigt, aber sie sinkt auch, _vermeindlich_.
Mit vermeindlich ist scheinbar gemeint und damit, das die Klassen die von einer anderen erben, ja schlanker und übersichtlicher aussehen.

Sind die aber nicht, wenn man alles über sie wissen will, sondern genau im Gegenteil: Von unübersichtlich bis zu unüberschaubar oder von so hoher Komplexität, das man es nicht mal mehr verstehen, geschweige denn erklären kann.

Beschäftige dich daneben noch mit Design Patterns.
Als mögliche Alternativen und in vielen Fällen besser, intuitiver als Vererbung, aber nicht immer, gibts: Aggregation, Komposition und das auf diverse Arten. Schau mal in die Richtung.


Gruss Peter

Thema: Delegate aus Methode erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hoi Mark

Ja, die gibt es.
Seit .NET 3.0 (AFAIK) gibt es die Delegates der Typen: Action, Func<T>, sowie Action<T, ........> und Func<T...., TResult>.

Wenn du nur eine Aktion ausführen musst, also eine Signatur vom Typ:

void MethodName();

hast, entspricht das in jedem Fall dem Delegatetypen: Action.

Action<T> entspricht void MethodName(T parameter)
Action<T, T2> entspricht void MethodName(T parameter, T2 parameterTwo)

Func<TResult> entspricht TResult MethodName();
Func<T, TResult> entspricht TResult MethodName(T parameter);

Und so weiter, bei Action gibts weitere Parameter und bei Func dasselbe, das letzte Typargument ist jeweils der Typ des Rückgabewertes.

Natürlich kannst du dir auch selber Delegates anlegen, oder generische Delegates. Wenn du < .NET 3.0 arbeitest, ist das sinnvoll.

Deine beschriebene Fehlermeldung bekommst du wohl, weil die Methodensignatur nicht auf den Delegate passt (Der eine Methodensignatur repräsentiert, enthält).

Schlussendlich ist ein Delegate ja dann ein Zeiger auf eine Methode, aber zusätzlich weiss er über die Methodensignatur Bescheid.

Ich hoffe das hilft dir weiter.


Gruss Peter

Thema: Zyan Communication Framework
Am im Forum: Projekte

Salute Rainbird

Ich habe mal deinen Quellcode durchgeschaut.

Die Sache sieht sehr interessant aus. Das du die "normalen" Komponenten dann mit einer Wrapperklasse als "MarshalByRefObject" ausgibt, ist natürlich cool :-).

Von Benutzer, API-Benutzersicht sicherlich mehr als einen Blick wert.

Was mir aber ein wenig missfällt, sind die Kommentare - der Noise - zwischen dem Code, sowie der Gebrauch von Region und folgend, die langen Klassen, die da teilweise vorkommen.

Beispielsweise hast du im ZyanComponentHost in einer Region mit 3, 4 Methoden einen sehr rudimentären "DI-Container" drin, bzw. das Grundstück davon mit Registrierung, Deregistrierung sowie der Ausgabe aller Registrierungen und natürlich das erstellen einer Instanz.
Drin ist auch Singleton. Soweit ich gesehen habe.

Jetzt mal ganz abgesehen von der Komponente an sich, was meinst du zu meinen obigen Kommentaren und wieso nutzt du nicht eine externe Komponente, bzw. nimmst den "ComponentContainer" raus, in eine eigene Klasse?


Gruss Peter

Thema: Muss man seine Meinung/Einschätzung immer fundiert begründen?
Am im Forum: Smalltalk

Hallo Jack

Aber auch diese persönliche Einschätzung muss ja mehr in sich haben, als leere Luft.
Und "krank" als als Einschätzung zu wählen, ist nicht einfach, riskant und müsste eigentlich überlegt sein. Ansonsten ist die Einschätzung krank. Meiner Meinung nach.


Gruss Peter

Thema: Muss man seine Meinung/Einschätzung immer fundiert begründen?
Am im Forum: Smalltalk

Hallo Uwe

Eine sogenannte "Nötigung" ist gar nicht nötig. Die hat herbivore ja schon so.

Er muss nichts, ich muss nichts, du musst nichts, niemand muss was. Das scheinen auch nicht alle zu begreifen.

Wenn jedoch ein bestimmter User zu fast jedem seinen Senf dazu gibt, sowie vielfach auch das letzte Wort (Post) haben "muss"?, nun, dann stellt sich mir hier nicht die Frage nach einer Nötigung, sondern eine nach der Glaubwürdigkeit dieses Users.
Wenn ich etwas schreibe, dann stehe ich auch hinter dem und erläutere dies so tief und breit, wie es gefordert ist. Weil ich das will. Weil mir das hilft. Weil das meine Meinung ändern könnte und meine Glaubwürdigkeit auch nichts ins Wanken gerät.


Gruss Peter

Thema: Odp.Net / Oracle.DataAccess - verschiedene Versionen
Am im Forum: Datentechnologien

Salute LuckyStrike

Mit weichen Referenzen, die zur Laufzeit eingebunden werden.
Bspw. mit einem DI-Container und einer XML-Konfiguration.


Gruss Peter

Thema: zwei eigentlich gleiche DateTime Werte nicht gleich?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hoi alex.enjoy

Schreib dir eine Extensionmethod für die Tests, die nur Jahr, Monat und Tag vergleicht, oder zusätzlich noch die Zeit ohne Ticks, bzw. ohne Sekunden. Je nach em wie du es brauchst.

Ich hatte das gleiche Problem auch schon :-)


Gruss Peter

Thema: EBCs 2.0, deren Nähe zur prozeduralen Programmierung und deren Nutzen [inkl. Metadiskussion]
Am im Forum: Rund um die Programmierung

Hallo Arithmetik

Zitat von Arithmetik
Einen essentiellen Punkt scheinst du da außer acht zu lassen. Mit Hochsprachen konnte man schneller zum Ziel kommen. Daher hatte man einen spürbaren und vor allem messbaren Mehrwert. EBC bietet das nicht.
Sagt wer? Du?

Erstmal: EBCs bieten auch Mehrwert(e), ob das jetzt die Produktivität sein mag oder nicht, wage ich noch nicht zu beurteilen.

Ich weiss nur, das ich mit einem Kollegen zusammen per EBC, eine komplexe Implementation in sehr kurzer Zeit, vollkommen ohne Abhängigkeiten innerhalb der Komponenten selber entwickeln konnte, und testbar war am Ende alles, ohne Zusatzaufwand.

Was ich damit sagen will: Produktivität muss kein Mehrwert von EBC sein. Vielleicht ist es ja einer, aber die Primärmehrwerte gehen eher in Richtung der kompletten Entkoppelung der kleinen Komponenten, nur die Blackbox weiss über die Verbindungen Bescheid.

Bitte schildere doch mal deine Ansicht.


Gruss Peter

Thema: DI/IoC in der Praxis (und korrekter Aufbau der zugehörigen Klassen)
Am im Forum: Rund um die Programmierung

Hallo haarrrgh

Vielfach reicht ein Resolution-Root, und ggf. ein paar Service Locator-Aufrufe.
Bei Windows Forms könntest du die Forms über container.Resolve<IMainForm>();, etc... auflösen.
Oder direkt über container.Resolve<MainForm>();, mit http://lightcore.ch/ ist es möglich, konkrete Klassen vom Container zu nutzen, das die Abhängigkeiten über den Konstruktor bekommen.


Gruss Peter

Thema: [beantwortet] eigene Collection statt IList<T>?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen

Wie herbivore schon geschrieben hat, wurde Collection<T> für die Erweiterung entwickelt. Hat also virtuelle Methoden. Auch dafür gibts Interfaces, bspw. ICollection<T>.

List<T> sollte nicht veröffentlicht werden, sondern ein Interna einer Klasse bleiben. Das rührt daher, das diese Klasse auf Performance ausgerichtet, geschrieben wurde und keine Erweiterungspunkte enthält.

Vor einiger Zeit habe ich das Thema, was und wieso man etwas als Rückgabewert oder Parameterwert nutzen soll, durchgenommen. Entstanden ist dabei ein Artikel:
- Wann IEnumerable nutzen, wann ICollection und wieso überhaupt IList?


Gruss Peter