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 MorphieX
Thema: Entity Framework CORE und WPF Datagrid
Am im Forum: GUI: WPF und XAML

Ich wundere mich gerade, dass noch gar nicht der Einwand kam, dass Datenbank Entitäten nicht an die UI gebunden werden, sondern dafür ViewModels benutzt werden sollten.

Thema: Eine float Variable mit Nachkommastellen in eine Accessdatenbank schreiben
Am im Forum: Datentechnologien

Du schreibst die Werte ja direkt in deinen SQL-CommandText.
Du musst dafür aber Parameter benutzen, die du statt der Werte in den CommandText schreibst - und anschließend entsprechend im Code füllst.

Dazu gibt es unzählige Tutorials, bitte einfach mal danach googeln.

Thema: GPLv2 Library verwenden ohne das Hauptprogramm ebenfalls unter GPLv2 zu lizensieren
Am im Forum: Rund um die Programmierung

Vielen Dank für eure Antworten :-)

Die Liste mit Alternativen kannte ich noch nicht - hier scheint mir LibUA, welche unter Apache 2.0 lizensiert ist, recht interessant.
Ich werde die Lib mal ausprobieren :-)

Thema: GPLv2 Library verwenden ohne das Hauptprogramm ebenfalls unter GPLv2 zu lizensieren
Am im Forum: Rund um die Programmierung

Hallo zusammen,

kurz zu unserem Vorhaben:
Ich möchte meine Software (.NET Core 2.2) erweitern, um Maschinendaten über OPC UA zu monitoren.

Die Software ist in einzelne Plugins (als eigene Assemblies) aufgeteilt und ist soweit closed source.
Nun möchte ich das NuGet Paket "OPCFoundation.NetStandard.Opc.Ua" verwenden um die OPC-UA-Kommunikation zu realisieren.
Dieses Paket steht allerdings unter der GPLv2. (und als 2. Möglichkeit unter einer anderen Lizenz für Jährlich knapp 4.800$)

Ich weiß, hier kann ich keine Rechtsberatung erwarten, aber vielleicht hat ja jemand schon Erfahrungen mit meinem Problem.

Darf ich ein Plugin (eigene PCL) dafür erstellen, welches ich dann unter der GPLv2 lizensiere und in meiner Hauptanwendung zur Laufzeit lade? Kann ich meine Hauptanwendung dann weiterhin unter einer anderen Lizenz vertreiben?
Falls das funktioniert, muss ich dann beim Laden des Plugins irgendwelche Klimmzüge machen, damit ich rechtskonform bin?

Alternativ wäre ich natürlich auch an einer anderen Möglichkeit zur OPC-UA-Kommunikation interessiert. Also quasi ein anderes SDK...? Ich weiß dass es da welche im kommerziellen Bereich gibt, z.B. von Softing. Ich suche aber - wie so oft - eine möglichst günstige Möglichkeit.

Thema: .NET Core 2.2 SDK wird von VS2017 nicht gefunden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Yes! :)

Genau das war es, vielen Dank!

Btw. eine Reparatur von VS hat nichts gebracht.

Thema: .NET Core 2.2 SDK wird von VS2017 nicht gefunden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Es kam keine Info zum Neustart - habe ich aber trotzdem gemacht ;-) Kann ich also ausschließen
Und ich wüsste auch nicht dass ich irgendwann mal Previews installiert habe. Das System ist noch relativ frisch :-/
Naja, ich repariere gerade die VS-Installation, möglicherweise haben irgendwelche Erweiterungen da reingepfuscht.

Thema: Im HTML Code nach einem bestimmten Wort suchen
Am im Forum: Web-Technologien

So wie ich dich verstehe, möchtest du nicht den Quellcode der Seite haben, sondern das DOM der Seite zu einem festgelegten Zeitpunkt (z.B. nachdem die Seite komplett gerendert wurde)

Dazu brauchst du irgendeine Renderengine (Webkit, Trident,...)
Das könntest du z.B. über das WebBrowser-Control realisieren.

