Le manuia tala e uiga i le faatelevaveina o mafaufauga

O le a vave ona ou faʻamatalaina le ulutala o le tusiga. O le uluai fuafuaga o le tuʻuina atu lea o fautuaga lelei ma faʻatuatuaina i le faʻavaveina o le faʻaogaina o mafaufauga e faʻaaoga ai se faʻataʻitaʻiga faigofie ae moni, ae i le taimi o faʻataʻitaʻiga na faʻaalia ai e le telegese le mafaufau e pei ona ou manatu, LINQ e telegese nai lo aʻu miti taufaafefe. Ae i le faaiuga na aliali mai na ou faia foi se mea sese i fua ... O auiliiliga o lenei tala o le olaga o loʻo i lalo o le tipi ma i faʻamatalaga. Talu ai o le faʻataʻitaʻiga e masani lava ma faʻatinoina i le mataupu faavae e pei ona masani ona faia i totonu o se atinaʻe, na foliga mai o se mea manaia tele, e pei ona foliga mai ia te aʻu, faʻataʻitaʻiga o le olaga: o le aʻafiaga i le saoasaoa o le autu autu o le tusiga. e le iloa ona o mafaufauga i fafo: Moq, Autofac, EF Core ma isi "faʻapipiʻi".

Na amata ona ou galue i lalo o le lagona o lenei tusiga: Aisea ua tuai ai le Mafaufau

E pei ona mafai ona e vaʻaia, o loʻo fautuaina e le tusitala le faʻaaogaina o sui tuʻufaʻatasia nai lo le valaʻau saʻo o metotia ituaiga mafaufauga o se auala sili e faʻavave ai le talosaga. O loʻo i ai, ioe, IL emission, ae ou te manaʻo e aloese mai ai, talu ai o le auala sili lea ona galue malosi e faʻatino ai le galuega, lea e tumu i mea sese.

Mafaufau i loʻu i ai i taimi uma se manatu tutusa e uiga i le saoasaoa o mafaufauga, ou te leʻi faʻamoemoe faapitoa e fesiligia faaiuga a le tusitala.

E masani ona ou feagai ma le faʻaogaina faʻavalevalea o mafaufauga i le atinaʻe. Ua ave le ituaiga. Ua ave fa'amatalaga e uiga i le fanua. O le SetValue metotia ua valaʻau ma fiafia tagata uma. O le tau ua taunuu i le fanua faʻatatau, ua fiafia tagata uma. Tagata popoto tele - tagata matutua ma ta'ita'i au - tusi a latou fa'aopoopoga e fa'atatau, fa'avae i luga o se fa'ata'ita'iga fa'atauva'a "fa'asalalau" fa'afanua o le tasi ituaiga i le isi. O le aano e masani lava o lenei: matou te ave uma fanua, ave uma mea totino, faʻataʻitaʻi i luga: afai o igoa o le ituaiga sui e fetaui, matou te faia SetValue. Mai lea taimi i lea taimi matou te maua ai ni tuusaunoaga ona o mea sese na matou le maua ai ni meatotino i se tasi o ituaiga, ae e oʻo lava iinei o loʻo i ai se auala e alu ese ai e faʻaleleia ai le faʻatinoga. Taumafai/pu'e.

Ua ou va'ai tagata toe fa'afo'i fa'asoa fa'afanua ma fa'afanua e aunoa ma le fa'aauupegaina atoatoa i fa'amatalaga e uiga i le fa'aogaina o masini na muamua atu ia i latou. Ua ou vaai i tagata natia a latou faatinoga valea i tua o fuafuaga, i tua o fesoʻotaʻiga, tua o tui, e peiseai o le a faʻamaonia ai le bacchanalia mulimuli ane. Na liliu lo'u isu i na mea. O le mea moni, ou te leʻi fuaina le gaioiga moni o le gaioiga, ma, afai e mafai, na na ona ou suia le faʻatinoga i se sili atu "sili ona lelei" pe a mafai ona ou maua oʻu lima i luga. O le mea lea, o fua muamua o loʻo talanoaina i lalo na matua le mautonu ai aʻu.

