2010-12-15 3 views
0

My Web übertragen begrenzen Methode gibt Objekt 'User', die eine Menge von Eigenschaften aufweist: Id, Nick, E-Mail, Vorname, SecondName, etc ...ASP.NET AJAX: Wie Menge von Eigenschaften Client

[WebMethod] 
public User GetUserById(int userId) 
{ 
    vfm_elita.elita_table.user.User user = 
     vfm_elita.elita_table.user.User.GetUserById(userId); 
    return user; 
} 

Gibt es eine Möglichkeit, die Menge der zurückgegebenen Eigenschaften zu begrenzen? Oder sollte ich eine separate Klasse (UserForClientForParticular) erstellen, die nur Eigenschaften benötigt?

Danke.

P.S. Schätze, meine letzte Idee wird die vorgeschlagene Antwort :), aber auf jeden Fall sind alle Gedanken willkommen

Antwort

1

Es ist eine gute Idee, ein Datenübertragungsobjekt zu verwenden, das darauf spezialisiert ist, nur die Eigenschaften offenzulegen, über die die Client-Seite Bescheid wissen sollte. Alternativ, wenn Sie das Prototyping, in Eile, oder wollen keine DTO-Klasse aus einem anderen Grund zu erstellen, können Sie einen anonymen Typ verwenden, um die Antwort zu abspecken:

[WebMethod] 
public object GetUserById(int userId) 
{ 
    vfm_elita.elita_table.user.User user = 
    vfm_elita.elita_table.user.User.GetUserById(userId); 

    // Will return something like {"Nick":"Encosia","FirstName":"Dave"} 
    return new { Nick = user.Nick, FirstName = user.FirstName }; 
} 
+0

Es ist erlaubt, zu verwenden anonymer Typ und Rückgabe "Objekt". Das ist eine gute Idee. Vielen Dank. – Budda

1

Sie sollten immer sehr bewusst sein, welche Daten Sie in Ihren APIs ausgesetzt sind, vor allem, wenn es eine Chance gibt, dass sie verbraucht werden von externen Parteien, aber auch wenn sie nur intern verwendet werden. Ich würde definitiv empfehlen, was Sie in Ihrem Beitrag erwähnt haben, und ein Konstrukt erstellen, das nur die Daten enthält, die in diesem Kontext notwendig sind.

Update: auch empfehlen, einen Blick auf das AutoMapper-Projekt auf Codeplex, die automatisch Zuordnung von Eigenschaftswerten von einem Objekt (User) zu einem anderen Objekt (UserSummary) behandelt.