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 m0rius
Thema: Rechnen mit unbegrenzt großen Zahlen (Taschenrechner)
Am im Forum: Rund um die Programmierung

Hallo Thomas A,

herzlich Willkommen auf myCSharp!

Beschäftige dich mal mit der BigInteger-Struktur, die dem .NET-Framework in der Version 4.0 hinzugefügt wurde. Die Größe der Ganzzahlen, mit denen du damit rechnen kannst, ist dabei nur durch den vorhandenen Arbeitsspeicher begrenzt.

m0rius

Thema: Frohes Neujahr 2012!
Am im Forum: Smalltalk

Hallo zusammen,

ich wünsche euch allen ein frohes, neues Jahr! Denkt an die guten Vorsätze — auch außerhalb der Entwicklerwelt ;-).

m0rius

Thema: Wenn etwas schiefgeht, sind alle Anderen schuld...: Welche Ausreden kennt ihr?
Am im Forum: Smalltalk

Hallo zusammen,

ich fand die 404-Seiten von GitHub und der Kampagnenseite von Herman Cain recht gut ...

m0rius

Thema: Lambda bei Generisch vererbten Klasse: Wie ermittelt der Compiler den Typ des Lambda-Parameters?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo macFish,

schön zu sehen, dass du dich mit FluentNHibernate beschäftigst.

Deine Klasse CustomerMap leitet ja von ClassMap<Customer> ab. Damit legst du fest, dass das T in ClassMap<T> vom Typ Customer ist. Das verwendet der Compiler dann für die Lambda-Ausdrücke.

m0rius

Thema: (Logic, Data, Presentations Layer), wo bring ich mein O/R Mapping unter ??
Am im Forum: Rund um die Programmierung

Hallo macFish,

genau, in die Repository-Klasse kommen datenbankspezifische Lese-, Speicher- und Lösch-Funktionen.
In die Service-Klassen kommen weitere Abfragemethoden, die Anwendungslogik erhalten und auf den Repository-Methoden aufbauen. Das heißt aber nicht, dass hier alles landet, was nicht ins Repository gehört!

m0rius

Thema: (Logic, Data, Presentations Layer), wo bring ich mein O/R Mapping unter ??
Am im Forum: Rund um die Programmierung

Hallo macFish,

bevor du anfängst, DataSets und DataTables zu verwenden und manuell zu mappen, würde ich mich an deiner Stelle vorher mit (Fluent)NHibernate beschäftigen — so aufwändig ist das Mapping damit nämlich nicht.
Wenn du das Entity Framework verwenden willst, wäre der Code First Ansatz für dich vermutlich eine gute Wahl.

Domain-Objekte sind die Model-Klassen im Model-Projekt (oder Structure, wie es bei dir heißt).

Hast du dir den Thread durchgelesen, den ich gepostet habe? Vermutlich nicht, denn darin wird ersichtlich, was ich mit Repositories und Services meine.

Zitat von macFish
Was ist eine Repositories ? Hab das schon mal gehört aber völlig vergessen was das zu bedeuten hat und google will nicht.
Sorry, aber darauf antworten will ich wiederum nicht. Siehe [Hinweis] Wie poste ich richtig? (Punkt 1.1).

m0rius

Thema: (Logic, Data, Presentations Layer), wo bring ich mein O/R Mapping unter ??
Am im Forum: Rund um die Programmierung

Hallo macFish,

herzlich Willkommen auf myCSharp.de!

O/R-Mapping ist von der Datenbanktechnologie abhängig und gehört daher in die Datenzugriffsschicht. Höhere Schichten verwenden die Domain-Objekte, wie bei dir SimpleStock, ohne zu wissen, wie diese mit Werten befüllt werden. Ob das über O/R-Mapping, manuelles Mapping oder über einen anderen Mechanismus passiert, ist dabei egal — Stichwort Separation of concerns.

