Frage

Die Hauptwebanwendung meines Unternehmens schreit nach einer Reihe nützlicher Bibliotheken, um sie irgendwie wartbar und skalierbar zu machen, und einer meiner Kollegen hat CSLA vorgeschlagen.Also habe ich das Buch gekauft, aber als:

Programmierer lesen keine Bücher mehr

Ich wollte die Meinung der SOFlow-Community dazu einschätzen.

Hier also meine Fragen:

  1. Wie können Menschen CSLA verwenden?
  2. Was sind die Vor- und Nachteile?
  3. Passt CSLA wirklich nicht zu TDD?
  4. Was sind meine Alternativen?
  5. Wenn Sie es nicht mehr verwenden oder sich dagegen entschieden haben, warum?
War es hilfreich?

Lösung

Bevor ich Ihre Frage konkret beantworte, möchte ich einige Gedanken niederschreiben.Ist CSLA das Richtige für Ihr Projekt?Es kommt darauf an.Ich persönlich würde CSLA für Desktop-basierte Anwendungen in Betracht ziehen, bei denen Unit-Tests keine hohe Priorität haben.CSLA eignet sich hervorragend, wenn Sie problemlos auf eine N-Tier-Anwendung skalieren möchten.CSLA neigt dazu, etwas ins Wanken zu geraten, da es keine reinen Unit-Tests zulässt.Das stimmt, aber wie bei allem in der Technik glaube ich, dass es das gibt Es gibt keinen wahren Weg.Unit-Tests sind möglicherweise nicht etwas, das Sie für ein bestimmtes Projekt durchführen.Was für ein Team und ein Projekt funktioniert, funktioniert möglicherweise nicht für ein anderes Team oder ein anderes Projekt.

Es gibt auch viele Missverständnisse in Bezug auf CSLA.Es ist kein ORM.Es ist kein Konkurrent von NHibernate (tatsächlich passen die Verwendung von CLSA Business Objects und NHibernate als Datenzugriff wirklich gut zusammen).Es formalisiert das Konzept von a Mobiles Objekt.

1.Wie viele Personen nutzen CSLA?
Basierend auf CSLA-Foren, Ich würde sagen, dass es da draußen eine ganze Reihe CSLA-basierter Projekte gibt.Ehrlich gesagt habe ich keine Ahnung, wie viele Leute es tatsächlich nutzen.Ich habe es in der Vergangenheit bei zwei Projekten verwendet.

2.Was sind die Vor- und Nachteile?
Obwohl es schwierig ist, sie in einer kurzen Liste zusammenzufassen, sind hier einige der Vor- und Nachteile, die mir in den Sinn kommen.
Vorteile:

  • Es ist einfach, neue Entwickler auf den neuesten Stand zu bringen.Das CSLA -Buch und die Beispiel -App sind großartige Ressourcen, um auf dem neuesten Stand zu kommen.
  • Das Validierungs-Framework ist wirklich Weltklasse – und wurde für viele andere Nicht-CSLA-Projekte und Technologien „ausgeliehen“.
  • n-stufiges Rückgängigmachen innerhalb Ihrer Geschäftsobjekte
  • Änderung der Konfigurationszeile für n-Tier-Skalierbarkeit (Hinweis:Nicht einmal ein Neukompilieren ist notwendig)
  • Schlüsseltechnologien werden vom „echten“ Code abstrahiert.Bei der Einführung von WCF hatte es einen minimalen Einfluss auf den CSLA -Code.
  • Es ist möglich, Ihre Geschäftsobjekte zwischen Windows- und Webprojekten zu teilen.
  • CSLA fördert die Normalisierung von Verhalten statt der Normalisierung von Daten (Verlassen der Datenbank zur Datennormalisierung).

Nachteile:

  • Schwierigkeiten beim Unit-Testen
  • Mangelnde Trennung der Belange (im Allgemeinen enthalten Ihre Geschäftsobjekte einen Datenzugriffscode).
  • Da CSLA die Normalisierung fördert Verhalten, anstatt die Normalisierung von Daten, Dies kann dazu führen, dass Geschäftsobjekte ähnliche Namen haben, aber unterschiedliche Zwecke haben.Dies kann zu Verwirrung und dem Gefühl führen, dass Sie Objekte nicht ordnungsgemäß wiederverwenden.Sobald jedoch der physiologische Sprung vollzogen ist, macht er mehr als Sinn – es scheint unangemessen, Objekte auf die „alte“ Art und Weise zu strukturieren.
  • Es ist nicht „in Mode“, Anwendungen auf diese Weise zu erstellen.Möglicherweise fällt es Ihnen schwer, Entwickler zu finden, die sich für die Technologie begeistern.