Thema: .NET Core 2.2 SDK wird von VS2017 nicht gefunden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich versuche gerade eine neue .net core 2.2 Anwendungen (ASP.NET Core MVC) zu erstellen und habe mir dazu das .NET Core SDK 2.2.202 x64 heruntergeladen und mein VS 2017 aktualisiert (Version 15.9.11)

Wenn ich nun unter "Datei > Neu > Projekt... > .NET Core" die "ASP.NET Core Webanwendung" auswähle, kann ich im nächsten Dialog oben ".NET Core" und "ASP.NET Core 2.2" auswählen.

Wenn ich das Projekt dann anlege, bekomme ich folgende Fehlermeldung:
Das aktuelle .NET SDK unterstützt .NET Core 2.2 nicht als Ziel. Geben Sie entweder .NET Core 2.1 oder niedriger als Ziel an, oder verwenden Sie eine .NET SDK-Version, die .NET Core 2.2 unterstützt.

In den Projekteigenschaften ist der Eintrag unter Zeilframework nun leer. Ich kann hier nur .NET Core 1.0 - .NET Core 2.1 auswählen. NET Core 2.2 fehlt hier also.

Folgende Info bekomme ich via dotnet --info:

PM> dotnet --info
.NET Core SDK (gemäß "global.json"):
 Version:   2.2.202
 Commit:    8a7ff6789d

Laufzeitumgebung:
 OS Name:     Windows
 OS Version:  10.0.14393
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.2.202\

Host (useful for support):
  Version: 2.2.3
  Commit:  6b8ad509b6

.NET Core SDKs installed:
  2.1.201 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.302 [C:\Program Files\dotnet\sdk]
  2.1.403 [C:\Program Files\dotnet\sdk]
  2.1.503 [C:\Program Files\dotnet\sdk]
  2.1.505 [C:\Program Files\dotnet\sdk]
  2.2.202 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Hat jemand eine Idee was das schon wieder ist?

Thema: Im MailTo-Link Attachments anhängen oder mitgeben
Am im Forum: Web-Technologien

Was ist das denn für ein WebClient?
Gibt es dazu irgendwelche Rahmenbedingungen? (z.B. läuft der nur im Intranet, z.B. nur im Internet Explorer?)

auf jeden Fall müsstest du entweder Outlook direkt ansteuern (Interop) oder über MAPI gehen. Beides ist ohne weiteres nicht direkt aus einer Website möglich - da gibt es aber mehrere Möglichkeiten das zu realisieren, z.B. ActiveX, XBAP, Silverlight (?)

Edit: Oder, falls es die Situation erlaubt, ein Browserplugin entwickeln welches sich der User erst installieren muss, damit der Browser mit Outlook kommunizieren kann.

Thema: Wie kann ich eine HTML-Datei lesen, filtern und bestimmte Teile in eine Excel Tabelle schreiben?
Am im Forum: Grundlagen von C#

Post mal bitte ein Beispiel-HTML Markup.
Laut deiner Beschreibung ist das kein valides HTML.

Thema: Empfehlung für ASP.NET Hosting
Am im Forum: Smalltalk

Ok, danke für die Info.
MSDN habe ich leider nicht.

Dann käme ich mit einem eigenen VServer bei anderen Anbietern wohl günstiger davon.

Thema: Empfehlung für ASP.NET Hosting
Am im Forum: Smalltalk

Hallo zusammen,

für ein privates Projekt möchte ich gerne eine ASP.NET-Webanwendung im Internet hosten.
Welche Hosting-Strategie könnte ich dabei fahren, um die Anwendung möglichst kostengünstig ins Web zu stellen?
Ich verdiene damit keinen Cent, daher wäre kostenlos natürlich am besten. :-)

Meine Voraussetzungen:
- ASP.NET (MVC) (Ich verwende abhängige Assemblies (API) von einem Computerspiel, die mir die Verwendung von ASP.NET Core (noch) nicht ermöglichen)
- HTTPS / SSL - ist meiner Meinung nach heutzutage Pflicht, wenn man sensible Daten verarbeitet (Logins z.B.)
- MS SQL Server (Datenbankgröße entspricht vielleicht ein paar MB)
- Eigene Domain (bereits vorhanden)

