Kiedy używać interfejsu i modelu w maszynopisie / Angular2
Ostatnio oglądałem samouczek na Angular 2 z maszynopisem, ale nie wiem, kiedy używać interfejsu, a kiedy używać modelu do przechowywania struktur danych.
Przykład interfejsu:
export interface IProduct {
ProductNumber: number;
ProductName: string;
ProductDescription: string;
}
Przykład Modelu:
export class Product {
constructor(
public ProductNumber: number,
public ProductName: string,
public ProductDescription: string
){}
}
Chcę załadować dane JSON z adresu URL i powiązać z interfejsem / modelem. Czasami chcę pojedynczy obiekt danych, innym razem chcę trzymać i tablicę obiektu.
Którego z nich powinienem użyć i dlaczego?
4 answers
Interfejsy są tylko w czasie kompilacji. Pozwala to tylko na sprawdzenie, czy oczekiwane dane otrzymane są zgodne z określoną strukturą. W tym celu możesz przesłać treść do tego interfejsu:
this.http.get('...')
.map(res => <Product[]>res.json());
Zobacz te pytania:
- jak wrzucić obiekt JSON do klasy typescript
- Jak uzyskać obiekt Date z odpowiedzi json w maszynopisie
Można zrobić coś podobnego z klasą, ale główne różnice z klasą są takie, że są obecne w runtime (funkcja konstruktora) i można w nich definiować metody z przetwarzaniem. Ale w tym przypadku musisz utworzyć instancję obiektów, aby móc z nich korzystać:
this.http.get('...')
.map(res => {
var data = res.json();
return data.map(d => {
return new Product(d.productNumber,
d.productName, d.productDescription);
});
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48
Interfejs opisuje kontrakt dla klasy lub nowego typu . Jest to czysty element Typescript, więc nie wpływa na Javascript.
Model, a mianowicie klasa , jest rzeczywistą funkcją JS, która jest używana do generowania nowych obiektów.
Chcę załadować dane JSON z adresu URL i powiązać z interfejsem / modelem.
Wybierz model, w przeciwnym razie nadal będzie to JSON w Twoim Javascript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 08:42:29
Jak powiedział @ThierryTemplier do odbierania danych z serwera, a także przesyłania modelu między komponentami (aby zachować listę intellisense i popełnić błąd czasu projektowania), dobrze jest używać interfejsu, ale myślę, że do wysyłania danych do serwera (DTOs) lepiej użyć klasy, aby skorzystać z zalet automatycznego mapowania DTO z modelu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 08:36:14
Używaj klasy zamiast interfejsu to właśnie odkryłem po wszystkich moich badaniach.
Dlaczego? Sama klasa to mniej kodu niż interfejs klasy Plus. (w każdym razie możesz wymagać klasy dla modelu danych)
Dlaczego? Klasa może działać jako interfejs (używać implementacji zamiast rozszerzeń).
Dlaczego? Klasa interfejsu może być tokenem wyszukiwania dostawcy w Angular dependency injection.
W zasadzie klasa może zrobić wszystko, co Interfejs wystarczy. więc może nigdy nie trzeba używać interfejsu .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 09:33:36