Vraag Is het beter om methoden te maken met een lange lijst parameters of de parameters in een object te verpakken?


Is het beter (wat is de beste methode) om methoden te maken met een lange lijst parameters of de parameters in een object te verpakken?

Ik bedoel, laten we zeggen dat ik een gegevenstype Klant heb met een lange lijst met eigenschappen en ik wil alle eigenschappen in één keer bijwerken. is het beter om zoiets te doen

public int Update(int id, string name, string surname, string streetAddress, string streetAddress2, string postcode, string town, string city, string nationality, string age, string gender,string job)
{  }

of wikkel alle eigenschappen in een object en doe zoiets als

public int Update(Client client)
{  }

bedankt


19
2018-04-08 09:18


oorsprong


antwoorden:


In zijn boek refactoring, Martin Fowler roept expliciet lange parameterlijsten op als een code geur en stel voor om dergelijke methoden te refactoren om a te gebruiken Parameter Object.

Een variatie is om te identificeren hoe die vele parameters zichzelf groeperen en om meer dan één Parameterobject te maken dat elke dergelijke groep vertegenwoordigt.

Het voordeel van een parameterobject is dat het code wordt leesbaarder wanneer u het parameterobject een kunt geven communicatieve naam. Het kan blijken dat het parameterobject een reële vertegenwoordigt Domein Concepten het volgende dat je kunt doen, is beginnen met bewegen gedrag erin.


21
2018-04-08 09:20



Ik zou zeggen dat het beter is om een ​​object te gebruiken. Als u Stack Overflow zoekt, zijn er tal van andere berichten over dit onderwerp


1
2018-04-08 09:21



Normaal gesproken zou je een voorwerp moeten gebruiken. Gewoonlijk, wanneer u een groot aantal parameters op een methode hebt, beschrijven deze parameters een bepaalde "toestand". Uw voorbeeldcode geeft precies aan wat ik bedoel.


0
2018-04-08 09:30



Hoe zit het met het gebruik van een Value Provider per component in vergelijking met het hebben van invoerparameters (in dit geval gegroepeerd).

Bedankt


0
2017-12-06 12:07