Ich bin gerade am Anfang der Entwicklung einer großen Webanwendung, die hauptsächlich eine Angular SPA und eine OData WebAPI enthält, die Zugriff auf eine Backend-Schicht hat.
Wir befinden uns in einem frühen Stadium und haben damit begonnen, die ersten Klassen einschließlich Model.dll
zu implementieren, die sich in einem gemeinsamen Namespace befinden, sodass alle Ebenen darauf zugreifen können.
Wir diskutieren jetzt über diese DTOs innerhalb des Modells. Einige sagen, dass Schnittstellen unbedingt erforderlich ist, so dass der Code so sein würde:Schnittstellen für DTOs
namespace MySolution.Common.Model
{
public interface IPerson
{
int Id { get; set; }
string Name { get; set; }
...
}
}
namespace MySolution.Common.Model
{
public class PersonDTO : IPerson
{
public int Id { get; set; }
public string Name { get; set; }
...
}
}
So ist es das ist. Einfach einfache DTOs ohne weitere Intelligenz.
Ich frage mich jetzt, ob das wirklich ein guter Ansatz ist, denn ich sehe hier nicht die Notwendigkeit, die Schnittstelle zu benutzen.
Was sind die Vorteile? Testbarkeit wurde erwähnt, aber ist es sogar notwendig, DTos zu testen? Dependency Injection sollte auch nicht der Punkt sein.
Jede Aufklärung wäre sehr hilfreich. Am Ende ist das Lernen neuer Dinge und Ansätze immer gut ...
Es gibt keinen Grund, eine Schnittstelle zu verwenden, wenn Sie sie nicht benötigen. Dies ist zu kompliziert, was ein einfaches Objekt sein sollte. –
Wenn das * DTO * einfach eine Liste von Eigenschaften ist, sehe ich das sinnlos. Wenn Sie über eine Art Repository verfügten, würden Sie diese Schnittstelle verwenden, um beispielsweise eine DB-Verbindung für eine gefälschte Repräsentation zu ersetzen. Wenn Sie 'Person GetPerson()' hätten, könnten Sie die DB-Version und die Fake-Version haben. – christiandev
Sie könnten eine Marker-Schnittstelle auf einem DTO ('FooDto: IAmADto') für Typ-Constraints und Mappings öffnen, aber sonst, welchen Zweck erfüllt es? Es gibt keine Abstraktion hier, abhängig von 'IPerson 'gibt Ihnen genau das gleiche Maß an Kopplung als abhängig von' Person'. –