3.Passt CSLA nach dem Lesen wirklich nicht zu TDD?
Ich habe keinen effektiven Weg gefunden, TDD mit CSLA durchzuführen.Dennoch bin ich mir sicher, dass es viele klügere Leute als mich gibt, die dies möglicherweise mit größerem Erfolg versucht haben.

4.Was sind meine Alternativen?
Domain-Driven-Design erfreut sich derzeit großer Beliebtheit (und das zu Recht – für einige Anwendungen ist es fantastisch).Es gibt auch eine Reihe interessanter Muster, die sich aus der Einführung von LINQ (und LINQ to SQL, Entity Framework usw.) ergeben.Fowlers Buch PoEAA, beschreibt viele Muster, die für Ihre Anwendung geeignet sein könnten.Beachten Sie, dass einige Muster konkurrieren (d. h.Active Record and Repository) und sind daher für den Einsatz in bestimmten Szenarien gedacht.Obwohl CSLA keinem der in diesem Buch beschriebenen Muster genau entspricht, ähnelt es am ehesten Active Record (obwohl es meiner Meinung nach kurzsichtig ist, eine genaue Übereinstimmung für dieses Muster zu behaupten).

5.Wenn Sie es nicht mehr verwenden oder sich dagegen entschieden haben, warum?
Ich habe CSLA für mein letztes Projekt nicht vollständig empfohlen, da ich glaube, dass der Umfang der Anwendung zu groß für die Vorteile ist, die CSLA bietet.
Ich würde nicht Verwenden Sie CSLA für ein Webprojekt.Ich bin der Meinung, dass es andere Technologien gibt, die besser zum Erstellen von Anwendungen in dieser Umgebung geeignet sind.

Zusammenfassend ist CSLA zwar alles andere als ein Silberkugel, es ist für einige Szenarien geeignet.

Hoffe das hilft!

Andere Tipps

Nachdem ich alle Antworten gelesen habe, ist mir aufgefallen, dass einige Leute falsche Vorstellungen über CSLA haben.

Erste, CSLA ist kein ORM.Wie kann ich das so eindeutig sagen?Weil Rockford Lhotka es selbst oft in Interviews auf der Website gesagt hat .NET rockt Und Hänselminuten Podcasts.Suche beliebig Episode, in der Rocky interviewt wurde, und er wird es ohne Zweifel darlegen.Ich denke, das ist für die Menschen die wichtigste Tatsache, die es zu verstehen gilt, denn fast alle Missverständnisse über CSLA resultieren daraus, dass man glaubt, es handele sich um ein ORM, oder versucht, es als solches zu verwenden.

Wie Brad Leach in seiner Antwort anspielte, modellieren CSLA-Objekte das Verhalten, obwohl es vielleicht zutreffender wäre zu sagen, dass sie das Verhalten von Daten modellieren, da Daten für sie von wesentlicher Bedeutung sind.CSLA ist kein ORM, da es völlig unabhängig davon ist, wie Sie mit Ihrem Datenspeicher kommunizieren.Du sollen Verwenden Sie mit CSLA eine Art Datenzugriffsschicht, vielleicht sogar ein ORM.(Ich tue.Ich verwende jetzt Entity Framework, was wunderbar funktioniert.)

Nun zum Unit-Test.Ich hatte nie Schwierigkeiten beim Unit-Testen meiner CSLA-Objekte, da ich meinen Datenzugriffscode nicht direkt in meine Geschäftsobjekte einfüge.Stattdessen verwende ich eine Variation des Repository-Musters. Das Repository wird von CSLA genutzt, nicht umgekehrt. Indem ich ein gefälschtes Repository für meine Unit-Tests eintausche und das lokale Datenportal verwende, BOOM! Es ist einfach.(Sobald Entity Framework die Verwendung von POCOs ermöglicht, wird dies noch sauberer.)

All dies resultiert aus der Erkenntnis, dass CSLA kein ORM ist.Es könnte einen ORM verbrauchen, aber es selbst ist keiner.

Prost.

AKTUALISIEREN

Ich dachte, ich würde noch ein paar Kommentare abgeben.