Bzgl. der Bandbreite und des Datenvolumens kann ich noch nichts sagen, denke aber dass mir 5 GB / Monat ausreichen würden.

Würde ich mit diesen Anforderungen bei Azure kostenlos hosten können?
Speziell beim Thema Domain / SSL bin ich mir bei Azure unsicher.

Hat sonst jemand Erfahrungen mit anderen Anbietern?

Thema: REST-API mit Request-URL-Check
Am im Forum: Web-Technologien

Und die AGB sagen aus, dass der Token nicht veröffentlicht werden darf.
Deine Kunden müssen das dann sauber Serverseitig umsetzen - notfalls durch eine eigene Proxy-API.
Im Idealfall bietest du denen ein SDK an.

Oder was spricht dagegen?

Thema: Windows Image eines PCs als Vorlage verwenden
Am im Forum: Smalltalk

Wenn es etwas kosten darf, dann gibt es auch eine gute Lösung von VMWare:
https://www.vmware.com/de/products/mirage.html

Dort kannst du neben einem Windows-Images auch Software-Images und Treiber pro Computermodell verteilen.
Es geht sogar noch weiter und kann die Software als eigene Schicht verteilen und somit das Update-Management dadurch zentralisieren.

Wenn es dir aber nur darum geht ein Golden-Image zu verteilen und die Computer automatisiert in eine Domäne zu bringen, geht das damit natürlich auch.

Allerdings gibt es mit Sicherheit kostengünstigere Lösungen, wenn man das komplette Featureset nicht benötigt.

Thema: Sind Unit-Tests für ISO 9001 erforderlich?
Am im Forum: Smalltalk

Zitat von LaTino
Eine Anmerkung noch: wenn ihr nur diskutiert, ob Komponententests sinnvoll sind, weil es euch um die Zertifizierung geht...in so einer Softwarebude würde ich nicht arbeiten wollen.
Ich auch nicht. ;-) Das hat damit auch nichts zutun.
Die Frage war, ob Unit-Tests für ISO9001 erforderlich sind -> Antwort: Nein
Oder ob Unit-Tests für ISO9001 hilfreich sind -> Antwort: vielleicht, wenn man will, richtig?

Unabhängig von ISO 9001 sind Komponententests - wenn es nicht gerade irgendwelche kleinen Tools sind - für mich generell sinnvoll. Es ging mir nur darum in wie weit wir diese bei der ISO 9001-Zertifizierung berücksichtigen müssen / wollen.

Danke für den Hinweis zu IEC 25000, werde ich mir durchlesen :-)

Thema: Sind Unit-Tests für ISO 9001 erforderlich?
Am im Forum: Smalltalk

Ja, ein Teil (Tochterunternehmen) des Unternehmens ist bereits nach ISO 9001 zertifiziert.
Der Bereich Softwareentwicklung allerdings noch nicht - ich dachte Unit-Tests wären ein Mittel um die Qualität von Software zu gewährleisten. Und da das Kerngeschäft Software ist, gehört das für mich auch zur grundsätzlichen Organisation dazu.

Gibt es einen üblicheren Standard in der Softwareentwicklung, den man eher erfüllen möchte?

Thema: Sind Unit-Tests für ISO 9001 erforderlich?
Am im Forum: Smalltalk

Hallo zusammen,

es geht hier nicht um die Frage ob und wann es sinnvoll ist, Komponententests einzusetzen, sondern ob diese bei der Zertifizierung nach ISO 9001 erforderlich oder zumindest hilfreich sind.

Hat da jemand Erfahrungen?
Mich würden eure Meinungen und Erfahrungen dazu interessieren. Wenn gewünscht, kann das Thema auch in den Off-Topic-Bereich verschoben werden.

Thema: Windows-Authentication in ASP.NET Core 2.x Kestrel Projekt
Am im Forum: Web-Technologien

Ist leider eine Anwendung die später an ganz unterschiedliche Kunden mit unterschiedlichen Umgebungen verkauft werden soll.
Aber ich schaue mir das auf jeden Fall noch mal an, danke :-)