Dein Projekt Structure – oder geläufiger: Model – sollte lediglich die Domain-Objekte enthalten. Funktionen wie Save(), die ein SimpleStock-Objekt persistieren, gehören in ein Repository in die Datenzugriffsschicht. Auf diese Repositories kann dann im Business-Layer (in deinem Falle: Logic) über Service-Klassen zugegriffen werden. Worin die Vorteile in dieser Vorgehensweise liegen, erkläre ich in Business und Persistence Methoden wie implementieren? (Aufteilung Business/Service/DAO/NHibernate).

m0rius

Thema: Business und Persistence Methoden wie implementieren? (Aufteilung Business/Service/DAO/NHibernate)
Am im Forum: Rund um die Programmierung

Hallo Powerslave,

nein, der Datenzugriff liegt lediglich im DataAccess-Layer — dafür existiert dieser ja gekapselt. In meinen Projekten habe ich Repositories und Services, die folgendermaßen strukturiert sind:

  • Repositories unterstützen üblicherweise nur die Methoden Retrieve(), RetrieveAll(), Save() und Delete().
  • Services hingegen besitzen die genannten 4 Methoden, die die Aufrufe einfach nur an die Repositories durchreichen, sowie weitere Methoden, die Anwendungslogik enthalten, wie zum Beispiel RetrieveRandom() (oder wie in deinem Fall GetEmployeesStartingWith("A")).
Ein EmployeeService könnte dann z.B. so aussehen:

public class EmployeeService : IEmployeeService
{
    private readonly IEmployeeRepository _employeeRepository;