Einige Leute haben gesagt, dass CSLA im Vergleich zu Dingen wie LINQ to SQL usw. ausführlich ist.Aber hier vergleichen wir Äpfel mit Birnen.LINQ to SQL ist ein ORM.Es bietet einige Dinge, die CSLA nicht bietet, und CSLA bietet einige Dinge, die L2S nicht bietet, wie integrierte Validierung und N-Tier-Persistenz über die verschiedenen Remote-Datenportale.Tatsächlich würde ich das Letzte sagen: N-stufige Beharrlichkeit übertrifft für mich alle.Wenn ich Entity Framework oder LINQ to SQL über das Netz verwenden möchte, muss ich so etwas wie WCF dazwischen einfügen, und das vervielfacht den Aufwand und die Komplexität enorm, bis zu dem Punkt, an dem ich denke, dass es so ist viel ausführlicher als CSLA.(Jetzt bin ich ein Fan von WCF, REST und SOA, aber verwende es dort, wo du es wirklich brauchst, etwa wenn du einen Dienst Dritten zugänglich machen möchtest.Für die meisten Branchenanwendungen ist es nicht wirklich erforderlich, und CSLA ist die bessere Wahl. Tatsächlich bietet Rocky mit der neuesten Version von CSLA eine WCFDataPortal, die ich verwendet habe.Es funktioniert großartig.

Ich bin ein Fan von SOLIDE, TDD und andere moderne Softwareentwicklungsprinzipien und verwenden Sie sie, wo immer dies praktisch ist.Ich denke jedoch, dass die Vorteile von CSLA einige der Einwände dieser Orthodoxien überwiegen, und auf jeden Fall ist es mir gelungen, dass CSLA mit TDD recht gut (und einfach) funktioniert, also ist das kein Problem.

Ja, ich (ähm, wir) haben es ausgiebig genutzt, um unsere Geschäftsprozesslogik zu modellieren, die hauptsächlich aus datengebundenen Formularen in einer Windows Forms-Anwendung bestand.Die Anwendung war ein Handelssystem.CSLA ist so konzipiert, dass es sich auf dieser Ebene direkt unter der Benutzeroberfläche befindet.

Wenn Sie an Ihre standardmäßige komplexe Branchenanwendung denken, verfügen Sie möglicherweise über ein Formular mit vielen Feldern und vielen Regeln für diese Felder (einschließlich feldübergreifender Validierungsregeln). Möglicherweise rufen Sie einen modalen Dialog auf, um ein untergeordnetes Objekt zu bearbeiten Ich möchte in der Lage sein, solche Dialoge abzubrechen und zu einem vorherigen Zustand zurückzukehren.CSLA unterstützt dies.

Der Nachteil besteht darin, dass es eine gewisse Lernkurve erfordert.

Das Wichtigste, woran Sie denken sollten, ist, CSLA zu verwenden, um zu modellieren, wie a Benutzer interagiert mit Formularen in einigen Anwendungen.Der effizienteste Weg für mich bestand darin, die Benutzeroberfläche zu entwerfen und ihre Abläufe, Verhaltens- und Validierungsregeln zu verstehen, bevor ich die CSLA-Objekte erstellte.Lassen Sie Ihre CSLA-Objekte nicht das UI-Design steuern.

Wir fanden es auch sehr nützlich, CSLA-Geschäftsobjekte serverseitig verwenden zu können, um von Clients gesendete Objekte zu validieren.

Wir hatten auch Mechanismen eingebaut, um die Validierung asynchron für den Webdienst durchzuführen (d. h.Überprüfung der Kreditlimitspanne eines Kontrahenten gegenüber einem Master).

CSLA erzwingt eine starke Trennung zwischen Ihrer Benutzeroberfläche, BusinessLogic und Persistance und wir haben eine Menge Unit-Tests dafür geschrieben.Es handelt sich möglicherweise nicht ausschließlich um TDD, da Sie es über das UI-Design steuern. Das bedeutet jedoch nicht, dass es nicht testbar ist.

Die einzige wirkliche Alternative besteht darin, eigene Modell-/Geschäftsobjekte zu erstellen, aber schon bald müssen Sie Funktionen implementieren, die CSLA standardmäßig bietet (INotifyPropertyChanged, IDataErrorInfo, PushState, PopState usw.).

Ich habe CSLA für ein Projekt verwendet und es hat großartig funktioniert und die Dinge viel einfacher und übersichtlicher gemacht.

Anstatt Ihr Team Geschäftsobjekte in einem eigenen, persönlichen Stil schreiben zu lassen, wissen wir, dass es einen gemeinsamen Standard gibt, an dem man arbeiten kann.

//Andy

Ich habe vor einigen Jahren Erfahrungen damit gemacht.Es ist eine brillante Architektur, aber sehr komplex, schwer zu verstehen oder zu ändern und sie löst ein Problem, das die meisten von uns, die webbasierte Anwendungen entwickeln, nicht unbedingt haben.Es wurde eher für Windows-basierte Anwendungen und die Handhabung mehrstufiger Rückgängigmachungen entwickelt, wobei der Schwerpunkt auf der Transaktionslogik liegt.Sie werden wahrscheinlich Leute sagen hören, dass dies unangemessen sei, da es sich bei Webanwendungen um Request-Response-Anwendungen auf Seitenebene handelt. Bei Webanwendungen im AJAX-Stil ist dieses Argument jedoch möglicherweise nicht so stichhaltig.

Es verfügt über ein sehr tiefes Objektmodell und es kann eine Weile dauern, bis Sie es wirklich verstanden haben.Natürlich kann sich in ein paar Jahren viel ändern.Mich würden weitere aktuelle Meinungen interessieren.

Alles in allem wäre es nicht meine erste Architekturwahl.

Zur Verteidigung der CSLA, obwohl ich vielen Kommentaren zustimme, insbesondere dem Unit-Testing ...

Mein Unternehmen nutzte es ausgiebig für eine Windows Forms-Dateneingabeanwendung, mit großem Erfolg.

  • Es bot sofort einsatzbereite Funktionen, für deren Entwicklung wir weder die Zeit noch das Fachwissen hatten.
  • Es standardisierte alle unsere Geschäftsobjekte, was die Wartung vereinfacht und die Lernkurve für unsere neuen Entwickler verkürzt.

Im Großen und Ganzen würde ich sagen, dass alle dadurch verursachten Probleme durch die Vorteile mehr als ausgeglichen wurden.

AKTUALISIEREN:Darüber hinaus verwenden wir es immer noch für unsere Windows-Formular-App, aber Experimente mit der Verwendung für andere Anwendungen wie Websites haben gezeigt, dass es möglicherweise zu umständlich ist, wenn Sie nicht viele seiner Funktionen benötigen, und wir untersuchen derzeit ein geringeres Gewicht Optionen für diese Szenarien.

Ich bin einem Team beigetreten, in dem CSLA obligatorisch ist.Wir nutzen das Remote-Datenportal nicht, was der einzige Grund ist, warum ich der Verwendung dieses Frameworks zustimmen kann.Ich habe mich nie für die Idee von CSLA entschieden, vielleicht ist das der Grund, warum ich nur Probleme damit habe, sorry.

Einige der Probleme:

Ich brauche keine Hürde zwischen meinem Code und dem .NET-Framework, und so fühlte sich dieses Framework für mich an.Ich hatte eine begrenzte Auswahl an Listenobjekten, während ich die umfangreichen Listenobjekte im .NET Framework einfach ignorieren musste.

Es ist völlig lächerlich, dass wir diese schreibgeschützten Listen und dann nicht schreibgeschützte Listen hatten.Wenn ich also ein Element zur Liste hinzufügen müsste, müsste ich die gesamte Liste neu erstellen ... meinst du das ernst?

Dann möchte csla meinen Objektstatus verwalten, was in Ordnung ist, aber nichts wirklich offengelegt wird.Manchmal möchte ich den Status eines Objekts manuell ändern, anstatt es erneut abzurufen, was csla anscheinend von mir verlangt.Am Ende erstelle ich im Grunde viele Eigenschaften, um Optionen offenzulegen, von denen Csla nicht dachte, dass ich direkten Zugriff darauf haben sollte.

Warum kann ich ein Objekt nicht einfach instanziieren?Am Ende erstellen wir statische Methoden, die ein Objekt instanziieren und zurückgeben ... machen Sie Witze?

Überprüfen Sie den Quellcode des Frameworks. Für mich sieht es so aus, als würde er den Reflexionscode zu sehr belasten.

Gründe für die Verwendung von csla:

  • Das reine .net-Framework ist zu mächtig für Sie.
  • Ihre Entwickler sind nicht erfahren und können das Konzept von Mustern nicht verstehen, dann wird Csla so ziemlich alle auf den gleichen Stand bringen.

    1. Ich brauche keine Straßensperre zwischen meinem Code und dem .NET-Framework ... Ich bleibe bei diesen Listenobjekten hängen.

Wir haben begonnen, CSLA zu verwenden, weil wir dachten, es würde bei unserer Modellebene helfen.War irgendwie übertrieben und im Wesentlichen verwenden wir jetzt nur noch die SmartDate-Klasse, nur weil wir bereits mit der Bibliothek verknüpft sind.

Wir dachten, die Validierungsschnittstelle würde uns wirklich dabei helfen, Geschäftsregeln durchzusetzen, aber sie funktionierte nicht gut mit WCF und Serialisierung (wir stecken immer noch bei Version 2.0.3.0 fest, daher könnten sich die Dinge geändert haben).

Nehmen Sie CSLA nicht von der Liste, aber informieren Sie sich vor der Verwendung über die Vorteile und stellen Sie sicher, dass sie tatsächlich zutreffen.Wird Ihr Team in der Lage sein, es korrekt/konsistent umzusetzen?Remoting und Portaltanz nötig?

Ich denke, jenseits aller theoretischen Überlegungen geht es vor allem um sauberen/wartbaren/erweiterbaren/testbaren Code, der grundlegenden bewährten Mustern folgt.

Ich habe die Codezeilen gezählt, die in einer bestimmten Domäne eines aus CSLA konvertierten Projekts benötigt werden.Zwischen all den verschiedenen CSLA-Objekten (schreibgeschützte + bearbeitbare + Root- + Listenkombinationen) und ihren gespeicherten Prozessen waren etwa 1700 Zeilen erforderlich, im Vergleich zu einer Linq2SQL + Repository-Implementierung, die 180 Zeilen benötigte.Die Linq2SQL-Version bestand hauptsächlich aus generierten Klassen, die Ihr Team nicht lesen muss, um sie zu verstehen.Und ja, ich habe CodeSmith verwendet, um die CSLA-Teile zu generieren, aber ich glaube jetzt an DRY-Code mit Einzelverantwortungsbits, und die CSLA-Implementierung sieht für mich jetzt wie der Held von gestern aus.

Als Alternative möchte ich vorschlagen, sich Linq2Sql/Entity Framework/NHibernate in Kombination mit Repository- und UnitOfWork-Mustern anzusehen.Schauen Sie mal vorbei http://www.codeplex.com/backgroundmotion

Prost!

Unser Unternehmen hat in einigen seiner Projekte CSLA praktiziert, und einige der Altprojekte sind weiterhin CSLA.Andere Projekte sind davon abgewichen, weil CSLA gegen eine schlichte und einfache OOP-Regel verstoßen hat:Prinzip der Einzelverantwortung.

CSLA-Objekte sind selbsterhaltend, z.B.Sie rufen ihre eigenen Daten ab, sie verwalten ihr eigenes Verhalten, sie retten sich.Leider bedeutete dies, dass Ihr durchschnittliches CSLA-Objekt mindestens drei Verantwortlichkeiten hat – die Darstellung des Domänenmodells, die Aufnahme von Geschäftsregeln und die Aufnahme der Datenzugriffsdefinition (nicht der DAL oder der Datenzugriffsimplementierung, wie ich zuvor angegeben/angedeutet habe), alles gleichzeitig Zeit.

Wir nutzen CSLA ausgiebig.Es gibt mehrere Vorteile;Erstens glaube ich, dass jeder Branchenentwickler Rocky Lhotkas Buch über Business Objects-Programmierung lesen sollte.Ich persönlich habe festgestellt, dass es zu meinen Top 3 der besten Programmierbücher überhaupt gehört.CSLA ist ein Framework, das auf diesem Buch basiert. Wenn Sie es verwenden, erhält Ihr Projekt Zugriff auf Funktionen auf sehr hoher Ebene, z. B. Rückgängigmachen auf n-Ebene, Validierungsregeln und Skalierbarkeitsarchitektur, während gleichzeitig die Details für Sie bereitgestellt werden.Beachten Sie, dass ich „bereitstellen“ und nicht „verstecken“ gesagt habe.Ich habe festgestellt, dass das Beste an CSLA darin besteht, dass man versteht, wie all diese Dinge bis hin zum Quellcode implementiert sind, ohne dass man sie selbst reproduzieren muss.Sie können wählen, ob Sie so viele oder wenige Funktionen verwenden möchten, wie Sie benötigen. Ich habe jedoch festgestellt, dass Sie Probleme wirklich vermeiden, wenn Sie den Designmustern des Frameworks treu bleiben.--Byron

Wir verwenden CSLA nun seit über fünf Jahren und sind der Meinung, dass es sich hervorragend für die Erstellung von Geschäftsanwendungen eignet.In Verbindung mit der Codegenerierung können Sie in relativ kurzer Zeit Geschäftsobjekte erstellen und sich auf das konzentrieren Fleisch der Bewerbung.

Ich verwende CSLA seit vb5, als es eher eine Sammlung von Mustern als ein Framework war.Mit der Einführung von.NET entwickelte sich CSLA zu einem vollwertigen Framework, das mit einer beträchtlichen Lernkurve verbunden war.Das CSLA befasst sich jedoch mit vielen Dingen, die alle Geschäftsentwickler irgendwann selbst schreiben (je nach Projektumfang):Validierungslogik, Authentifizierungslogik, Rückgängig-Funktionalität, Dirty-Logik usw.All diese Dinge erhalten Sie kostenlos und sofort einsatzbereit in einem schönen Framework.

Wie andere bereits erwähnt haben, zwingt es Entwickler als Framework dazu, Geschäftslogik auf ähnliche Weise zu schreiben.Es zwingt Sie auch dazu, eine Abstraktionsebene für Ihre Geschäftslogik bereitzustellen, sodass die Verwendung eines UI-Frameworks wie MVC, MVP, MVVM nicht so wichtig wird.

Tatsächlich würde ich behaupten, dass der Grund, warum so viele dieser UI-Muster heute (in der Microsoft-Welt) so hochgejubelt werden, darin liegt, dass die Leute schon so lange Dinge unglaublich falsch gemacht haben (z. B. die Verwendung von DataGrids in Ihrer Benutzeroberfläche usw.). Ihre Geschäftslogik überall.Tisk Tisk).Gestalten Sie Ihre Mittelschicht (Geschäftslogik) von Anfang an richtig. Sie können Ihre Mittelschicht in JEDER Benutzeroberfläche wiederverwenden.Win Form, ASP.NET/MVC, WCF-Dienst, WPF, Silverlight**, Windows-Dienst, ....