Thema: Windows-Authentication in ASP.NET Core 2.x Kestrel Projekt
Am im Forum: Web-Technologien

So, ich komme langsam zu dem Ergebnis, dass es gar nicht (so einfach) möglich ist.

NTLM über einen LDAP-Client ist nicht möglich, da man (zumindest beim Active Directory) keine Möglichkeit hat auf das gehashte Passwort des Benutzers zuzugreifen.
Windows selbst löst das wohl über die Secur32.dll, die es aber natürlich nur unter Windows gibt. Da hat man - wenn man plattformabhängig bleiben will - also keine Möglichkeit diese zu nutzen. Außer man implementiert die Funktionalität der Secur32.dll per reverse engineering selbst - nein, lieber nicht ;-)

Möglicherweise brauche ich eine eigene Anwendung, die sich nur um das SSO kümmert und unter Windows gehostet werden muss. Hat da jemand Erfahrungen?

Thema: Windows-Authentication in ASP.NET Core 2.x Kestrel Projekt
Am im Forum: Web-Technologien

Hi,

ich sitze gerade an einem ASP.NET Core 2.1-Projekt mit eigener (Cookie-)Authentifizierung.
Die Authentifizierung sieht so aus, dass die Zugangsdaten
- entweder komplett in der Anwendung verwaltet werden können (Benutzername + Passwort) und man sich entsprechend auch damit anmeldet,
- oder der Benutzer nur (mindestens) mit seinem AD-Accountnamen angelegt, und ein Haken "LDAP Authentifizierung" gesetzt wird. Nun prüft die Authentifizierung nicht gegen ein in der Datenbank eingetragenes Passwort, sondern gegen einen LDAP-Server.

Das funktioniert so schon perfekt.

Jetzt möchten wir optional beim LDAP-Login auch SSO anbieten.
Nun ist es ja so, dass ASP.NET Core mit Kestrel keine Windows-Authentifizierung unterstützt, sondern dies maximal vom IIS oder vom WebListener (HttpSys) unterstützt wird.

Der IIS fällt raus, da wir in der Anwendung auch noch andere Background-Tasks (dauerhafte Kommunikation mit externen Schnittstellen) ausführen müssen, und ich diese nicht im IIS-Prozess durchführen möchte.

