Extrahera en privat dataklass

Extrahera en privat dataklass
Beskrivs i Design Patterns Inte

Att markera en privat dataklass (eng. Private class data ) är ett strukturellt designmönster som används för att dölja attribut och manipulera dem.

Beskrivning

Vanligtvis ser klasser alltid till en början tydliga och begripliga ut. De gör sitt jobb och klättrar inte in i andra klassers ansvar. Men när man utvecklar ett program läggs ny logik till. Som ett resultat får vissa klasser av misstag en hel del ytterligare ansvarsområden. En privat refactoring- metod kommer till undsättning , känd som "Extract Class". Det låter dig följa " Single Responsibility Principle ", vilket gör klasserna mer pålitliga och motståndskraftiga mot förändringar.

Implementeringsexempel

För att tillämpa detta designmönster på önskad klass måste du:

  1. Skapa en ny klass som kommer att ha ett ansvar genom att använda refactoring-metoderna: fältextraktion och metodextraktion.
  2. Skapa en länk mellan den gamla och den nya klassen.

Du bör göra ändringar lite i taget och testa resultatet efter varje drag, detta kommer att spara dig från att behöva fixa ett stort antal fel i slutet. I slutet, efter att ha granskat de nya klasserna igen, gå tillbaka till den gamla klassen, kanske har dess ansvar förändrats, och nu är det vettigt att kalla det annorlunda.

Implementeringsexempel i C# namnområde Private_class_data { class Program { static void Main ( sträng [] args ) { var radius = new double (); var färg = ny färg (); var ursprung = newPoint ( ); var circle_before = nytt före . Cirkel ( radie , färg , ursprung ); var circle_after = ny efter . Cirkel ( radie , färg , ursprung ); } } klassfärg { } _ klass grafik { } klasspunkt { } _ } namnområde Private_class_data.before { class Circle { privat dubbel radie ; privat Färg färg ; privat punkt ursprung ; public Circle ( dubbel radie , Färg färg , Punkt ursprung ) { detta . radie = radie ; detta . färg = färg ; detta . ursprung = ursprung ; } public double Circumference { get { return 2 * Math . PI * detta . radie ; } } public double Diameter { get { return 2 * this . radie ; } } public void Draw ( Grafikgrafik ) { /// ... } } } namnområde Private_class_data.after { class CircleData { privat dubbel radie ; privat Färg färg ; privat punkt ursprung ; public CircleData ( dubbel radie , färgfärg , punktursprung ) { detta . _ _ radie = radie ; detta . färg = färg ; detta . ursprung = ursprung ; } public double Radius { get { return this . radie ; } } public Color Color { get { returnera detta . färg ; } } public Point Origin { get { returnera detta . ursprung ; } } } class Circle { privat CircleData circleData ; public Circle ( dubbel radie , färgfärg , punktursprung ) { circleData = new CircleData ( radie , färg , ursprung ) ; _ } public double Circumference { get { return 2 * Math . PI * detta . cirkelData . Radie ; } } public double Diameter { get { return 2 * this . cirkelData . Radie ; } } public void Draw ( Grafikgrafik ) { /// ... } } }

Se även

Litteratur