Aber abgesehen davon war für mich die eingebaute Skalierbarkeit der große Vorteil.Die CSLA verwendet ein Proxy-Muster, das über Ihre Konfigurationsdatei konfiguriert werden kann.Auf diese Weise können Ihre Geschäftsobjekte Remote-Aufrufe von Server zu Server durchführen, ohne dass Sie auch nur einen einzigen Code schreiben müssen.Möchten Sie Ihrem System weitere Benutzer hinzufügen?Kein Problem, stellen Sie Ihre CSLA-Geschäftsobjekte auf einem neuen Anwendungsserver bereit, ändern Sie den Konfigurationsdateieintrag und BAM!Sofortige Skalierbarkeitsanforderungen werden erfüllt.

Vergleichen Sie dies mit der Verwendung von DTOs, dem Speichern Ihrer Geschäftslogik auf dem Client (welcher Client auch immer das sein mag) und dem Schreiben jeder Ihrer eigenen CRUD-Methoden als Servicemethoden.YIKES!!!Ich sage nicht, dass dies ein schlechter Ansatz ist, aber ich würde es nicht tun wollen.Nicht, wenn es einen Rahmen gibt, der es im Wesentlichen für mich erledigt.

Ich werde wiederholen, was andere Leute gesagt haben, dass CSLA KEIN ORM ist.CSLA zwingt Sie dazu, Ihre Geschäftsobjekte mit Daten zu versorgen.Es ist ihnen egal, woher Sie Ihre Daten beziehen.Mithilfe eines ORM können Sie Ihre Geschäftsobjekte mit Daten versorgen.Sie können auch rohes ADO.NET, andere Dienste (RESTFUl, SOAP) und Excel-Tabellen verwenden. Ich kann hier weitermachen.