WebListener wäre eine Alternative, allerdings unterstützt der WebListener scheinbar keine Cookie-Authentifizierung mehr, wenn Windows Authentifizierung aktiviert ist. (https://github.com/aspnet/HttpSysServer/issues/284)

Also muss ich irgendwie bei Kestrel bleiben, was mir eigentlich auch ganz recht ist, da plattformunabhängig.

Nun bin ich über folgenden Stack-Overflow-Eintrag gestoßen:
https://stackoverflow.com/questions/34956808/asp-net-vnext-kestrel-windows-authentication
In der Lösung wurde ein ActionFilter gebaut, der eine NTLM-Authentifizierung simuliert. Simuliert deswegen, weil die Credentials nicht gegen einen LDAP-Server validiert werden, sondern nur der Username und Domain aus der NTLM-Authentifizierung herausgelesen werden.
Eigentlich genau das, was ich brauche, und es funktioniert auch wunderbar. Nur sehe ich hier eine große Sicherheitslücke.

Daher kann dieser Thread in min. zwei Richtungen verlaufen:
1. gibt es Alternativen ein SSO mit Kestrel durchzuführen?
2. hat schon jemand Erfahrungen, wie man die NTLM-Authentifizierung vollständig implementiert?

Btw. als LDAP-Library verwende ich Novell.Directory.Ldap.NETStandard2_0

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Hmm, ich verstehe das Problem auch noch nicht so ganz...

folgender Code gehört für mich dann z.B. in den DAL:

public class ConfigEntity
{
  public String CompanyName { get; set; }

  public String Language { get; set; }
}

public interface IConfigRepository
{
  ConfigEntity GetConfig();

  void SaveConfig(ConfigEntity config);
}

public class IniConfigRepository : IConfigRepository
{
  const String iniFileName = "config.ini";

  public ConfigEntity GetConfig()
  {
    // Ini-Datei hier lesen und in Objekt mappen
    return new ConfigEntity()
    {
      CompanyName = "Ini-Wert",
      Language = "Ini-Wert"
    };
  }

  public void SaveConfig(Config config)
  {
    // Ini-Datei hier speichern
  }
}

Die konsumierenden Layer wissen nun also nicht, dass es sich um eine Ini-Datei handelt. Im BL wird "ConfigEntity" nun wieder in ein Business-Model "Config" gemappt. -> genau so wie die Entities die aus einer Datenbank kommen.

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

@Palin
Was sind das denn für Ini-Files?
In der Regel gibt es doch eine feste Definition, wie so ein Ini-File aussehen kann. Also kann man das Ini-File doch genau so im DAL zu Objekten mappen wie das Entity-Framework dies mit den SQL-Daten macht.

So ist es den darüber liegenden Layern total egal, ob die Daten aus einem Ini-File oder einer Datenbank kommen.

Oder missbraucht ihr hier das Ini-File irgendwie als unstrukturierte Datenbank? In dem quasi alles mögliche drin stehen kann?

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Zitat von Palin
@MorphieX
Bei der Disskusion zu Drei Schichten Architektur ist ein wirklich einfaches Beispiel zu finden.
Meinst du "ProductCatalogue"? Ich weiß ja nicht...
Im Prinzip ist in dem Beispiel alles vom DataSet abhängig, und damit meine ich nicht unbedingt die Daten, sondern die Technologie. Für mich (und das ist meine persönliche Meinung) liegt die Schwierigkeit der Schichtentrennung in den Schnittstellen zwischen den einzelnen Schichten, und genau das wird in dem Beispiel meiner Meinung nach falsch dargestellt, aber das ist ein allgemeines Problem bei WinForms, bzw. Binding an DataSources.


Aber ich habe gerade ein -auf den ersten Blick- sehr vielversprechendes Projekt gefunden:
https://github.com/JonPSmith/SampleMvcWebApp

Das werde ich mir mal genauer anschauen

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Was haltet ihr davon, wenn wir (die Community) ein Beispielprojekt erarbeiten, auf welches man dann im [Artikel] Drei-Schichten-Architektur bzw. unter die regelmäßig gestellten Fragen zu diesem Thema verlinken könnte?

So simpel wie möglich und so komplex wie nötig.

Eventuell auch in unterschiedlichen Variationen, z.B. ohne Tools wie AutoMapper oder EF (damit man wirklich sieht was da eigentlich passiert) und mit Tools, damit man sieht was man an Arbeit spart ;-)

Ich habe zumindest überall nur Beispiele gefunden, die entweder falsch; viel zu komplex oder viel zu simpel gehalten sind.

Das wäre aus meiner Sicht ein echter Mehrwert.

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Wo wird denn gemappt?
Wenn ich den BL wirklich als eigene Assembly führe, werden die Entities doch im BL in Business Objects gemappt. Und wenn ich nun eine Änderung an meine Entities vornehme, muss ich das Mapping ggf. anpassen, somit also den BL, oder?
Ich muss ja schließlich auch meine Business Objects anpassen, da die Änderung an den Entities (z.B. neues Datenbankfeld) auch im Business Object ankommen soll.

Oder findet das Mapping im DAL statt?

Beispiel:
Ich habe eine Entität "PersonEntity"
- ID
- Nachname
- Vorname

Ich habe dazu das BusinessObject "Person"
- ID
- Nachname
- Vorname
- VollstaendigerName

Nun erweitere ich meine Entity:
- ID
- Nachname
- Vorname
- Anrede

also muss ich auch das BusinessObject anpassen:
- ID
- Nachname
- Vorname
- Anrede <- neu
- VollstaendigerName <- das Mapping muss ebenfalls angepasst werden

Gut, man könnte jetzt sagen dass das Mapping nicht im BL stattfindet, weil es woanders konfiguriert wird (z.B. AutoMapper-Config) und dass die BusinessObjects nicht unbedingt im BusinessLayer definiert sein müssen, sondern z.B. in der Infrastructure, aber das eigentlich gehört das für mich zum BL

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Danke :-D