Ou te manatu o le toʻatele o outou, faitau Richter poʻo isi tagata suʻesuʻe, ua latou mauaina se faʻamatalaga saʻo atoatoa e faʻapea o le mafaufau i le tulafono o se mea faʻapitoa e i ai se aafiaga sili ona leaga i le faʻatinoga o le talosaga.

O le vala'au o mafaufauga e fa'amalosia ai le CLR e alu i totonu o fa'apotopotoga e su'e le mea latou te mana'omia, toso i luga a latou metadata, va'ai, ma isi. E le gata i lea, o mafaufauga a'o fa'asolosolo fa'asologa e o'o atu ai i le tu'ufa'atasia o le tele o manatuaga. O lo'o matou fa'aogaina le manatua, fa'aalia e le CLR le GC ma amata ai le fa'a'ai. E tatau ona iloagofie telegese, talitonu mai ia te au. O le tele o manatuaga i luga o sapalai gaosiga faʻaonaponei poʻo masini ao e le taofia ai le tuai o gaioiga. O le mea moni, o le tele o le manatua, o le tele foi lea o le a e FA'AALIGA pe fa'afefea ona galue le GC. Mafaufauga, i le talitonuga, o se ieie mumu faaopoopo mo ia.

Ae ui i lea, matou te faʻaaogaina uma atigipusa IoC ma faʻafanua aso, o le faʻatonuga o loʻo faʻavae foi i luga o mafaufauga, ae e masani lava e leai ni fesili e uiga ia latou faʻatinoga. Leai, e le ona o le faʻaofiina o faʻalagolago ma faʻateʻaina mai faʻataʻitaʻiga faʻatapulaʻaina faʻataʻitaʻiga e matua manaʻomia e tatau ai ona tatou ositaulagaina le faʻatinoga i soʻo se tulaga. E faigofie mea uma - e matua le afaina ai le faʻatinoga.

O le mea moni, o faʻasalalauga sili ona taatele e faʻavae i luga o tekinolosi mafaufauga e faʻaaogaina ituaiga uma o togafiti e galulue faʻatasi ai ma le sili atu ona lelei. E masani lava o se cache lenei. E masani lava o Fa'aaliga ia ma sui na tu'ufa'atasia mai le la'au fa'amatalaga. O le masini lava lea e tasi o loʻo tausia se lomifefiloi faʻatauvaʻa e fetaui ma ituaiga ma galuega e mafai ona liua le tasi i le isi e aunoa ma le valaʻau o mafaufauga.

E faapefea ona ausia lenei mea? O le mea moni, e leai se eseʻesega lea mai le faʻaogaina o loʻo faʻaogaina e le faʻavae lava ia e gaosia ai le JIT code. Pe a valaauina se metotia mo le taimi muamua, e tuufaatasia (ma, ioe, o lenei faagasologa e le vave); i luga o valaau mulimuli ane, o le pulega e siitia atu i le auala ua uma ona tuufaatasia, ma o le a leai se faʻasologa taua o faʻatinoga.

I la matou tulaga, e mafai foʻi ona e faʻaogaina le JIT tuʻufaʻatasia ona faʻaaoga lea o le amio tuʻufaʻatasia ma le faʻatinoga tutusa e pei o ana paaga AOT. O faʻamatalaga o le a fesoasoani ia i matou i lenei tulaga.

O le mataupu faavae o loʻo fesiligia e mafai ona faʻapuupuu faʻapea:
E tatau ona e natia le fa'ai'uga mulimuli o mafaufauga o se sui o lo'o iai le galuega fa'aopoopo. E talafeagai foi le faʻaogaina o mea uma e manaʻomia ma faʻamatalaga faʻamatalaga i fanua o lau ituaiga, le tagata faigaluega, o loʻo teuina i fafo atu o mea.

E iai le fa'atatau i lenei mea. O le mafaufau masani e taʻu mai ia i tatou afai e mafai ona tuʻufaʻatasia ma faʻapipiʻi se mea, ona tatau lea ona fai.

I le vaʻai i luma, e tatau ona fai mai o le cache i le galue ma mafaufauga e iai ona lelei, e tusa lava pe e te le faʻaogaina le auala fuafuaina o le tuʻufaʻatasia o faʻamatalaga. O le mea moni, o lea o loʻo ou toe taʻuina atu faʻamatalaga a le tusitala o le tusiga lea ou te taʻua i luga.

O lenei e uiga i le code. Sei o tatou tilotilo i se faʻataʻitaʻiga e faʻavae i luga o loʻu tiga talu ai nei na tatau ona ou feagai i se gaosiga ogaoga o se faʻalapotopotoga faʻapitoa aitalafu. O fa'alapotopotoga uma e fa'afoliga ina ia leai se tasi e mateina.

E i ai se aano. Ia i ai Fesootaiga. O loʻo i ai mataitusi faʻatasi ai ma se tino faʻapitoa, lea e faia ai e le parser ma le hydrator nei lava fesoʻotaʻiga. Na taunuu mai se tusi, na matou faitau i ai, fa'avasegaina i ta'iga-taua, faia se feso'ota'iga, ma teu i totonu o le database.

E tulagalua. Fa'apea o se fa'afeso'ota'i o lo'o iai meatotino Igoa Atoa, Tausaga ma le Telefoni Fa'afeso'ota'i. O nei faʻamatalaga e tuʻuina atu i le tusi. E mana'omia fo'i e le pisinisi le lagolago ina ia mafai ona vave fa'aopoopo ki fou mo le fa'afanua o meatotino fa'apitoa i ta'ito'alua i le tino o le tusi. I le tulaga na faia ai e se tasi se typo i le mamanu pe afai aʻo leʻi tatalaina e tatau ona faʻanatinati faʻafanua mai se paaga fou, faʻafetaui i le faatulagaga fou. Ona mafai lea ona tatou faʻaopoopoina se faʻasologa fou o faʻafanua o se faʻamaumauga taugofie. O lona uiga, o se faataitaiga o le olaga.

Matou te faʻatinoina, faia suʻega. Galuega.

O le a ou le tuʻuina atu le code: e tele punaoa, ma o loʻo avanoa ile GitHub e ala ile fesoʻotaʻiga ile pito o le tusiga. E mafai ona e utaina, faʻasalaina i latou e le mafai ona iloa ma fuaina, e pei ona afaina ai lau mataupu. O le a ou tuʻuina atu naʻo le faʻailoga o auala faʻataʻitaʻi e lua e iloa ai le hydrator, lea e tatau ona vave, mai le hydrator, lea e tatau ona tuai.

O le fa'atatau e fa'apea: o le faiga fa'ata'ita'iga e maua ai paga fa'atupuina e le fa'ata'ita'iga fa'apolokalame. O le LINQ layer o le parser ma le faavae autu o le hydrator, lea e faia ai se talosaga i le database context ma faʻatusatusa ki ma paga mai le parser (mo nei galuega o loʻo i ai le code e aunoa ma le LINQ mo faʻatusatusaga). O le isi, o paga e tuʻuina atu i le auala autu o le faʻamamaina ma o tau o paga e faʻatulagaina i mea tutusa a le kamupani.