    // Hier injizierst du ein Repository für deine spezifische Datenbanktechnologie
    public EmployeeService(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

    // Diese Methode wird lediglich durchgereicht ...
    public IQueryable<Employee> RetrieveAll()
    {
        return _employeeRepository.RetrieveAll();
    }

    // Diese Methode wird lediglich durchgereicht ...
    public Employee Retrieve(int employeeID)
    {
        return _employeeRepository.Retrieve(employeeID);
    }

    // Diese Methode wird lediglich durchgereicht ...
    public void Save(Employee employee)
    {
        return _employeeRepository.Save(employee);
    }

    // Diese Methode wird lediglich durchgereicht ...
    public void Delete(Employee employee)
    {
        return _employeeRepository.Delete(employee);
    }

    // Diese Methode enthält Logik, die unabhängig von der Datenbanktechnologie ist.
    // Sie benötigt lediglich eine funktionierende RetrieveAll()-Methode.
    public IQueryable<Employee> RetrieveAllStartingWith(string value)
    {
        return RetrieveAll()
            .Where(employee => employee.StartsWith(value))
            .AsQueryable();
    }
}
Der Vorteil bei dieser Architektur liegt unter anderem darin, dass die Logik von RetrieveAllStartingWith(string value) unabhängig von der Datenquelle ist. Wechselt du also die Technologie, die du zum Persistieren deiner Daten verwendest , musst du lediglich ein neues Repository mit den 4 genannten Repository-Methoden implementieren. Der EmployeeService funktioniert danach immer noch einwandfrei, da sich an der Logik von RetrieveAllStartingWith(string value) ja nichts geändert hat.

m0rius

Thema: Business und Persistence Methoden wie implementieren? (Aufteilung Business/Service/DAO/NHibernate)
Am im Forum: Rund um die Programmierung

Hallo Powerslave,

für mich gehören Methoden wie _employeeService.GetEmployeesStartingWith("A") ausschließlich in den Service-Layer. Wenn du den Methodenaufruf lediglich an den DataAccess-Layer durchreichst, musst du beim Auswechseln der Datenbanktechnologie all diese Methoden neu implementieren, was unnötig ist.
Stattdessen implementiere ich im DataAccess-Layer lediglich grundlegende Methoden, so zum Beispiel _employeeDao.GetAllEmployees() oder _employeeDao.GetEmployee(int employeeID), und lasse die Logik im Service-Layer — da, wo sie hingehört.

m0rius

Thema: ASP.NET MVC: Gestaltung des Models bei Seiten mit Formularen
Am im Forum: Web-Technologien

Hallo Abt,

AutoMapper hilft beim Mappen der Eigenschaften natürlich ungemein, aber ein gewisser Mehraufwand bleibt, das ist richtig.

m0rius

Thema: ASP.NET MVC: Gestaltung des Models bei Seiten mit Formularen
Am im Forum: Web-Technologien

Hallo Abt,

ja, das ViewModel enthält üblicherweise zusätzliche Werte, die für die Anzeige benötigt werden, darin stimme ich natürlich mit dir überein. Dafür sind ViewModels ja schließlich gedacht.
Auf der anderen Seite ist das ViewModel aber eben nicht nur ein Wrapper um die Domain-Models (oder Entities). Ich will hier gar nicht zu sehr ins Detail gehen, sondern auf eine gute Antwort von Darin Dimitrov auf StackOverflow verweisen.

m0rius

Thema: Stoppuhr: In Label per Timer die Sekunden füllen: Es wird nur jede zweite Sekunde angezeigt
Am im Forum: GUI: Windows-Forms

Hallo hfb11,

ich habe nicht den Eindruck, dass du dir genau durchgelesen hast, was schon einige Mitglieder vor mir geschrieben haben. Du sollst den Timer häufiger aufrufen, d.h. mehrfach pro Sekunde, nicht seltener. Die Ungenauigkeit der Timer-Klasse spielt dafür sehr wohl eine Rolle.

m0rius

Thema: Stoppuhr: In Label per Timer die Sekunden füllen: Es wird nur jede zweite Sekunde angezeigt
Am im Forum: GUI: Windows-Forms

Hallo hfb11,

poste doch mal den relevanten Quellcode, in dem du das Label aktualisierst. Rein durch deine Beschreibung ist es schwer, dir zu helfen.

m0rius

Thema: ASP.NET MVC Konzept für RIA
Am im Forum: Web-Technologien

Hallo Abt,

WebSockets kommen dem schon recht nahe. Klassiche HTTP-Requests via AJAX ist in SignalR ja nur als Fallback-Lösung gedacht, wenn WebSockets nicht unterstützt werden.

Guck dir mal das Video in diesem Blogpost an: KsigDo Task Pad – Real-Time UI View Model syncing across users with ASP.NET, SignalR, Knockout MVVM and EF

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo dN!3L,

jetzt ist der aktualisierte Quellcode auch auf GitHub verfügbar. Ich hatte deine Änderungen zwar direkt am 15. Oktober umgesetzt, aber noch nicht aktualisiert.

m0rius

Thema: ASP.NET MVC Konzept für RIA
Am im Forum: Web-Technologien

Hallo seeba,

freut mich, dass dir das weiterhilft. Dann verweise ich dich an dieser Stelle auch noch auf learn.knockoutjs.com, wenn du dir Knockout aneignen möchtest. Sehr schöne interaktive Tutorials vom Projektautor ...

m0rius

Thema: ASP.NET MVC Konzept für RIA
Am im Forum: Web-Technologien

Hallo seeba,

je nachdem, was genau du umsetzen möchtest, könnte SignalR zur Echtzeit-Unterstützung hilfreich sein; siehe dazu den Blogpost Use SignalR with Knockout for real-time UX updates in ASP.NET MVC 3.

m0rius

Thema: mittels SmtpClient versendete E-Mails nicht im Ordner "Gesendet"
Am im Forum: Netzwerktechnologien

Hallo aime2code,

damit landet diese aber im "Posteingang", nicht in "Gesendet".

m0rius

Thema: Fenster nicht schließen, sonder nur ausblenden
Am im Forum: GUI: Windows-Forms

... und anschließend anstelle der Close()-Methode die Hide()-Methode aufrufen.

m0rius

Thema: WPF / MVVM Projektstruktur
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

was zurzeit eventuell auch interessant ist: Vom 12. – 14. November bietet Pluralsight 3 Stunden kostenloses Training für WPF bzw. Prism an. Mehr Details unter FREE WPF and Silverlight Online Prism Training from PluralSight on Nov 12-Nov 14.

m0rius

Thema: [erledigt] LINQ: .Where() auf IEnumerable<IGrouping<int,object>>
Am im Forum: Datentechnologien

Hallo qde,

über die IGrouping.Key-Eigenschaft gelangst du an die Id, nach der du gruppierst:

var list = groupedlist.Where(q => q.Key == 10);

m0rius

Thema: Empfehlung Monitor (24" oder 27", zum Arbeiten und gelegentlichen Spielen geeignet)
Am im Forum: Smalltalk

Hallo Fabian,

ich kann coffeebean nur unterstützen. Ich besitze den Samsung Syncmaster 2443BW mittlerweile seit mehr als einem Jahr und kaufe mir demnächst einen weiteren. Klare Kaufempfehlung auch von mir!

m0rius

Thema: XNA: 3D Programmierung
Am im Forum: Buchempfehlungen

Hallo Spike 1302,

sehr gute 3D-Tutorials für den Einstieg in die Materie findest du unter Riemer's XNA Tutorials. In den vier Einzelteilen der Artikelserie erstellst du unter anderem einen voll funktionsfähigen Flugsimulator sowie ein detailliertes Terrain.

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo zusammen,

ich habe nun sämtliche Verbesserungen (bis auf die Random-Erweiterungsmethode; die kommt noch) eingearbeitet und hochgeladen. Soweit vielen Dank dafür!

Habt ihr ansonsten zusätzliche Anregungen oder Vorschläge für weitere Erweiterungsmethoden?

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo dN!3L,

super, dann habe ich dich richtig verstanden. Ich melde mich hier wieder, wenn ich die Änderungen vorgenommen und gepusht habe.


Hallo gfoidl,

du hast Recht, vielen Dank für den Hinweis. Wird geändert!

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo dN!3L,

meine Implementierung der CountsMax-Methode sieht nun folgendermaßen aus:

public static bool CountsMax<TSource>(this IEnumerable<TSource> source, int expectedMaxItemCount)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }

    if (expectedMaxItemCount < 0)
    {
        throw new ArgumentException("The expected item count must not be negative.", "expectedMaxItemCount");
    }

    int itemCount = 0;
    foreach (TSource item in source)
    {
        itemCount++;

        if (itemCount > expectedMaxItemCount)
        {
            return false;
        }
    }

    return true;
}
Ist das eine Implementierung, wie du sie vorgesehen hast? Analog würden die Methoden CountsMin und CountsExactly aussehen.

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo dN!3L,

