Ser desenvolupador com comences a treballar en un nou projecte...??
En primer lloc, reuniu alguns requisits bàsics i, en funció del requisit, comenceu a implementar la funció una per una. A mesura que avanceu amb el vostre projecte i apreneu més sobre ell, aneu afegint i canviant el codi a la vostra base de codi. Més tard també canvieu el codi per corregir els errors i els casos extrems.

Però què passa després d'un parell de dies o mesos...? Com sembla el teu codi...?? És complicat? És difícil d'entendre? Si és així, definitivament no vau prestar atenció a millorar el vostre codi o a reestructurar-lo. És possible que hagis escrit algun codi duplicat sense mirar el codi existent o que hagis escrit alguns mètodes/funcions més llargs, classes grans, massa paràmetres, noms de variables no intuïtius, ubicació de codi, etc.
Millorar o actualitzar el codi sense canviar la funcionalitat del programari o el comportament extern de l'aplicació es coneix com a refactorització de codi. Redueix el cost tècnic i fa que el codi sigui més eficient i fàcil de mantenir. Si no presteu atenció al procés de refactorització del codi abans, pagareu pels errors del vostre codi més tard. Així que no ignoreu la neteja del codi.
En un procés de desenvolupament de programari, diferents desenvolupadors tenen diferents estils d'escriptura de codi. Fan canvis, mantenen el codi, amplien el codi i la majoria de vegades deixen el codi sense refactorització contínua. El codi no refactoritzat tendeix a podridura del codi: molt de confusió i desordre al codi, com ara codi duplicat, dependències no saludables entre classes o paquets, mala assignació de responsabilitats de classe, massa responsabilitats per mètode o classe, etc. Per evitar tots aquests problemes és important la refactorització contínua.
Ara la pregunta és... quines són les tècniques per refactoritzar el codi?
Discutirem algunes tècniques populars i comunes per refactoritzar el codi, però abans discutirem alguns consells ràpids...
Consells:
- Heu de realitzar la refactorització del codi en petits passos. Feu petits canvis al vostre programa, cadascun dels petits canvis fa que el vostre codi sigui lleugerament millor i deixa l'aplicació en un estat de treball.
- Executeu la prova TDD i CI després de fer petits canvis en el procés de refactorització. Sense executar aquestes proves, es crea el risc d'introduir errors.
- No creeu cap característiques o funcionalitats noves durant el procés de refactorització. Heu de refactoritzar el codi abans d'afegir cap actualització o funció nova al vostre codi existent.
- El procés de refactorització pot afectar els resultats de les proves, per la qual cosa és bo implicar el vostre equip de control de qualitat i de proves en el procés de refactorització.
- Heu d'acceptar que no estareu del tot satisfet amb el vostre codi. El vostre codi refactoritzat estarà obsolet en un futur proper i haureu de tornar-lo a refactoritzar.
Tècniques de refactorització de codi més habituals
Hi ha molts enfocaments i tècniques per refactoritzar el codi. Parlem d'alguns de populars...
1. Refactorització vermella-verda
El vermell-verd és la tècnica de refactorització de codi més popular i àmpliament utilitzada en el procés de desenvolupament de programari àgil. Aquesta tècnica segueix l'enfocament de disseny i implementació de la prova primer, això posa les bases per a totes les formes de refactorització. Els desenvolupadors prenen la iniciativa per a la refactorització en el cicle de desenvolupament impulsat per proves i es realitza en els tres passos del districte.

- VERMELL: El primer pas comença amb l'escriptura de la prova vermella fallida. T'atures i comproves què cal desenvolupar.
- Verd: En el segon pas, escriviu el codi més senzill i obteniu la prova de desenvolupament verd.
- Refactor: En els darrers i tercers passos, us centreu a millorar i millorar el vostre codi mantenint la vostra prova verda.
Així, bàsicament, aquesta tècnica té dues parts diferenciades: la primera part implica escriure codi que afegeix una nova funció al vostre sistema i la segona part tracta de refactoritzar el codi que fa aquesta funció. Tingueu en compte que no heu de fer les dues coses al mateix temps durant el flux de treball.
2. Refactorització per abstracció
Aquesta tècnica la fan servir principalment els desenvolupadors quan cal fer una gran quantitat de refactorització. Principalment fem servir aquesta tècnica per reduir la redundància (duplicació) del nostre codi. Això implica herències de classes, jerarquia, creació de noves classes i interfícies, extracció, substitució de l'herència per la delegació i viceversa.