“Apogi” (Pfix Anapogi i fa'ailoga):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

E pei ona mafai ona tatou vaʻaia, o loʻo faʻaaogaina se faʻaputuga faʻatasi ma meatotino faʻapipiʻi - lambdas tuʻufaʻatasia e taʻua o le setter entity. Fausia e le code lea:

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action<Contact, string> GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

I se tulaga lautele e manino. Matou te sopoia meatotino, faia sui mo i latou e valaau seti, ma faasaoina i latou. Ona matou valaau lea pe a tatau ai.

“Lemu” (Prefix Lemu i fa'ailoga):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

O iinei tatou te vave pasia ai meatotino ma valaau saʻo SetValue.

Mo le manino ma le avea o se faʻamatalaga, na ou faʻatinoina se auala faʻavalevalea e tusi saʻo ai tulaga taua o latou paʻaga faʻatasi i totonu o fanua faʻalapotopotoga. Prefix – Tusitala.

Se'i o tatou ave le BenchmarkDotNet ma iloilo le faatinoga. Ma faʻafuaseʻi ... (spoiler - e le o le iʻuga saʻo lea, faʻamatalaga o loʻo i lalo)

Le manuia tala e uiga i le faatelevaveina o mafaufauga

O le a se mea o tatou vaaia iinei? O auala e manumalo ai i le Anapogi muamua e foliga mai e sili atu le lemu i le toetoe lava o pasi uma nai lo metotia ma le Slow prefix. E moni lenei mea mo le vaevaega ma le saoasaoa o galuega. I le isi itu, o se faʻatinoga matagofie ma le matagofie o faʻafanua e faʻaaoga ai metotia LINQ faʻamoemoe mo lenei mea i soʻo se mea e mafai ai, i se isi itu, e matua faʻaitiitia ai le gaosiga. O le eseesega o le faasologa. E le suia le tulaga i numera eseese o pasi. Pau lava le eseesega o le fua. Faatasi ai ma le LINQ e 4 - 200 taimi fa'agesegese, e tele atu lapisi ile fua tutusa.

Toefaafouina

Ou te leʻi talitonu i oʻu mata, ae o le mea e sili ona taua, e leʻi talitonu le matou uo i oʻu mata poʻo laʻu tulafono - Dmitry Tikhonov 0x1000000. I le faaluaina o le siakiina o laʻu fofo, na ia iloa lelei ma faailoa mai se mea sese na ou misia ona o le tele o suiga i le faatinoga, muamua i le faaiuga. Ina ua maeʻa ona faʻapipiʻi le pusa na maua i le seti Moq, na paʻu uma iʻuga. E tusa ai ma faʻaiʻuga toe suʻesuʻe, e le suia le tulaga autu - LINQ o loʻo aʻafia pea le faʻatinoga nai lo le mafaufau. Ae ui i lea, e manaia le galuega faʻatasi ma Expression e le faia fua, ma o le taunuuga o loʻo vaaia uma i le faʻasoaina ma le taimi o le faʻatinoga. O le faʻalauiloaina muamua, pe a faʻamataina fanua faʻapitoa, e masani ona faʻagesegese mo le auala "anapogi", ae suia le tulaga.

O le i'uga lea o le toe su'ega:

Le manuia tala e uiga i le faatelevaveina o mafaufauga

Fa'ai'uga: pe a fa'aaogaina mafaufauga i se atina'e, e leai se mana'oga fa'apitoa e fai togafiti - LINQ o le a 'ai atili le gaosiga. Ae ui i lea, i auala maualuga e manaʻomia ai le faʻaleleia atili, e mafai ona e faʻasaoina mafaufauga i le tulaga o faʻauluuluga ma tuʻufaʻatasiga tuʻufaʻatasia, lea o le a maua ai le manatu "vave". O le auala lea e mafai ai ona e faatumauina uma le fetuutuunai o mafaufauga ma le saoasaoa o le talosaga.

O lo'o maua le fa'ailoga fa'ailoga iinei. Soo se tasi e mafai ona toe siaki a'u upu:
HabraReflectionTests

PS: o le faʻailoga i suʻega e faʻaaoga ai le IoC, ma i faʻailoga e faʻaaogaina ai se faʻamatalaga manino. O le mea moni e faapea i le faʻatinoga mulimuli ou te tipi ese mea uma e ono aʻafia ai le faʻatinoga ma faʻalavelave ai le taunuuga.

PPS: Fa'afetai ile fa'aoga Dmitry Tikhonov @0x1000000 mo le mauaina o laʻu mea sese i le setiina o Moq, lea na aʻafia ai fua muamua. Afai ei ai se tasi o le au faitau e lava le karma, faʻamolemole fiafia i ai. Na tu le tamaloa, faitau le tamaloa, toe siaki e le tamaloa ma faʻasino le mea sese. Ou te manatu e tatau ona fa'aaloalo ma fa'aalofa.

PPPS: faʻafetai i le tagata faitau faʻapitoa na oʻo i le pito i lalo o le sitaili ma le mamanu. Ou te mo le tutusa ma le faigofie. O le tipiloma o le folasaga e tuua ai le tele o mea e manaʻomia, ae na ou amanaia le faitioga. Ou te talosaga atu mo le projectile.

puna: www.habr.com

Faaopoopo i ai se faamatalaga