Ich glaube ihr habt mir jetzt ein wenig die Augen geöffnet.

Könnt ihr mir vielleicht ein Praxis-Beispiel nennen, bei dem sich das Business-Objekt von der Entität unterscheidet? Theoretisch muss ein Business-Objekt doch auch über eine eindeutige ID und den Merkmalen der Entität verfügen.

Ich finde diese minimal-Beispiele von MS (und zig anderen) mittlerweile echt kontra-produktiv...

@Abt, bzgl. der Technologie-Auswahl werde ich damit loslegen, sobald ich das mit der Schichtentrennung sauber habe. Danke noch mal für den Hinweis. Ich habe das vielleicht doch als zu einfach empfunden.

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Hallo Abt,

danke für deine Antwort :-)

Zitat
Und in der Logik arbeitet man mit Domain Objects.
So hatte ich es tatsächlich schon mal umgesetzt. Fühlte sich aber irgendwie nicht richtig an, weil viel Aufwand für (bislang) keinen zusätzlichen Nutzen. Aber ich werde es dann doch noch mal so versuchen.
Frage: Wenn es wirklich eine 1:1-Kopie ist, erbst du dann von der Entität?
Zitat
Ob Du das wirklich in Assemblies aufbauen musst; das ist nen Philosophie-Thema.
Im Moment hilft mir das, die Schichten nicht versehentlich zu durchbrechen. Ich denke wenn man da ein bisschen mehr Übung drin hat, kann man es sicher auch wagen die Schichten in einer gemeinsamen Assembly zu halten.
Zitat
Aber zu Deiner Technologieauswahl....
Hehe, mir war klar dass das sofort kommt ;-) Du hast ja auch absolut recht.
Im Moment "spiele" ich auch noch mit der Architektur und auch mit den Technologien. Genau diese beiden Schichten wollte ich aber absichtlich als nächsten "Meilenstein" austauschen.
Ich möchte ein Gefühl dafür bekommen, einzelne Programmteile in einer sauberen Architektur austauschen zu können. - wenn das ohne große Anpassungen in den anderen Programmteilen funktioniert, dürfte die Schichtentrennung doch erfolgreich gewesen sein.
Und wenn ich sage, dass das Projekt über mehrere Jahre gepflegt wird, dann gehe ich davon aus, dass irgendwann ein weiterer Technologiewechsel erfolgen wird.

Thema: Was ist falsch an meiner Schichtentrennung in einem ASP.NET MVC 5 Projekt?
Am im Forum: Rund um die Programmierung

Hallo,

ich fange gerade an meine erste größere Anwendung zu entwickeln und weiß jetzt schon, dass sie über Jahre wachsen und wahrscheinlich von unterschiedlichen Mitarbeitern gepflegt wird.
Daher lege ich großen Wert auf eine möglichst saubere Architektur von Anfang an.

Folgendes ist gegeben:

Infrastructure Assembly
- Interfaces für DI, z.B. IRepository, IUnitOfWork, IUserResolver,...
- Entitiy-Klassen und dazugehörige Enums

Data Access Assembly
- Entity Framework 6.2
- Auditing (also auch etwas Logik)
- Zugriff auf Infrastructure Assembly

Business Logic Assembly
- Implementierung der Repositories, UnitOfWork,...
- Utilities, z.B. Passwort-Verschlüsselungen
- Security
- Zugriff auf Infrastructure Assembly
- Zugriff auf Data Access Assembly

Presentation Layer
- Hauptprojekt
- ASP.NET MVC 5 (ja, kein ASP.NET MVC Core, das ist momentan Absicht, wird aber später sicherlich ausgetauscht
- In den Controllern werden meist CRUD-Operationen über die Repositories durchgeführt.
- jede View hat ein eigenes ViewModel, gemappt wird per AutoMapper
- Abhängigkeiten werden per DI aufgelöst
- Zugriff auf Business Logic Assembly
- Zugriff auf Infrastructure Assembly

Meine Projektstruktur sieht also zusammengefasst so aus:

[Presentation Layer] -> [Business Layer] -> [Data Access Layer]
[                      Infrastructure Layer                   ]


Nun zu meinen Fragen:
1) Gehört die Implementierung des Repositories in den BLL oder in die DAL? Ich habe halt Geschäftslogik in meinen Repositories.