Pull-up/Push-down mètode és el millor exemple d'aquest enfocament.
- Mètode pull-up: Agrega parts de codi a una superclasse i ajuda a eliminar la duplicació de codi.
- Mètode push-down: Agafa la part del codi d'una superclasse i la mou a les subclasses.
Obriu el cos del constructor, extreu la subclasse, extreu la superclasse, col·lapse la jerarquia, el mètode de plantilla de formulari, extreu la interfície, substituïu l'herència per la delegació, substituïu la delegació per l'herència, premeu el camp cap avall, tots aquests són els altres exemples.
Bàsicament, en aquesta tècnica, construïm la capa d'abstracció per a aquelles parts del sistema que s'han de refactoritzar i la contrapart que finalment la substituirà. A continuació es donen dos exemples comuns...
fmovies Índia
- Encapsulat camp: Forcem el codi a accedir al camp amb mètodes getter i setter.
- Tipus de generalització: Creem tipus més generals per permetre compartir codi, substituir el codi de verificació de tipus per l'estat, substituir condicional per polimorfisme, etc.
3. Mètode de composició
Durant la fase de desenvolupament d'una aplicació moltes vegades escrivim mètodes llargs al nostre programa. Aquests mètodes llargs fan que el vostre codi sigui extremadament difícil d'entendre i difícil de canviar. El mètode de composició s'utilitza principalment en aquests casos.
En aquest enfocament, utilitzem mètodes simplificats per reduir la duplicació del nostre codi. Alguns exemples són: mètode d'extracció, extreure una variable, Temp en línia, substituir Temp per Consulta, mètode en línia, dividir la variable temporal, eliminar assignacions de paràmetres, etc.
Extracció: Dividem el codi en trossos més petits per trobar i extreure fragmentació. Després d'això, creem mètodes separats per a aquests fragments, i després es substitueix per una crida a aquest nou mètode. L'extracció implica classe, interfície i variables locals.
En linia: Aquest plantejament elimina el nombre de mètodes innecessaris del nostre programa. Trobem totes les trucades als mètodes i després les substituïm totes pel contingut del mètode. Després d'això, eliminem el mètode del nostre programa.
com convertir string en int
4. Simplificació de Mètodes
Hi ha dues tècniques implicades en aquest enfocament... parlem de les dues.
- Simplificació de la refactorització d'expressions condicionals: Enunciat condicional en programació es fa més lògic i complicat amb el temps. Heu de simplificar la lògica del vostre codi per entendre tot el programa.
Hi ha tantes maneres de refactoritzar el codi i simplificar la lògica. Alguns d'ells són: consolidar l'expressió condicional i duplicar fragments condicionals, descompondre condicional, substituir condicional per polimorfisme, eliminar la bandera de control, substituir condicional imbricat per clàusules de guarda, etc. - Refactorització de trucades de mètodes simplificats: En aquest enfocament, fem que les trucades de mètodes siguin més senzilles i fàcils d'entendre. Treballem la interacció entre classes i les simplifiquem les interfícies.
Alguns exemples són: afegir, eliminar i introduir nous paràmetres, substituir el paràmetre amb el mètode explícit i la trucada al mètode, parametritzar el mètode, fer una consulta separada del modificador, preservar l'objecte sencer, eliminar el mètode de configuració, etc.
5. Moviment de característiques entre objectes
En aquesta tècnica, creem noves classes i movem la funcionalitat de manera segura entre classes antigues i noves. Ocultem els detalls de la implementació de l'accés públic.
Ara la pregunta és... quan moure la funcionalitat entre classes o com identificar que és hora de moure les funcions entre classes?
Quan trobeu que una classe té tantes responsabilitats i passen massa coses o quan trobeu que una classe és innecessària i no fa res en una aplicació, podeu moure el codi d'aquesta classe a una altra classe i eliminar-lo del tot.
Alguns exemples són: moure un camp, extreure una classe, moure mètode, classe en línia, ocultar delegat, introduir un mètode estranger, eliminar l'intermediari, introduir extensió local, etc.
6. Refactorització preparatòria
Aquest enfocament és millor utilitzar-lo quan observeu la necessitat de refactoritzar mentre afegiu algunes funcions noves a una aplicació. Així, bàsicament, és una part d'una actualització de programari amb un procés de refactorització independent. Us estalvieu un deute tècnic futur si observeu que el codi s'ha d'actualitzar durant les fases anteriors del desenvolupament de funcions.
L'usuari final no pot veure aquests esforços de l'equip d'enginyeria, però els desenvolupadors que treballen en l'aplicació trobaran el valor de refactoritzar el codi quan estan construint l'aplicació. Poden estalviar temps, diners i altres recursos si només dediquen una estona a actualitzar el codi abans.
És com si volgués anar 100 milles a l'est, però en comptes de només caminar pel bosc, conduiré 20 milles al nord fins a l'autopista i després aniré 100 milles a l'est a tres vegades la velocitat que podria tenir si Només hi vaig anar directament. Quan la gent t'està empenyent a anar-hi directament, de vegades has de dir: 'Espera, he de comprovar el mapa i trobar la ruta més ràpida'. La refactorització preparatòria ho fa per mi.
Jessica Kerr (Desenvolupador de programari)

7. Refactorització de la interfície d'usuari
Podeu fer canvis senzills a la interfície d'usuari i refactoritzar el codi. Per exemple: alinear el camp d'entrada, aplicar el tipus de lletra, reformular amb veu activa indicar el format, aplicar la mida del botó habitual i augmentar el contrast de color, etc.
Paraules finals
Heu de considerar el procés de refactorització del codi com la neteja de la casa ordenada. El desordre innecessari a una casa pot crear un entorn caòtic i estressant. El mateix passa amb el codi escrit. Un codi net i ben organitzat sempre és fàcil de canviar, d'entendre i de mantenir. No us trobareu amb dificultats més endavant si presteu atenció al procés de refactorització del codi abans.
Dos dels desenvolupadors de programari més influents Martin Fowler i Kent Beck han dedicat el seu temps a explicar el procés de refactorització del codi i les seves tècniques. També han escrit un llibre complet sobre aquest tema Refactorització: Millora del disseny del codi existent . Aquest llibre descriu diverses tècniques de refactorització amb una explicació clara del treball en aquests processos de refactorització. Us recomanem que llegiu aquest llibre si voleu aprofundir en el procés de refactorització del codi.