Was Ihre Unterstützung für TDD betrifft, habe ich diesen Ansatz auch nie mit CSLA versucht.Ich habe den Ansatz gewählt, bei dem ich meine Mittelschicht (z. B. Geschäftsobjekte) mithilfe von Klassen- und Sequenzdiagrammen modelliere und dabei meistens das Anwendungsfall-, Bildschirm- und/oder Prozessdesign vorgeben lasse.Vielleicht etwas altmodisch, aber UML hat mir bei meinen Design- und Entwicklungsbemühungen immer sehr gute Dienste geleistet.Ich habe erfolgreich sehr große und skalierbare Anwendungen entworfen und entwickelt, die auch heute noch verwendet werden.Und bis WCF RIA ausgereift ist, werde ich weiterhin CSLA verwenden.

** mit einigen Workarounds

Ich bin neu bei CSLA, aber ich verstehe die Konzepte und verstehe bereits, dass es kein ORM-Tool ist, also hör auf, diese verdammten Drum-Leute zu schlagen.Es gibt Funktionen von CSLA, die mir gefallen, aber wenn ich sie verwende, fühlt es sich ein bisschen so an, als stünde ein Zauberer hinter dem Vorhang.Ich denke, wenn es Ihnen nichts ausmacht, nicht zu wissen, wie es funktioniert, können Sie die Objekte verwenden und sie funktionieren einwandfrei.

