Dans les exemples actuels sur ASP.NET MVC, je vois des entités assez basiques, avec des méthodes CRUD simples.
Mais je ne suis pas sûr de ce qu'il faut faire avec des modèles plus avancés. Laissez-moi vous donner un exemple :
Nous avons un site web pour le garage. Le garage a :
- Inventaire avec
carparts
Employees
Customers
-
Cars
qui consiste en toutes les voitures qui sont/étaient dans le garage
Maintenant, prenons le car
la voiture peut avoir une collection de employees
qui ont travaillé sur la voiture (dérivé de l'original employee
ajoute quelques accessoires supplémentaires qui le lient à la voiture), une collection de carparts
qui ont été remplacés (également dérivés, ajoute par exemple SerialNr, et ReplacementDate
prop), et bien sûr un customer
du client propriétaire de la voiture.
Maintenant dans rest
Je souhaiterais voir les éléments suivants :
/cars/423 [get] //show car # 423
/cars/423/edit [get] //shows the edit form (ajax enabled, so also shows the other props)
/cars/423/carparts [get] //gets the carparts inside the car
/cars/423/carparts/32/edit [post] //updates that specific carpart inside the specific car
/cars/423/employees [get] //gets the employees who worked on the car
/inventory [get]
/inventory/1234/edit [get] //gets the update form for carpart with ID 1234
/employees [get] //gets all the employees in the company
Alors, comment dois-je construire mes contrôleurs ? Devrais-je ajouter toutes ces méthodes CRUD pour les éléments enfants à l'intérieur de l'élément CarsController
? Cela ne fait-il pas un contrôleur très gros à cause des dizaines de méthodes (ce modèle est trop simplifié, la voiture a beaucoup plus de relations parent-enfant) ? Ou devrais-je créer un EmployeesInCar
contrôleur (semble mauvais)... Merci beaucoup.
EDITAR:
Tout d'abord, l'exemple n'est qu'hypothétique, juste un exemple.
Si je suis la suggestion, j'aurais un CarController
qui ne s'occupe que des voitures. Et mon PartsController ne gérerait que les Parts. Mais nous avons deux ensembles de Part
s, un général (pour l'inventaire) ; et nous avons un Part
à l'intérieur d'une voiture, qui dérive de la générale, mais ajoute des propriétés telles que SerialNumber
y ReplacementDate
.
Ainsi mon contrôleur Parts devient assez gros, pour l'exemple appelons les entités : GeneralPart (dans l'inventaire) et SpecificPart (la classe dérivée, avec les propriétés supplémentaires).
Index -> Returns all GeneralParts in inventory.
IndexByCar(int id) -> Return all SpecificParts by Car.
etc. etc.
Parce que chaque action porte soit sur une partie générale, soit sur une partie spécifique. Il en va de même pour les employés, nous avons la classe d'employé de base, et une classe spécifique, avec des propriétés supplémentaires.