Extrahování třídy soukromých dat

Extrahování třídy soukromých dat
Popsáno v Návrhové vzory Ne

Zvýraznění soukromé datové třídy (eng. Private class data ) je strukturní návrhový vzor používaný ke skrytí atributů a manipulaci s nimi.

Popis

Obvykle hodiny vždy zpočátku vypadají jasně a srozumitelně. Dělají svou práci a nelezou do povinností jiných tříd. Při vývoji programu je však přidána nová logika. V důsledku toho dostávají některé třídy omylem mnoho dalších povinností. K záchraně přichází soukromá metoda refaktoringu , známá jako "Extract Class". Umožňuje vám dodržet „ Princip jednotné odpovědnosti “, čímž jsou třídy spolehlivější a odolnější vůči změnám.

Příklady implementace

Chcete-li použít tento návrhový vzor na požadovanou třídu, musíte:

  1. Vytvořte novou třídu, která bude mít jednu odpovědnost za použití metod refaktoringu: extrakci pole a extrakci metody.
  2. Vytvořte propojení mezi starou a novou třídou.

Měli byste provádět změny po troškách a testovat výsledek po každém tahu, to vám ušetří nutnost opravovat velké množství chyb na samém konci. Na konci, po opětovném přezkoumání nových tříd, se vraťte ke staré třídě, možná se její odpovědnost změnila, a nyní má smysl ji nazývat jinak.

Příklad implementace v C# jmenný prostor Private_class_data { class Program { static void Main ( string [] args ) { var radius = new double (); var color = nová barva (); var origin = newPoint ( ); var circle_before = new before . Kruh ( poloměr , barva , počátek ); var circle_after = nový po . Kruh ( poloměr , barva , počátek ); } } barva třídy { } třída Grafika { } bod třídy { } } jmenný prostor Private_class_data.before { class Circle { private double radius ; soukromé Barva barva ; soukromý bod původu ; public Circle ( dvojitý poloměr , barva barvy , počátek bodu ) { this . poloměr = poloměr ; toto . barva = barva ; toto . původ = původ ; } public double Circumference { get { return 2 * Math . PI * toto . poloměr ; } } public double Diameter { get { return 2 * this . poloměr ; } } public void Kreslení ( grafika ) { // ... } } } jmenný prostor Private_class_data.after { class CircleData { private double radius ; soukromé Barva barva ; soukromý bod původu ; public CircleData ( dvojitý poloměr , barva barvy , počátek bodu ) { this . poloměr = poloměr ; toto . barva = barva ; toto . původ = původ ; } public double Radius { get { return this . poloměr ; } } public Color Color { get { return this . barva ; } } public Point Origin { get { return this . původ ; } } } class Circle { private CircleData circleData ; public Circle ( dvojitý poloměr , Barva barvy , Počátek bodu ) { circleData = new CircleData ( poloměr , barva , počátek ); } public double Circumference { get { return 2 * Math . PI * toto . circleData . Poloměr ; } } public double Diameter { get { return 2 * this . circleData . Poloměr ; } } public void Kreslení ( grafika ) { // ... } } }

Viz také

Literatura