Udpakning af en privat dataklasse

Udpakning af en privat dataklasse
Beskrevet i Design Patterns Ikke

Fremhævelse af en privat dataklasse (eng. Private class data ) er et strukturelt designmønster, der bruges til at skjule attributter og manipulere dem.

Beskrivelse

Normalt ser klasser altid i begyndelsen klare og forståelige ud. De gør deres arbejde og klatrer ikke ind i andre klassers ansvar. Men når man udvikler et program, tilføjes ny logik. Som følge heraf får nogle klasser fejlagtigt en masse ekstra ansvar. En privat refactoring- metode kommer til undsætning , kendt som "Extract Class". Det giver dig mulighed for at overholde " Enkelt ansvarsprincippet ", hvilket gør klasserne mere pålidelige og modstandsdygtige over for ændringer.

Implementeringseksempler

For at anvende dette designmønster til den ønskede klasse, skal du:

  1. Opret en ny klasse, der vil have ét ansvar ved at bruge refactoring-metoderne: feltekstraktion og metodeekstraktion.
  2. Opret et link mellem den gamle og den nye klasse.

Du bør foretage ændringer lidt efter lidt og teste resultatet efter hvert træk, dette vil spare dig for at skulle rette et stort antal fejl til allersidst. Til sidst, efter at have gennemgået de nye klasser igen, vend tilbage til den gamle klasse, måske er dens ansvar ændret, og nu giver det mening at kalde det anderledes.

Implementeringseksempel i C# namespace Private_class_data { class Program { static void Main ( string [] args ) { var radius = new double (); var farve = ny farve (); var oprindelse = newPoint ( ); var circle_before = ny før . Cirkel ( radius , farve , oprindelse ); var cirkel_efter = ny efter . Cirkel ( radius , farve , oprindelse ); } } klasse farve { } klasse Grafik { } klassepunkt { } _ } navneområde Private_class_data.before { class Circle { private double radius ; privat Farve farve ; privat Punkt oprindelse ; offentlig cirkel ( dobbelt radius , farve farve , punkt oprindelse ) { dette . radius = radius ; dette . farve = farve ; dette . oprindelse = oprindelse ; } public double Circumference { get { return 2 * Math . PI * dette . radius ; } } public double Diameter { get { return 2 * this . radius ; } } offentlig ugyldig Tegning ( Grafikgrafik ) { /// ... } } } navneområde Private_class_data.after { class CircleData { private double radius ; privat Farve farve ; privat Punkt oprindelse ; public CircleData ( dobbelt radius , farvefarve , punktoprindelse ) { dette . _ _ radius = radius ; dette . farve = farve ; dette . oprindelse = oprindelse ; } public double Radius { get { return this . radius ; } } public Color Color { get { return this . farve ; } } public Point Origin { get { return this . oprindelse ; } } } klasse Circle { private CircleData circleData ; public Circle ( dobbelt radius , farvefarve , punktoprindelse ) { circleData = new CircleData ( radius , farve , oprindelse ) ; _ } public double Circumference { get { return 2 * Math . PI * dette . cirkelData . Radius ; } } public double Diameter { get { return 2 * this . cirkelData . Radius ; } } offentlig ugyldig Tegning ( Grafikgrafik ) { /// ... } } }

Se også

Litteratur