2) Ich benutze im BLL die Entities, die mir das Entity Framework liefert. Das funktioniert so.
Ich lese aber in fast allen theoretischen Artikeln, dass da noch Business Objects dazwischen gehören. Also habe ich das mal ausprobiert und auch gleich wieder rückgängig gemacht, da ich gemerkt habe dass das 100% 1:1-Kopien meiner Entities waren. ;-) Irgendwas verstehe ich hier also noch nicht richtig.
Bisher habe ich auch noch kein Beispiel gefunden, bei dem das so gemacht wurde. Hat jemand einen Link zu einem entsprechenden Beispiel?
Sind eigene Business Objects bei Verwendung des Entity Frameworks vielleicht gar nicht notwendig?
Später kommen noch Objekte hinzu, die nicht (sofort) im Entity Framework landen - da kann ich mir das sehr gut vorstellen.

Thema: Probleme mit Interfaces für generisches Repository
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Okay, Danke :-)
Dein 2. Hinweis hat mich zum Ziel gebracht.

Ich bin davon ausgegangen dass es durchaus Sinn ergibt, auch die Entities zu entkoppeln, da ich Service -und Datenzugriffsschicht eigentlich trennen wollte. So könnte eine Entität aus einer Datenbank durchaus mehr oder weniger Eigenschaften benötigen als z.B. Entitäten aus einer OPC-Schnittstelle.

Aber darüber mache ich mir dann Gedanken

Thema: Probleme mit Interfaces für generisches Repository
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich stehe gerade ein wenig auf dem Schlauch...
Ich starte gerade ein neues MVC-Projekt und möchte den Datenzugriff möglichst mit Interfaces entkoppeln. Dazu möchte möchte ich gerne ein generisches Repository als Basisklasse verwenden und davon meine spezifischen Repositories ableiten.

Ich habe dazu mal ein Minimalbeispiel erstellt.

Folgende Interfaces habe ich eingeführt:


public interface IEntityBase
{
  int Id { get; set; }
}

public interface IRepositoryBase<T> where T : IEntityBase
{
  T FindById(int id);
}

public interface IArtikel : IEntityBase
{
  String Name { get; set; }
}

public interface IArtikelRepository : IRepositoryBase<IArtikel>
{
  void DoSomething();
}

Daraus habe ich dann folgende Implementierungen erstellt:


public class EntityBase : IEntityBase
{
  public int Id { get; set; }
}

public class RepositoryBase<T> : IRepositoryBase<T> where T : IEntityBase
{
  public T FindById(int id)
  {
    // Irgendein Code:
    return Activator.CreateInstance<T>();
  }
}

public class Artikel : EntityBase, IArtikel
{
  public String Name { get; set; }
}

public class ArtikelRepository : RepositoryBase<Artikel>, IArtikelRepository
{
  public void DoSomething()
  {
    Console.WriteLine("...");
  }
}

Bei dem ArtikelRepository möchte ich also das IArtikelRepository implementieren, wovon das RepositoryBase aber schon die Methode FindById implementiert.
Ich gebe bei FindById T zurück, was im ArtikelRepository vom Typen Artikel ist. Artikel besitzt das Interface IArtikel - genau das erwartet IArtikelRepository auch.

Ich bekomme bei diesem Konstrukt aber folgende Fehlermeldung:
Fehler
"ArtikelRepository" implementiert den Schnittstellenmember "IRepositoryBase<IArtikel>.FindById(int)" nicht. "RepositoryBase<Artikel>.FindById(int)" hat nicht den entsprechenden Rückgabetyp "IArtikel" und kann "IRepositoryBase<IArtikel>.FindById(int)" daher nicht implementieren.

Mir ist schon klar, dass IArtikelRepository als Rückgabewert ein "IArtikel" erwartet, ich aber ein "Artikel" zurückgebe. Aber Artikel ist doch IArtikel?! Ich bin etwas verwirrt...

Kann mich jemand aufklären? :-)