Für Anfänger gibt es eine große Lernkurve und ich denke, dass es sehr von Vorteil wäre, wenn man 5–15 Minuten Zeit hätte.Videos wie Microsoft zum Erlernen der Grundlagen.Oder wie wäre es mit der Veröffentlichung eines Begleitbuchs mit dem Code, anstatt den Code herauszugeben und Monate damit zu verbringen, das Buch herauszubringen?Ich sage nur Herr Lohtka...Wir haben vor dem Buch angefangen, unsere Sachen aufzubauen, und ich hatte die ganze Zeit Probleme.Aber wie gesagt, ich bin neu darin.

Wir haben CSLA verwendet.Wir haben unsere Objekte an ihre Form angepasst und dann 10 % von dem verwendet, was der Rahmen bot.Objektebene rückgängig machen?Habe es nicht genutzt.NTier-Flexibilität?Habe es nicht genutzt.Am Ende haben wir so viel Geschäftsregelcode geschrieben, dass ich dachte, das Einzige, was wir von CSLA mitnehmen würden, wäre Komplexität.Einige „in die Jahre gekommene“ Entwickler, die sich mit dem Framework auskennen, benutzten es als Hammer, weil sie einen Nagel hatten, den es zu schlagen galt.CSLA war in ihrem Bann und ich vermute, dass viele Befürworter des Rahmenwerks die Dinge auch aus dieser Perspektive sehen.

