Vaste: 2

, vaste deel 2 in beginsel open,,,,,,,,,, 23, aandelen, 14,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen, een deel van de prijs van een reeks vaste principles.solid genoemd: Deel 1: een gemeenschappelijke verantwoordelijkheid principlesolid deel 3 van vervanging & - het beginsel van de scheiding van taken, de interne (SrP) en open /gesloten (OCP), vervanging, interfaces en de afhankelijkheid van isolatie, anti - toespraak.Vijf van onze beginselen moet je elke keer dat je de code schreef,,,,,, de definitie van de entiteit (zoals software, modules, taken, enz.) moeten open zijn voor uitbreiding, voor de wijziging van het gesloten.,,, in beginsel open, OCP kortom, dankzij de Bertrand, Mayer, Frankrijk programmeurs, die in de eerste plaats heeft in zijn het boek van 'n oo de bouw van 1988.,, het beginsel van in het begin van deze eeuw populair was, werd het een solide beginselen van Robert C. Martin in z' n boek, onze beginselen van de ontwikkeling van software, de wijze en de praktijk in het boek, later opnieuw onze beginselen, model C&#versie en in de C -&#praktijken.,, hebben we het in wezen over?Dit is voor ons de module, de klasse en de functie van het ontwerp van een manier, als een nieuwe functie noodzakelijk is, moeten we niet de wijziging van een bestaande code, maar een nieuwe code te schrijven, zal het gebruik van de bestaande code.Dit klinkt een beetje vreemd, vooral als we in de taal zoals Java, C, C + + of C&#die niet alleen van toepassing op de bron zelf maar binaire ook.We willen creëren, moeten we niet een herschikking van de bestaande nieuwe functie van binaire bestanden, uitvoerbare of dll, op een solide, OCP. In het kader van de in deze gids, we, we kunnen elke nieuwe beginselen in de context van reeds besproken.We hebben gesproken over de gemeenschappelijke verantwoordelijkheid (SrP) wijst erop dat een model moet slechts één reden om dat te veranderen.Als we willen dat OCP en SrP, zien we dat ze elkaar aanvullen.Code van het hart en in beginsel bij SrP zal OCP of gemakkelijk maakt het de eerbiediging van deze beginselen.Als we er één van de oorzaken van de code veranderd, de invoering van een nieuwe functie zal leiden tot een tweede reden, te veranderen.Dus, in strijd zou zijn met het SrP OCP.Op dezelfde manier, als we de code, alleen veranderen als de veranderingen en de belangrijkste functies van het ongewijzigd is gebleven, een nieuwe functie wordt toegevoegd, waardoor de eerbiediging van OCP, zullen de meeste respect SrP.,, betekent dit niet dat SrP leidt altijd tot OCP of vice versa, maar in de meeste gevallen de volgende, en als een van hen worden gerespecteerd, dat is heel eenvoudig. De inbreuk van OCP,,, de meest voor de hand liggende voorbeeld vanuit louter technisch oogpunt, in beginsel open is heel eenvoudig.Een eenvoudige relatie tussen de twee soorten, zoals de volgende een schending van OCP.,,,,,,, de gebruiker rechtstreeks gebruik, logica, les.Als we de noodzaak tot een tweede, logica, klasse, zal ons in staat stellen om gebruik te maken van de huidige een en nieuwe en bestaande, logica, veranderd zou moeten worden.Gebruikers die rechtstreeks verband houden met de uitvoering van,,, logica, is er een manier voor ons om een nieuwe, logica, niet van invloed is op de huidige een.Als we het hebben over de taal van de statische aard, is het heel goed mogelijk, de gebruikers, de klas zal ook worden gewijzigd.Als we het hebben over de opstelling van de taal is, natuurlijk, de gebruikers en de file, File of dll, logica, zal opnieuw moeten worden opgesteld, en de inzet van onze klant, een proces dat we zoveel mogelijk moeten worden vermeden.,, geef me de code, op basis van de architectuur, kan worden afgeleid dat de een soort, rechtstreeks van het gebruik van een ander type eigenlijk in strijd is met het beginsel van open en gesloten.Dit is de juiste, strikt genomen.Ik vond dat heel interessant vinden te beperken, als je een lijn trekken, heeft besloten dat het respect voor de wijziging van een bestaande code OCP is moeilijker, of de kosten van de bouw niet voldoende zijn om de kosten van de bestaande code.,, zeggen we dat we een soort om te schrijven, kan ook de ontwikkeling van documenten is door ons moet worden met het programma downloaden% op een kwart.We hebben twee grote categorieën: de eerste, vooruitgang, en, het dossier, en ik denk dat we gebruik moeten maken van hun houdt van een van de volgende tests.,, functie testitcangettheprogressofafileasapercent () {% FILE = nieuwe dossier (); $dossier > lengte = 200; $dossier > de Toewijzing van = 100 dollar vooruitgang; = nieuwe ontwikkelingen (documenten); de dollar - > dat het (50 $vooruitgang > getaspercent ());}, in deze test, we gebruiken, vooruitgang.We hopen dat het verkrijgen van een waarde van 1%, ongeacht de werkelijke omvang van het dossier.We gebruiken, het dossier, als we de bronnen van informatie, vooruitgang.Een dossier met een lengte en een bytes genaamd, stuur dat verzonden aan een bedrag van de gegevens te downloaden.We geven niet om hoe deze waarde in de toepassing van de procedures te actualiseren.We kunnen aannemen dat er iets magisch logica als we het doen, dus in een test zijn, kunnen we ze duidelijk geregeld, document (openbare $lengte; de $;},,, documenten, maar een eenvoudige gegevens het voorwerp van de velden bevatten.In het echte leven, kan het gedrag van andere informatie bevatten en, zoals de naam, de route en de relatieve weg, de huidige lijst, het type, de bevoegdheden, de vooruitgang, enz. (persoonlijke documenten (documenten); de functionele __construct {% dit > FILE = documenten;} functie terug getaspercent () {dollar - > documenten > de toewijzing van * 100 /dollar - > documenten > lengte:}},,, vooruitgang, is een eenvoudige, in het dossier, de aannemer.Voor de duidelijkheid, we in de parameters van de fabrikant vermeld in de aard van de variabele.Er is een nuttige methode, vooruitgang, getaspercent (), de lengte, de toegezonden gegevens, documenten en omgezet in één procent.Simpel, en het werkt. En ze beginnen met testen in de middag...塞巴斯蒂安伯格曼 phpunit 3.7.28.Tijd: 15 msec. 2.50mb goed geheugen: (1 - test, 1, dat deze code), lijkt te kloppen, maar een schending van het beginsel van open en gesloten.Maar waarom?En hoe?In de veranderende behoeften van elke aanvraag, die naar verwachting in de ontwikkeling van nieuwe tijd, zal moeten functioneren.De toepassing van een nieuwe functie kan worden toegestaan, de muziek - en niet alleen de bestanden.Bytes van documenten, de muziek voor de duur van de sec.We willen ons publiek te voorzien van een goede vooruitgang, maar we kunnen hergebruiken, hebben we al een????????Dat kan niet.Onze vooruitgang onvermijdelijk is, documenten.Het begrip documenten, zelfs als het kan worden toegepast op de inhoud van de muziek ook.Maar om dat te doen, moeten we de herziening van het, we moeten weten, vooruitgang, muziek, en documenten.Als we het ontwerp zou de eerbiediging van OCP, we hoeven niet te raken, documenten, of de vooruitgang.We kunnen gebruik maken van de bestaande en vooruitgang, en is van toepassing op, de muziek, de,, oplossing 1: door middel van de dynamische aard van de dynamische, de taal, de aard van het voorwerp van de werking van raden in het voordeel.Dit stelt ons in staat om van de fabrikant, typehint vooruitgang, de "code kan nog steeds werken.,, vooruitgang (persoonlijke documenten (documenten); de functionele __construct {% dit > FILE = documenten;} functie terug getaspercent () {dollar - > documenten > de toewijzing van * 100 dollar /de - > dossier > lengte:}}, nu kunnen we met dingen gooien, vooruitgang.Met wat, precies wat ik bedoel, wat is het soort muziek {:, openbare $lengte; de dollar gestuurd; de openbare kunstenaars; openbare $album; openbare functie getalbumcoverfile () releasedate dollar; {terugkeer "beelden /dekking /".De dollar - > kunstenaar. "/".De dollar - > album ".Papoea - Nieuw - Guinea ";}},,,, muziek, zoals een meer werk is goed.We kunnen het testen is makkelijk met een vergelijkbare test, documenten, testitcangettheprogressofamusicstreamasapercent, functie () {% = nieuwe muziek muziek (); $muziek > lengte = 200; $muziek > de toewijzing van = 100; $vooruitgang = nieuwe vooruitgang (muziek); de dollar - > dat het (50, voor de vooruitgang > getaspercent ());}, is, dus in principe geen meetbare inhoud kan worden gebruikt, de vooruitgang, klasse.Misschien moeten we met de code door de verandering van de variabele is ook de naam van de vooruitgang:,, (particuliere measurablecontent dollar; de functionele __construct ($measurablecontent) {% dit > measurablecontent = $measurablecontent;} functie terug getaspercent () {dollar - > measurablecontent - > levering van 100 dollar - > measurablecontent - > lengte;}}, dat is heel goed, maar we hebben een groot probleem, op deze manier.Als we het hebben, documenten, aangewezen als typehint, we moeten begrijpen onze klas kan verwerken.Het is duidelijk, als iets anders kwam, een mooi fout heeft ons verteld dat de vooruitgang,.,:: __construct (1) is een voorbeeld van de documenten moet de muziek, geeft voorbeelden van, maar niet typehint.,, moeten we vertrouwen op de feiten, of de in de twee precies zoals de variabele "duur" en ", te sturen, en".Anders krijgen we een weigerde legaat, legaat, afgewezen: een soort, de methode op basis van klasse in deze categorie een basis van de contracten niet worden afgeleid.Dit is een bron van Wikipedia, de geur, code, bij het opsporen van de hoge koers van de geur van de code is ingevoerd.Kortom, wij willen niet het einde van de methoden op het gebied van probeert te bellen of de toegang tot het doel, niet in ons contract.Als we er een typehint, de bepalingen van de overeenkomst.Klasse, documenten, gebieden en methoden.Nu hebben we wat we kunnen om alles, zelfs een string, dat zal leiden tot een lelijke fout.,, functie testitfailswithaparameterthatdoesnotrespecttheimplicitcontract () {% vooruitgang = nieuwe vooruitgang ("..."); de dollar - > dat het (50 $vooruitgang > getaspercent ());}, de test doen, zouden we in een aaneenschakeling van sturen, zal leiden tot een weigering om de erfenis van niet - Voorwerp:,,.,, die het resultaat is van dezelfde, in de zin van het artikel van een student, een goed nieuws.Echter, dit is een zeer bescheiden.In ons geval, er is een touw in ons voorbeeld is niet de manier, welke eigenschap niet te vinden.Moeilijk te testen en de oplossing van het probleem.Een programmeur moet open, vooruitgang, de les lezen en begrijpen.De overeenkomst, in dit geval, als we niet duidelijk in de aanwijzing door het gedrag van typehint, is de definitie van vooruitgang, van.Dit is een impliciete contract, weet alleen vooruitgang.In ons geval, het is een door de toegang tot de twee gebieden, te sturen, en de lange, getaspercent (). De methode is.In de realiteit van het leven van de impliciete contract kan zeer ingewikkeld is, en het is moeilijk door te zoeken naar een paar seconden in de klas, deze oplossing is gevonden, maar in andere voorstellen zijn gemakkelijk kan worden bereikt, of kan leiden tot ernstige wijzigingen in de bouw, geen redelijke inspanningen om oplossingen aanbevelen.,, 2: strategie voor het gebruik van het ontwerp - dit is een van de meest voorkomende en kan de eerbiediging van de meest geschikte oplossing van OCP.Het is een eenvoudige en doeltreffende strategie,,,,, de invoering van het gebruik van de interface.De interface is oop van een bijzondere vorm van de cliënt en de server van de entiteit een contract tussen de klassen.Twee klassen zal aandringen op een overeenkomst, om ervoor te zorgen dat de verwachte gedrag.Er kunnen verschillende, onafhankelijke, servers, de eerbiediging van de contractuele klanten met een staat van dienst in de klassen Interfaces, kan getlength () {functie getsent ();}, in een interface kan worden gedefinieerd in ons gedrag.Dit is waarom, en niet rechtstreeks door de variabele, zullen wij rekening houden met een ambitieus en gebruik.Op dit punt aan te passen aan de andere categorie, is niet zo moeilijk.We kunnen het doen het meeste werk, functie, testitcangettheprogressofafileasapercent. () {% FILE = nieuwe dossier (); de documenten - > de buffer (200); de lengte van die documenten > setsent (100); $vooruitgang = nieuwe vooruitgang (documenten); de dollar - > dat Het (50), vooruitgang - > getaspercent ());}, en, zoals gewoonlijk, we uit onze test.We moeten met de vastgestelde waarde.Als verplicht is, deze instanties kan worden omschreven en meetbaar, interface.Maar wees voorzichtig met wat je daar.De interface is de definitie van cliënten, de vooruitgang en de verschillende categorieën van documenten, de server van contracten, en de muziek.Of de vooruitgang, de noodzaak van een waarde?Misschien niet.Dus, beleidsmakers moeten in de interface is onwaarschijnlijk.Als je wilt, de uitwerking van een definitie van je zou dwingen om alle server.Voor sommige mensen, dat is logisch, rukker, maar andere mensen kunnen zich helemaal anders.Als we met onze, progressieve, eersteklas te laten zien dat we de temperatuur van de oven?De temperatuur, een elektrische oven, kan worden gestart in uitvoering van de waarde van de verkregen informatie, of een derde klasse.Wie weet?Het zou vreemd zijn in die categorie van documenten dat de.,, meetbare (particuliere $lengte; de particuliere dollar gestuurd; de openbare documenten; de eigenaren van de dollar; de functie van de lengte van de buffers (lengte) {% dit > lengte = $lengte;} functie terug getlength () {dollar - > de lengte van de functie;}; setsent (school) {% dit > sturen = dollar sturen;} functie terug getsent () {dollar - > gestuurd; getrelativepath () {} functie terug naar de gids ($- > de naam van de functie);} getfullpath () {terug realpath ($- > getrelativepath ());}},,, documenten, is enigszins gewijzigd om zich aan te passen aan de bovengenoemde eisen.Nu de uitvoering, meetbare, interfaces en interesse in ons gebied leiden en ambitieuze mensen.Muziek, zeer vergelijkbaar zijn, je kan controleren is de inhoud van de source code.We zijn bijna klaar,,, de vooruitgang van de particuliere measurablecontent dollar {categorie; de functionele __construct (meetbare measurablecontent dollar) {% dit > measurablecontent = $measurablecontent; getaspercent () {} functie terug naar de measurablecontent - > > getsent (*) 100 /dollar dat measurablecontent - > > getlength ();}},,, vooruitgang, maar ook de noodzaak van een kleine update.Nu kunnen we het gebruik van typehinting met vermelding van de soort van de aannemer.De verwachte aard is, kan worden gemeten.Nu hebben we een vast contract.Zeker, de toegang van de vooruitgang, zal er altijd zijn, want ze zijn gedefinieerd, kunnen worden gemeten, de interface.Muziek, documenten, ook om ervoor te zorgen dat zij de nodige vooruitgang, door een eenvoudige methode om de verwezenlijking van alle interfaces, als een soort van een interface.,, dit ontwerp is een flexibel programma model nader toegelicht. De interface, nomenclatuur, aandacht, vaak de naam - en kapitaal, ik voor hen, of Met het woord "interface", met de laatste, zoals ifile, of, fileinterface,.Dit is een oud symbool van de stijl van een verouderde normen opleggen.We zijn zo veel verleden Hongarije symbolen of moet worden aangegeven of de aard van het voorwerp van de variabelen te gemakkelijk te herkennen is de naam.- dat we in een flits.Dit maakt ons te concentreren op wat we echt willen, abstracte zaken, hun interfaces van hun klanten.KanAls je wil dat de naam van een interface, je moet rekening worden gehouden met de uitvoering van de klant en vergeten.Als we onze interface bekend kan worden gemeten, wanneer we denken aan vooruitgang.Als ik een vooruitgang, ik moet kunnen geven hoeveel procent?Het antwoord is simpel, we kunnen meten.Dus de naam te kunnen meten.Een andere oorzaak is, de uitvoering van kan uit verschillende gebieden.In ons geval, documenten en muziek.Maar we kunnen wel het hergebruik van onze vooruitgang, in de auto van de simulator.In dat geval zal de klasse gemeten snelheden, brandstof, enz. Goed, is het niet?3: het gebruik van modellen, oplossingen voor de ontwerp - methoden en strategieën, de ontwerp - model vergelijkbaar zijn, maar het gebruik van abstracte interface tussen klasse.Voor het gebruik van een model - methode, we hebben een klant is de concrete toepassing van het programma, de vermindering van hergebruik en wanneer de server categorieën gemeenschappelijke gedrag, dit patroon in meer details in het ontwerp in de loop van de flexibele wijze, een hoger niveau van mening worden, hoe het van invloed is op onze het hoge niveau van de architectuur?Als het beeld dat we van de toepassing van het huidige kader, de toevoeging van een nieuwe module en vijf nieuwe soorten (blauw) moet de invloed van ons ontwerp op een gematigde manier (rood),,,,,, in de meeste systemen, je kan niet verwachten dat in de nieuwe categorie de huidige code absoluut geen effect hebben.Echter, de eerbiediging van het beginsel van de open /gesloten, zal leiden tot een aanzienlijke vermindering van de klassen en modules, moeten veranderen voortdurend.En de andere, als de beginselen van de vorige, probeer niet alles te denken.Als je dat doet, zal je het einde van een interface voor elke klasse van je.Dit ontwerp zal moeilijk te handhaven en te begrijpen.Meestal, de veiligste manier is om de mogelijkheid te overwegen, als je kan bepalen of er sprake is van een andere aard van de server.Vaak, als je je gemakkelijk kunnen voorstellen van een nieuwe functie, of je kan naar de achterstand van een project, zal leiden tot een andere server.In deze omstandigheden, toe te voegen aan de interface van het begin.Als je niet zeker bent, of als je niet zeker bent... Het meeste van de tijd - het gewoon niet.Laat een programmeur, of zelfs als je, je moet een andere als het gaat om de toevoeging van een interface, en dan, de laatste gedachten volgen, als je je discipline en het toevoegen van de interface, als een tweede server nodig is, wordt de wijziging is een van de weinige en makkelijk.Onthoud, als een code moet worden veranderd, moet deze wijziging de mogelijkheid zeer hoog.Als deze mogelijkheid in de realiteit, OCP bespaart je veel tijd en energie, en dank u voor te lezen.

violate1
strategy
template_method
HighLevelDesign
HighLevelDesignWithNewClasses



Previous:
Next Page: