Vaste: 3

, vaste deel 3 - vervanging en het beginsel van de scheiding van,,,,,,,,,, 19, 19 - eenheid,,,,,,,, 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:2 genoemd - het openen en sluiten van deel 4: het beginsel van de omkering van principlesolid afhankelijkheid, de gemeenschappelijke verantwoordelijkheid (SrP), open /gesloten (OCP), ter vervanging van de interface isolement, gericht, en de afhankelijkheid van ondersteboven.Vijf van onze beginselen van de code schreef je, elke keer, want wat is gericht. De beginselen van vervanging (provider) en het beginsel van de scheiding van de interface (ISP) gemakkelijk de definities en instructies, in deze les zullen we praten over ze. En de beginselen van vervanging, gericht (lsps), klasse, en niet tegen de vader van klasse de definitie van dit beginsel.,,, is het concept van de in 1987 door de toon van de Conferentie van Barbara gericht is ingevoerd en na 1994 gepubliceerd z 'n vleugel.Het wordt als volgt gedefinieerd:,,, dat Q (x) is een eigenschap van de X - T - type en het voorwerp kan bewijzen vragen (y) moeten worden dat het doel y s - s is een subtype, t, en later, van Robert C. Martin solide beginselen in z 'n boek onze software het beginsel van de ontwikkeling, de publicatie van patronen en praktijken en soepele regels betreft boeken, model C&#versie en in de C -&#praktische definitie aangeduid als beginsel van vervanging.,, die ons van Robert C. Martin gegeven definities:,,, sub - type moet kunnen worden vervangen door hun fundamentele aard.,,, het is zo simpel, een soort betrekking moet hebben op de functie in het standpunt van de klant voortdurend moedermaatschappij methode.Hier is een eenvoudig voorbeeld van dit concept, de functie van voertuigen van de categorieën (., startengine () {///////de functie van de functie van de standaard het starten van de motor) () {///////accelerate standaard versnelling}}, aangezien een soort, auto 's, het kan zijn dat de abstracte en, voor voertuigen van de categorieën:, uitbreiding van de taken van startengine () {{% van het voertuig - > engageignition (); de ouders: startengine (); de particuliere engageignition () {}) ///////- categorie voertuigen electricbus uitgebreid programma}} {functie accelerate () {% dit > increasevoltage (); de dollar - > connectindividualengines (); de particuliere functie increasevoltage () {} ///////private functie connectindividualeng elektrische logica}() {///////- in verband met de logische}}, klasse, de cliënt moet kunnen gebruiken, als het gebruik van auto 's, klasse,,, drijvende {functie (voertuig, V) {% V > startengine (); en V > accelerate ();}}, en, laten we het eenvoudig model voor de verwezenlijking van onze ontwerp - model in OCP training gebruiken.,,,,,, op basis van onze ervaringen in het verleden, het beginsel van open /gesloten, kunnen we concluderen dat het beginsel van vervanging is de sterke relatie met OCP.In feite, "in strijd is met de provider is de mogelijke schending van OCP" (Robert C. Martin), en het model van het ontwerp is een typisch voorbeeld van en het respect voor en de uitvoering van de provider, die op hun beurt voor de oplossing van OCP.,, de schending van de provider, Het klassieke voorbeeld ter illustratie van de volledige, we gaan een typisch voorbeeld, omdat het zeer belangrijk is en gemakkelijk te begrijpen zijn.,, de linkerbovenhoek van de rechthoek dollar {Onderhands Onderhands Onderhands dollar, breedte, lengte; de functie van SetHeight ($) {% dit > lengte = $hoogte;} {regressie openbare functie - $getheight () > de hoogte van de openbare functie;} setwidth ($breedte) {% dit > breedte = $breedte van openbare functie; getwidth () {}, dat terugS > breedte;}}, dat we de geometrische vorm van een fundamentele, rechthoekig,.Het is gewoon een eenvoudige gegevens het voorwerp en de beleidsmakers en de leiders, de breedte, lengte.Stel dat we de toepassing van de programma 's lopen, het is ingezet om de pluraliteit van klanten.Nu hebben ze een nieuwe functie.Ze moeten in staat zijn om in de realiteit van het leven in de geometrie, een vierkant is een bijzondere vakken.Dus we kunnen proberen om een, vierkant, klasse, rechthoekig, klasse.Mensen zeggen vaak dat een kind in de klas, is een soort van vader. Dat is ook in overeenstemming met de provider, althans op het eerste gezicht,,,,,,, maar Square, echt, langwerpig, met in het programma?Deze partij, en uitbreiding van een functie SetHeight rechthoekige {(美元值) {% dit > breedte = waarde; de dollar - > lengte = de waarde van openbare functies;} setwidth (美元值) {% dit > breedte = waarde; de dollar - > lengte = de waarde van Een van de partijen;}}, is gelijk aan de rechthoek, in de breedte en hoogte, kunnen we een vreemd als de verwezenlijking van de in bovenstaand voorbeeld.We kunnen beide instellingen op de hoogte en breedte.Maar hoe dit van invloed is op de klanten, de code?De functie van de cliënt, en categorie (areaverifier (rechthoekig, R) {% R > setwidth (5); - O > SetHeight (4); als ($R > ruimte ().= 20) {met uitzondering (slecht! ")} terug waar;}};,, is het mogelijk om een cliënt, of rechthoekige gebied en uitzonderingen, als het de verkeerde was. En een, functie () {terugkeer dollar - > w * dollar - > hoogte;}, natuurlijk kunnen wij zeggen dat de methoden, boven ons, langwerpig, met voor de regio 's.,, lsptest uitbreiding phpunit_framework_testcase {functie testrectanglearea () {% R = nieuwe rectangle (); c = nieuwe cliënt (); de dollar - > asserttrue ($C > areaverifier (R));}}, creëren we een eenvoudig test van het sturen van een lege ruimte en het testen van de rechthoekige objecten door.Als we gelijk hebben, vierkant, de definitie van de categorie, stuur het naar de cliënt, areaverifier (), het functioneren van niet moeten breken.Immers, vierkant, is een rechthoek, in de zin van de wiskunde.Maar onze klas?,, functionele testsquarearea () {% R = nieuwe vierkante (); c = nieuwe cliënt (); de dollar - > asserttrue ($C > areaverifier (R));}, heel makkelijk, testen, breekt het grote moment.Gooi ons als we deze test is een uitzondering, 3.7.28, phpunit Sebastian Bergman.Met uitzondering: slecht.# 0 /weg /:/... /... /lsptest. Php (18): de klant > areaverifier (voorwerpen (Square)) [in functie]:lsptest - >, dus we testsquarearea (), klasse, Square, niet een rechthoek, na alles.Het breekt de wetten van de geometrie.Het is mislukt, en dat is in strijd met het beginsel van vervanging gericht.,, zou ik graag in het bijzonder dit voorbeeld, omdat het niet alleen tegen de provider, is eveneens gebleken dat de gerichte programma 's niet in kaart brengen van de objecten in het echte leven.In ons programma voor elk voorwerp moet zijn van een abstract begrip.Als we proberen om een een - op - een echte object in de programma 's betreft, zullen wij bijna altijd.Het beginsel van open /gesloten is over de categorie van het ontwerp en de functie van de uitbreiding.De beginselen van vervanging is gericht - en erfenis.- het beginsel van de scheiding van (ISP 's) is de logica van de klanten. En in alle modulaire van toepassing is, moet er een interface, de cliënt kan rekenen.Misschien is de werkelijke interface vormen van de entiteit of andere klassieke object dat een ontwerp van modellen, zoals de buitenmuur.Het is niet belangrijk, gebruik de oplossing.Het is altijd dezelfde: op het gebruik van de modules van de klant te communiceren.Deze interface kan zich in dezelfde aanvraag of tussen de verschillende modules in het project, of in een ander project als een project in een derde van de partijen een project tussen bibliotheken.Ook dit was geen relatie.Mededeling van de Commissie is de communicatie, de klanten zijn klanten, ongeacht de werkelijke individuele code te schrijven, dus moeten we hoe deze interface?We kunnen overwegen onze module, en zal alle functies, en we hopen dat het verstrekken van,,,,, dat ziet eruit als een goed begin, een geweldige manier om te definiëren wat we in onze module.?????Dit is een begin, en zal leiden tot de verwezenlijking van een mogelijk: een grote, auto 's, of, voor de bus, de verwezenlijking van alle voertuigen, de interface.Alleen deze soort enorme afmetingen moeten zeggen dat we moeten koste wat kost voorkomen dat ze veel kleine klassen of.,,, lichten, veiligheidsinrichting, of,,, radiocd, is voor de verwezenlijking van de interface biedt een nuttige dingen voor hun uitvoering.,,, duidelijk geen oplossing is om de zaken. De logica van de aanvaardbare.,,,,,, kunnen we nog een andere aanpak.De interface is verdeeld in een blok, speciaal voor de uitvoering.Dit zal bijdragen tot het gebruik van kleine, voor zijn eigen interface.De verwezenlijking van de doelstellingen zullen worden tussen verschillende soorten voertuigen, zoals hierboven in de auto.De auto zal de uitvoering van het gebruik, maar zal, afhankelijk van de interface.Dus, een patroon, zoals hieronder wordt een misschien meer expressief,,,,, maar die in feite verandert de manier van denken over het gebouw.Auto 's, een klant in plaats van uitvoering.We hopen nog steeds dat voor onze klanten die gebruik maken van onze hele module van een voertuig, namelijk de,,,,, in de veronderstelling dat lossen we problemen bij de tenuitvoerlegging, we hebben een stabiele economische logica.De beste manier is om een gemeenschappelijke interface en uitvoering, zodat de klanten in onze zaak, de auto 's staan, de snelweg, de chauffeur,,, wacht, het gebruik van een van de wil van de interface.Eigenlijk, dit zal de klant verantwoordelijk voor het kiezen van de acties.Vind je dat een oude oplossing voor de toepassing van het beginsel van de scheiding van.,, - interface (ISP 's) wijst erop dat er geen klanten gebaseerd moet zijn op de methode niet gebruiken, maar deze oplossing, er is een probleem.Nu alle klanten afhankelijk is van alle methoden.Waarom een auto staan, hangt af van de lamp van auto 's van de staat, of door de bestuurder, de selectie van de omroep?Het moet niet.Maar als zij het zijn?Is er een verband?Oké, als we willen dat het beginsel van de verantwoordelijkheid van een enkele, dit is een van M 'n zus, het concept van een.Als de auto staan, hangt af van vele personen te bereiken, gebruik het niet eens, het moet veranderen, als een kleine veranderingen te bewerkstelligen.Dit is echt voor die talen, maar we kunnen nog steeds zien, en de controle van het licht, de gevolgen van de veranderingen in de werking, het busstation.Zoiets zou niet mogen gebeuren, maar, de interface is van hun klanten, in plaats van uitvoering.Dus, moeten we altijd de beste manier om een ontwerp van hun klanten.Soms kunnen we, soms kunnen we niet volledig op de hoogte van onze klanten.Maar als we kunnen, moeten we het onze interface in veel van de kleinere, zodat ze beter op de behoeften van onze klanten nodig,,,,, natuurlijk, dat zal leiden tot een zekere overlapping.Maar weet je nog?- alleen de naam van de functie gedefinieerd.In geen van hen een logica van de uitvoering.Dus, ik herhaal, kleine en controleerbaar is, en dan, onze cliënt alleen in wat ze werkelijk nodig hebben en het gebruik van de enorme voordelen.In bepaalde omstandigheden kan het gebruik van verschillende klanten en interface nodig, en dat is goed, zolang ze het gebruik van alle interfaces, die afhankelijk is van alle methoden, een goede truc is, in onze logica, een soort kan enkele interface, als dat nodig is.Dus kunnen we alle gebruikte methoden als interface voor de verwezenlijking van een afzonderlijk.De interface ook isolement dwingt ons rekening te houden met ons vanuit het oogpunt van de klant van de code, die zal leiden tot de los te koppelen en gemakkelijk te testen.Dus, we niet alleen onze code beter voor onze klant, we laten we ook gemakkelijker te begrijpen, het testen en de uitvoering van de laatste gedachten,.,,, waarom kan het niet als provider leert ons programma 's doel van een relatie en het type moeten respect voor hun ouders.We hebben het in het licht van andere beginselen, dat weten we al, de ISP 's, leert ons respect van onze klanten dan wij nodig achten.De eerbiediging van hun behoeften zal onze code beter wordt, ons het leven gemakkelijk, bedankt voor je tijd.

template_method
SquareRect
hugeInterface
specializedImplementationInterface
carUsingInterface
oneInterfaceManyClients
segregatedInterfaces



Previous:
Next Page: