Dynamiske Sprog: en opdeling af Bekymringer

Original: http://www.sellsbrothers.com/Posts/Details/2290

Jeg så Nick Muhonen holde et foredrag om det nye sprog funktioner i C # 4.0 aftes på Portland-området .NET User Group. Han gjorde et godt stykke arbejde på trods af de konstante spørgsmål, jeg stillede. Han viste et eksempel, som jeg fandt særligt overbevisende:

object GetConfig() {
return new {
WindowSize = new Size() { Width = 100, Height = 200 },
ConnectionString = “…”,

};
}

Selvfølgelig ville ikke hårdt kode indstillingerne i dit program, du – du ville indlæse dem fra et sted (ideelt en database, men det er en anden historie:). Anyway, i C # 4.0 kan jeg skrive kode som dette:

dynamic config = GetConfig();
mainWindow.Size = config.WindowSize;

Læg mærke til brugen af ​​dynamiske søgeord – det betyder, at jeg ikke behøver at vide, hvilken type på compile-typen – Jeg tjekker for WindowSize ejendommen på run-time ala .NET Refleksion, COM IDispatch eller VB “Option Explicit Off “. Selvfølgelig er hjørnestenen i alle dynamiske sprog, fx Perl, Python, Ruby, osv Disse sprog har vundet i popularitet i de sidste par år, og jeg forstod ikke hvorfor. Tim Ewald, min nære ven og Compadre, holdt forsøger at forklare det til mig, men jeg er bare for langsom til at få det, og det gjorde jeg ikke “’til i går aftes se Nick gøre sit ting. Det var ikke at se på den kode, Nick maskinskrevne der gjorde for mig, det var at se på, hvad han ikke skriver.

Når du skriver dynamisk kode, er der ingen krav om at definere en type.

Det vil sige, når jeg uundgåeligt tilføje en anden ejendom eller 10 til min app config, jeg nødt til at skrive kode til at bruge de nye egenskaber, men det er alt. Jeg behøver ikke at skrive en klasse, og jeg sandsynligvis ikke behøver at opdatere Save / load kode enten, fordi det også kommer til at være dynamisk og bare afsløre, hvad data er en del af føljeton config. Eller sagt på en anden måde:

Når du skriver dynamisk kode, jeg kun at sende den del, jeg holder af.

I tilfælde af at behandle ansøgningen config, det er omkring 2 / 3rds af koden jeg ikke længere nødt til at skrive. Selvfølgelig er dette ikke en ny idé – Stuart Halloway har talt om at omfavne essens (den kode, du holder af) og afvise ceremoni (den kode, du ikke gør) i lang tid nu. Det tog bare Nicks konkret eksempel for mig at forstå det.

Og ikke alene gør dynamisk kode godt for at reducere den kode, du skriver, er det altid gør det godt for den kode, du genererer, fx COM Interop forsamlinger, database kortlægning kode, XML kortlægning kode osv Generelt finder jeg, at de fleste af koden, vi har genereret for os i .NET programmering miljø er kode til kort til udenlandsk type systemer, dvs. COM, databaser, XML , web-tjenester mv Med dynamisk sprog, kan du skrive denne kode én gang og bare bruge det. I virkeligheden, i C # 4.0, er der ingen grund til at bruge Primary Interop Assemblies (PIA) længere – de kan bare kortlægges til en underklasse af “DynamicObject” type som .NET 4,0 skibe at fastsætte, at dynamisk kortlægning bro.

Når du skriver dynamisk kode, behøver du ikke genererede kode lag til kort til udenlandske typesystemer.

Det betyder, at jeg ikke behøver at gøre kortlægningen til databaser pr forespørgsel eller til XML pr XSD – jeg kan bare have en implementering af DynamicObject, pege på min konfiguration og gå – ingen muss, ingen ståhej. Selvfølgelig rent dynamiske sprog har en konstruktion for DO indbygget i, så det er endnu nemmere.

Rundt om bordet efter Nicks snak i aftes, var en person klager over, at med rent dynamiske sprog, jeg giver op fordelene ved compileren laver statiske type kontrol (jeg tror det var Nick:). Jeg fremførte, at dette var en god ting. Den compiler er egentlig bare en slags test af enheder – det er at teste navne. Det kan ikke gøre nogen af ​​de andre test af enheder, du har brug gjort, men så du stadig har brug unit test. Det betyder, at med statiske sprog, du har fået nogle unit test adskilt fra din kode og nogle bagt ind i kode via typer, afstøbninger, etc.

Når du skriver dynamisk kode, kan du adskille unit test helt ud af din kode.

Selvfølgelig, som software ingeniører, vi allerede ved, at adskille bekymringer fører til bedre, mere læselig og mere vedligeholdelsesvenlig kode, hvilket er grunden til vi har længe adskilt vores applikationer i tiers, adskilt vores opfattelse fra vores data, vore grænseflader fra vores implementeringer, etc. Dynamiske sprog lad os gøre en anden fuldstændig adskillelse af bekymringer med hensyn til unit test som statiske sprog ikke tillader. I en statisk sprog, er ceremonien påkrævet, derved obfuscating essensen.

Og alt dette er fantastisk bortset fra en forespørgsel – “.” Hvordan får jeg min liste over mulige kode til at skrive, når jeg skriver hvis jeg bruger en dynamisk sprog eller dynamiske elementer i en statisk sprog ala C # 4.0?

Når du skriver dynamisk kode, får jeg ikke Intellisense.

Mit navn er Chris sælger og jeg er en Intellisense narkoman. Indrømme Jeg har problemet er det første skridt …

Comments are closed.