Ich denke, unsere erfahrenen Entwickler sind glücklich, weil für sie alles Sinn ergibt.Ich denke, wenn es in Ihrer Organisation keine neuen Programmierer gibt und es Ihnen langweilig wird, effiziente und einfache POCO-Objekte mit wohlgeformten Mustern zu schreiben, dann versuchen Sie es.Verwenden Sie CSLA.

Ich verwende CSLA als Geschäftsobjekt-Framework für ein mittelgroßes Projekt.Das Framework hat seit den VB6-Tagen einen langen Weg zurückgelegt und bietet ein außergewöhnliches Maß an Flexibilität und „out of the box“-Funktionalität.Die mobilen Smart Objects von CSLA erleichtern die UI-Entwicklung erheblich.Ich stimme jedoch mit anderen überein, dass es nicht für jede Situation das richtige Werkzeug ist.Es ist definitiv ein gewisser Overhead damit verbunden, aber auch viel Strom.Persönlich freue ich mich darauf, CSLA Light mit Silverlight zu verwenden.

Vorteile:

  • Agnostisch gegenüber Datentechnologie1
  • Große Installationsbasis und es ist KOSTENLOS!!
  • Stabiler und logischer Rahmen
  • Der Datenzugriffscode kann sich in Ihren Objekten oder in einer separaten Assembly befinden
  • Validierung und Autorisierung von Eigenschaften und Objekten

Nachteile

  • Der Code kann sehr wartungsintensiv sein2
  • Für eine effektive Nutzung ist wahrscheinlich ein Codegenerator erforderlich
  • Lernkurve.Die Struktur von CSLA-Objekten ist leicht zu verstehen, die Vorbehalte können jedoch Kopfschmerzen verursachen.


Ich bin mir beim testgetriebenen Design nicht sicher.Ich mache keine Unit-Tests oder testgetriebenen Designs (eine Schande für mich), daher weiß ich nicht, ob sich Unit-Tests von TDD unterscheiden, aber ich weiß, dass die neueste Version des Frameworks Unit-Tests enthält.


1 Das ist gut so, denn Datenzugriffstechnologien bleiben nie lange gleich.
2 Dies ist mit neueren Versionen des Frameworks besser geworden.

Viele Leute empfehlen die Codegenerierung mit CSLA.Ich würde Ihnen empfehlen, sich unsere Reihe unterstützter Vorlagen anzusehen, da diese Ihren ROI enorm steigern werden.

Danke -blake niemyjski (Autor der CodeSmith CSLA-Vorlagen)

Ich habe es vor ein paar Jahren für ein Projekt verwendet.Aber als das Projekt fertig war, konnte ich niemandem sagen, was CSLA für mich getan hat.Klar, ich habe von seinen Klassen geerbt.Aber ich konnte diese Vererbung ohne Umstrukturierung aus fast allen Klassen entfernen.Wir hatten keine Verwendung für das N-Tier-Zeug.Das Rückgängigmachen auf n Ebenen war so langsam, dass wir es nicht verwenden konnten.Ich denke also, dass es uns am Ende nur dabei geholfen hat, unsere Klassen zu modellieren.

Allerdings haben auch andere Teams damit begonnen, es zu nutzen (nach einem schrecklichen Versuch eines Teams, ein eigenes Framework zu erstellen).Es muss also etwas Wertvolles drin sein, denn sie sind alle schlauer als ich!

Ich bin ein PHP-Typ.Als wir anfingen, vergleichsweise umfangreiche Anwendungen mit PHP zu erstellen, begann ich mit der Erforschung zahlreicher Anwendungs-Frameworks und ORMs, hauptsächlich in der PHP-Welt, dann in Java und .NET.Der Grund, warum ich mir auch Java- und .NET-Frameworks angesehen habe, war nicht, blind irgendein PHP-Framework zu verwenden, sondern zunächst zu versuchen, zu verstehen, was wirklich vor sich geht und welche Art von Architekturen auf Unternehmensebene es gibt.

Da ich CSLA noch nicht in einer realen Anwendung verwendet habe, kann ich mich nicht zu den Vor- und Nachteilen äußern, aber ich kann sagen, dass Lhotka einer der seltenen Denker – ich sage nicht nur Experte – auf dem Gebiet der Softwarearchitektur ist.Obwohl der Name „Domain Driven Design“ von Eric Evans geprägt wurde – sein Buch ist übrigens auch großartig und ich empfehle demütig, es zu lesen – wendete Lhotka jahrelang Domain Driven Design an.Unabhängig davon, was Sie über sein Konzept denken, profitieren Sie von seinen tiefgreifenden Ideen auf diesem Gebiet.

Seine Vorträge finden Sie auf dotnetrocks.com/archives.aspx und Videos auf dnrtv.com/archives.aspx (suchen Sie nach Lhotka).

@Byron Was sind die beiden anderen Bücher, die Ihnen gefallen haben?

John,

Wir haben Teams, die in CSLA von 2 bis 3.5 arbeiten, und haben festgestellt, dass es eine großartige Möglichkeit ist, ein konsistentes Framework bereitzustellen, damit alle Entwickler „es auf die gleiche Weise machen“.Es ist großartig, dass der Großteil des Codes mit geringem Wert generiert wird und wir wissen, dass sie bei der Durchführung von Unit-Tests sofort für alle CRUD-Sachen funktionieren.Wir stellen fest, dass unser TDD bei der Umgestaltung, die wir beim Design vornehmen, wirklich zum Tragen kommt, und CSLA hindert uns nicht daran, irgendetwas davon zu tun.

Chris

Zuletzt habe ich versucht, CSLA in der Steinzeit von VB6 zu verwenden.Rückblickend wäre es effektiver gewesen, wenn ich die Codegenerierung genutzt hätte.Wenn Sie nicht über effektive Tools zur Codegenerierung und eine Strategie für deren Integration in Ihren Workflow verfügen, sollten Sie Frameworks wie CSLA meiden, da die Funktionen, die Sie von CSLA erhalten, sonst nicht den Zeitaufwand wettmachen, den Sie mit dem Schreiben von n Zeilen verbringen Code pro Tabelle, n Codezeilen pro Spalte usw.

Ich habe CSLA.NET jetzt in einigen Projekten verwendet. Am erfolgreichsten war es in einer Windows Forms-Anwendung, die über umfangreiche Datenbindungskompatibilitäten verfügt (die asp.net-Anwendungen nicht haben).

Das Hauptproblem ist die TDD-Unterstützung, auf die bereits hingewiesen wurde. Dies liegt am Black-Box-ähnlichen Verhalten der Dataportal_XYZ-Funktionen und daran, dass wir die Datenobjekte nicht verspotten können.Es wurden Bemühungen unternommen, dieses Problem zu umgehen Das ist der beste Ansatz

Ich wollte es verwenden, aber mein damaliger Hauptentwickler war der Meinung, dass zu viel „Magie“ im Spiel sei ...

CSLA ist das beste Anwendungsframework, das es gibt.Rocky LHotka ist ein sehr, aber sehr kluger Kerl.Er schreibt die Geschichte der Softwareentwicklung wie Martin Fowler, David S. Platt, aber meine Lieblingsautoren sind Rod Stephens, Mathew McDonalds, Jeff Levinson, Thearon Willis und Louis Davidson alias Dr. SQL.:-) Profis:Alle Designmuster werden angewendet.Nachteile:Schwer zu erlernen und nur wenige Beispiele.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top