vielen Dank für die Anmerkung — ich mache mich mal ans Überarbeiten und poste hier anschließend eine der Implementierungen.

Mittlerweile ist ExtraLINQ auch als NuGet-Package zu haben: install-package ExtraLINQ oder install-package extralinq (siehe NuGet » Packages » ExtraLINQ).

m0rius

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Zur Zeit sind folgende Erweiterungsmethoden enthalten:

Thema: [ExtensionMethods] ExtraLINQ — Additional Extension Methods for LINQ to Objects
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo,

an dieser Stelle möchte ich euch mein neuestes Projekt vorstellen:

[SIZE]ExtraLINQ[/SIZE]

[B]ExtraLINQ[/B] ist eine Klassenbibliothek, die zusätzliche Erweiterungsmethoden für LINQ to Objects bereitstellt.

Den Quellcode findet ihr unter Github » ExtraLINQ.

m0rius

Thema: Algorithmus gesucht: Ausgleich für wechselseitig vorgestrecktes Geld mit möglichst wenigen Zahlungen
Am im Forum: Rund um die Programmierung

Hallo herbivore,

nur einmal zur Klärung der Fachbegriffe: Was genau ist für dich ein Nettoschuldner? Ist das jemand, der für sich nicht auf ein Nullsummenspiel von Auslagen / ausstehendem Geld kommt? Ich kann den Begriff nur so auslegen, da sonst deine Aussage mit mindestens n/2 Transaktionen falsch wäre (A schuldet B einen Betrag x, B schuldet C x und C schuldet A x liefe auf 0 Transaktionen hinaus).

m0rius