ãã®èšäºã§ã¯ããŠãããŒãµã«ããŒã¿ã³ã³ããŒã¿ãŒã®äœæã«ãããããŒã ã®çµéšããäŒãããããšæããŸãã äžèŠç°¡åããã«èãããŸãããäœããããªã«è€éãªã®ã§ããããïŒ ããã¿ã€ãã®ããŒã¿ãå¥ã®ã¿ã€ãã«å°ããŸãã ããŒã¿ãæ§é äœã§ããå Žå ãŸãããã£ãŒã«ããããã³ã°ãå®è¡ããã ãã§ãé£ããã¯ãããŸããã ã¯ããç°¡åã§ãã ããããè€æ°ã®ã¿ãŒã²ããæ§é ãããå Žåããããã¯ãã¹ãŠè€éã§ãããå€æã¯ãªã³ã¶ãã©ã€ã§å¿
èŠã§ãããŸããããŒã¿ãå
å®ãããå Žåã§ãããèããªããã°ãªããªãããšèšãããŠããŸãã
ããŒã ã¯æ¬¡ã®ã¿ã¹ã¯ãæ
åœããŸããã
1ã€ã®æ§é ããè€æ°ã®ä»ã®ã¿ãŒã²ããæ§é ãžã®ããŒã¿ã³ã³ããŒã¿ãŒãèšè¿°ããŸãã ããã«ããœãŒã¹ããŒã¿ãšå®å
ããŒã¿ãä¿åãã圢åŒã¯å®å
šã«ä»»æã§ãã å€æã¯ãåå©çšããã³ç·šéã®å¯èœæ§ãããã«ãŒã«ã«åºã¥ããŠããå¿
èŠããããŸãã å€æããã»ã¹äžã«ãäžéšã®ããŒã¿ããã©ã³ã¹ã³ãŒãããå¿
èŠããããŸããããšãã°ãã¹ããªã³ã°ãïŒff0000ããã¹ããªã³ã°ãredãã«å€æããŸãã
ããã«ããåç¥ã®ããã«ããŠãŒã¶ãŒãèªã¿åãããã³ç·šéã§ããããã«ããããã¹ãŠã®çµ±åå€æãã€ãŸã éçºããæ©èœã¯ãç·šéæ©èœãåããUIã«éä¿¡ããå¿
èŠããããŸãã
ããã§ã¯å§ããŸãããã çè«çã«ã¯ãå
¥åããã³åºå圢åŒã¯ä»»æã®ã¿ã€ãïŒcsvãjsonãªã©ïŒã«ã§ããŸãã æ確ã«ããããã«ãXML圢åŒãéžæããŸãã
XMLãœãŒã¹ã®äŸã¯ãå€æFROMãã§ãã
<Car> <Color>#ff0000</Color> <Length>5296 cm<Length> <Width>1848 cm</Width> <Price>31000 USD</Price> </Car>
XMLå®å ã®äŸã¯ãå€æå ãã§ãã
<Vehicle> <Body> <Exterior> <Color>red</Color> </Exterior> <Size> <MeasureUnit>ft</measureUnit> <Length>17.3753</Length> <Width>6.0630</Width> </Size> </Body> <Msrp> <Currency>RUB</Currency> <Value>1600000</Value> </Msrp> </Vehicle>
ã芧ã®ããã«ãéäžã§åèšç®ãšå€æãçºçããŸããæ§é å ã®å€ã®é 眮ãå€ããã ãã§ãªãããã®ã¿ã€ããèšç®ãããå€ãããããœãŒã¹ããŒã¿ã«ã¯æçµåœ¢åŒãžã®æ£åžžãªå€æã«å¿ èŠãªãã¹ãŠã®ããŒã¿ããããŸããïŒåŒ·åãå¿ èŠã§ãïŒã ããã€ããªã¹ãããŸãã
- ãœãŒã¹ã®Car.Colorè»ã®è²ã¯RBGââã³ãŒããïŒff0000ããšããŠè¡šç€ºãããå®å ã§ã¯ãVehicle.Body.Exterior.Colorã¿ã°ã®ãredãã®é³å£°è§£éã«å€æããå¿ èŠããããŸãã
- Car.Lenghtè»ã®é·ãã¯ãããã€ãã®ã³ã³ããŒãã³ãã枬å®å€ãšæž¬å®åäœã«è§£æ±ºãããã¢ã¡ãªã«ã®è¶³ã«å€æãããå¿ èŠããããŸããçµæã®å€ã¯Vehicle.Size.Lengthã«å ¥ããããŸãã
- Car.Priceè»ã®äŸ¡æ Œããã®ã³ã³ããŒãã³ãã«è§£æ±ºãããVehicle.Msrpã«å ¥ããããå€ææ¥ã«ã«ãŒãã«åäœã§äžå€®éè¡ã¬ãŒãã§å€æãããªããã°ãªããŸããã
ããŒã¿ã¢ã¯ã»ã¹çšã®ã³ã³ããã®éžæ
次ã®ããã«ãXML圢åŒãçŽæ¥æäœããããšã¯ã§ããŸããã 第äžã«ãããã¯ããã¹ãã§ããã第äºã«ããã©ãŒãããã«æ·»ä»ãããªããšããèŠä»¶ããããŸãã ãã®å Žåãã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªå
ã®ã³ã³ãããŒãªããžã§ã¯ããæäœããããšã¯è«ççã§ããã³ã³ãããŒãªããžã§ã¯ãã«ã¯ãããŒã¿ã«ã¢ã¯ã»ã¹ããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ã€ã¹ããããããŒãã«ãªã³ã¯ããããã®æ§é åããããŸãã
ãã®ãããæ§é ãã¹ãã¬ãŒãžã®ããŒã¿ãšæ£ç¢ºã«äžèŽããéåžžã®CïŒã¯ã©ã¹ãæé©ã§ãã XMLãå
¥åãããXSDã¹ããŒããå©çšå¯èœãªå Žåããã®ã¯ã©ã¹ã®äœæã¯å€§å¹
ã«ç°¡çŽ åãããŸãã ãŠãŒãã£ãªãã£ã䜿çšãããšãã¯ã©ã¹ãèªåçã«ã³ã³ãã€ã«ããäžå¿
èŠãªåŽåãªãã§ã³ãŒãã§äœ¿çšã§ããŸãã
以äžã«ãæ§é ã®ã¯ã©ã¹ã«ã€ããŠèª¬æããŸãã
CïŒã³ã³ãããŒã³ã³ãããŒã¯ã©ã¹ïŒ
public class Car { public string Color; public string Length; public string Width; public string Price; }
CïŒå®å ã³ã³ããã¯ã©ã¹ïŒ
public class Vehicle { public Body Body; public Msrp Msrp; } public class Body { public Exterior Exterior; public Size Size; } public class Msrp { public string Currency; public decimal Value; } public class Exterior { public string Color; } public class Size { public string MeasureUnit; public decimal Length; public decimal Width; }
ãœãŒã¹ããŒã¿ãã³ã³ããã«ããŒããã
.Net Frameworkã«ã¯ãXMLããŒã¿ã®éã·ãªã¢ã«åãå®è¡ããæ¢è£œã®ã³ã³ããŒãã³ããããããã®å©ãã«ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ãœãŒã¹ããŒã¿ãèªåçã«å
¥åãããŸãã
ãã¡ã€ã«ãããå
·äœçãªåœ¢åŒã§ããå ŽåãããŒã¿ãããŒãããããã®ã«ã¹ã¿ã ã©ã€ãã©ãªãèšè¿°ããããšã¯é£ãããããŸããã
ã³ã³ããããŒã¿ãžã®ã¢ã¯ã»ã¹
æåã«åŠç¿ããå¿
èŠãããã®ã¯ãä»»æã®æ§é ãæã€ã³ã³ããããŒã¿ã«ã¢ã¯ã»ã¹ããåäžã®æ¹æ³ãæã€ããšã§ãã ããªãã¡ ã³ã³ããã®ã¡ã¿ããŒã¿ã«ã¢ã¯ã»ã¹ããå¿
èŠããããŸãã ããã¯ã.Netãªãã¬ã¯ã·ã§ã³ã«ãã£ãŠè§£æ±ºãããŸãã ã¯ã©ã¹ã®ä»»æã®ããããã£ãŸãã¯ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããå€æŽå¯èœãªããŒã¿ã®ã¿ã€ããšå Žæãç¥ãããšãã§ããŸãã
æ§é èŠçŽ ïŒããŒãïŒãçŽæ¥ç€ºãããã«ãXMLã®XPathã¢ãããžãŒã䜿çšããŸãã ããšãã°ããœãŒã¹ã§å¿
èŠãªããŒããæå®ããã«ã¯ããCar.Colorããšããè¡ãæå®ããã ãã§ãã
ãœãŒã¹ã³ã³ãããŒããŒã¿ãå®å ã³ã³ãããŒã«å€æããããã®ã«ãŒã«
ãããã£ãŠã2ã€ã®ã³ã³ããããããã©ã¡ããæ§é åãããã¢ãŒããã¯ãã£ãæã£ãŠããŸãã 次ã«ããœãŒã¹ã³ã³ãããŒããå®å
ã³ã³ãããŒã«å€æããæ¹æ³ãåŠç¿ããå¿
èŠããããŸãã
åé¡ã®ã¹ããŒãã¡ã³ãã§ç€ºãããŠããããã«ãå€æã¯äžé£ã®ã«ãŒã«ã«åºã¥ããŠããå¿
èŠããããŸãã ã«ãŒã«ã¯ãåå©çšã§ããããã«æ®éçã§ãªããã°ãªããŸããã
次ã®çžäºäœçšã¹ããŒã ã¯ã³ãŒãã«é ããŠããŸãïŒäžå³ãåç
§ïŒïŒããŒã¿ã¯XMLãã.Netãªããžã§ã¯ãã«ã·ãªã¢ã«åããïŒ1-2ïŒããã®åŸã³ã³ãããŒããŒã¿ã«ã¢ã¯ã»ã¹ããããšã«ããïŒ2ïŒãå€æã¯ã«ãŒã«ã®ãªã¹ãïŒ3ïŒããå®å
ã³ã³ãããŒïŒ2ïŒã«é²ã¿ãŸã-3-4ïŒã ããã«ãã«ãŒã«ã«ã¯ããŒã¿ãå
å®ãããæ©èœããããŸãïŒ3-3'-3ïŒã å®å
ã³ã³ãããåæåãããåŸãããŒã¿ã¯æçµåœ¢åŒïŒ4-5ïŒã«ã¢ããããŒããããŸãã
ã¹ããŒã 1.ã³ã³ããŒã¿ãŒå ã®ã³ã³ããŒãã³ãã®çžäºäœçšã®ã¹ããŒã ïŒ
次ã«ãã«ãŒã«ã䜿çšããŠå€æã¡ã«ããºã ãéçºããŸãã 圌ãã®å©ããåããŠãç§ãã¡ã¯ãããã転æã説æã§ããªããã°ãªããŸããã
æ°ããã«ãŒã«èšèªãäœæãããã®èšèªçšã«å¥ã®ã³ã³ãã€ã©ãŸãã¯ã€ã³ã¿ãŒããªã¿ãŒãå®è£
ããããšã¯ãæããã«äžèŠã§ãã åžžã«ã³ã³ãã€ã«ããŠæ¢åã®æ©èœã«æ¥ç¶ã§ããéåžžã®CïŒã³ãŒãã䜿çšããããšã«ããŸããã ããã€ãã®CïŒã€ã³ã¿ãŒãã§ã€ã¹ãšåºæ¬ã¯ã©ã¹ãéçºãããŸããã
ã³ã³ããŒã¿ãŒèªäœïŒ
public interface IConverter { T Convert<T>(Object source, IDictionary<string, ConversionRule> rules) where T : class, new(); ... }
ãã«ãŒã«ãªã¹ãã¯IDictionary <stringãConversionRule>ã§ãæååããŒã¯å®å ã³ã³ãããŒã®ããŒã¿ãžã®ãã¹ã§ãïŒäŸïŒ "Vehicle.Msrp"ïŒ
ãããŠãå€æã«ãŒã«ïŒ
public abstract class ConversionRule { public abstract object GetValue(object source); ... }
ã³ã³ããŒã¿ã®ã¿ã¹ã¯ã¯ãã«ãŒã«ã®ãªã¹ãã«åŸã£ãŠãæå®ããããœãŒã¹ãªããžã§ã¯ãsourceãã¿ã€ãTã®æ°ãããªããžã§ã¯ãã«å€æããããšã§ãã
ããœãŒã¹ãããå®å
ãã«å€æãããšããã³ã³ããŒã¿ãŒã¯æ¬¡ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
- ã¿ã€ãTïŒå®å ã³ã³ããã¿ã€ãïŒã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸã
- ã¿ã€ãTïŒå®å ã³ã³ããïŒã®ã¿ãŒã²ãããªããžã§ã¯ãã®åãã£ãŒã«ããšããããã£ãååž°çã«å®è¡ãã察å¿ããå€æã«ãŒã«ãæ€çŽ¢ããåæåïŒã«ãŒã«ã«åºã¥ããŠèšç®ãããå€ã®å²ãåœãŠïŒãå®è¡ããŸãã ã«ãŒã«ã¯èŠã€ãããŸããããããŒãã¯ç©ºã®ãŸãŸã§ãã
åã«ãŒã«ã«ã¯ãå
¥åã³ã³ãããŒãœãŒã¹ãªããžã§ã¯ããå
¥åã«æž¡ãããŸãã ã«ãŒã«ã¯èšç®ãå®è¡ããçµæã®å€ãè¿ãå¿
èŠããããŸãã äŸãããããããã«ãå€æã«ãŒã«ã«ã¯å³å¯ãªåæå®ã¯ãããŸããããªããžã§ã¯ããå
¥åã«æž¡ãããšãã§ããåºåã§ã¯ãªããžã§ã¯ããååŸã§ããŸãã
Car.Priceãè»ã®äŸ¡æ ŒãååŸãããããã³ã³ããŒãã³ãã«è§£æããäžå€®éè¡ã®ã¬ãŒãã§ã«ãŒãã«ïŒå€ææ¥ïŒã§åèšç®ããã¿ãŒã²ããã³ã³ãããŒã®Vehicle.Msrpã«å€ãæžã蟌ããšããã«ãŒã«ã®äŸãèããŸãã
以äžã¯ãå€æã«ãŒã«ã®èšå®è¡šã§ãã
å®å ã®å®å ããŒã | å€æã«ãŒã«ïŒã¢ã»ã³ããªå ã®ã¯ã©ã¹ïŒ | å€æã«ãŒã«ã®ãã©ã¡ãŒã¿ãŒ |
---|---|---|
Vehicle.Msrp | ConvertStringPriceToMsrp | TargetCurrency =â RUBâãSourcePath =â Car.Priceâ |
ã«ã¹ã¿ã å€æã«ãŒã«ã¯ã©ã¹ã®äŸïŒ
public class ConvertStringPriceToMsrp: ConvertionRule { public string TargetCurrency; public string SourcePath; public override object GetValue(object source) { var targetObject = new Msrp(); targetObject.Currency = TargetCurrency; targetObject.Value = SplitAndCalc(GetFiled(source(), SourcePath, TargetCurrency); return targetObject; } ... }
ã«ãŒã«ãéå§ããåã«ããªãã¬ã¯ã·ã§ã³ãä»ããŠãã£ãŒã«ããšããããã£ããœãŒãããæ§æããåãå€ã®TargetCurrencyãSourcePathïŒã«ãŒã«ã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã¡ãŒã¿ãŒã®ã»ããïŒãå
¥åããããšã§åæåãããŸãã
ãã®ã«ãŒã«ãåŠçããConvertStringPriceToMsrpãªããžã§ã¯ãã¯ãCar.PriceãœãŒã¹ã³ã³ãããŒã®ãã£ãŒã«ãã®å€ãååŸããæååãäŸ¡æ Œãšé貚ã®ã³ã³ããŒãã³ãã«åå²ããMsrp.Curreny = RUBããã³Msrp.Value = [ã«ãŒãã«ã®äŸ¡æ Œ]ãã£ãŒã«ããåããŠãçµæã®Msrpãªããžã§ã¯ããäœæããŸãã
説æãããããããã«ãã«ãŒã«ã¯çŸåšã®ã«ãŒãã«ãããã«ãžã®çºæ¿ã¬ãŒããååŸããããã«ããŸã å€éšããŒã¿ãœãŒã¹ã«é£çµ¡ããå¿
èŠããããŸãã ããªãã¡ å€æã«ãŒã«ã¯ãä»»æã®å€éšããŒã¿ãœãŒã¹ã«æ¥ç¶ããŠãããŒã¿ã匷åã§ããŸãã
ã³ã³ããããå®å ããŒã¿ãã¢ã³ããŒãããŸã
ããŒã¿ã¯ããªããžã§ã¯ããã·ãªã¢ã«åããããšã«ãããæ¢è£œã®.Net Frameworkã©ã€ãã©ãªã«ãã£ãŠãåãæ¹æ³ã§XMLã®ã¿ãŒã²ãããªããžã§ã¯ãããã¢ã³ããŒããããŸãã ã³ã³ããŒãã³ãã¯ãã¯ã©ã¹ã®ãã£ãŒã«ããšããããã£ã®ããŒã¿ãXMLæ§é ã«ãã¡ããšçµåããŸãã
å®å ãã¡ã€ã«ãç¹å®ã®å Žåã¯ãã¢ããã¿ãŒãäœæããå¿ èŠããããŸããã¢ããã¿ãŒã¯ãå®å ã³ã³ãããŒãç®çã®åœ¢åŒã§ä¿åããŸãã
çŸåŸ³ãšææŠã®æå¹ãªãããã¿ã€ã
ãµãŒãã¹åç §ã©ã€ãã©ãªã®èªåèªã¿èŸŒã¿ïŒããŒã¿ã®åŒ·åãåå©çšå¯èœãªåç §ããã¯ïŒã®ããã«ãIoC Autofacãå®è£ ããŸããã ãããã£ãŠã倧éã®åçš®ããŒã¿ãå€æãããšãã«ãI / Oã®éå°ãªè² è·ã®åé¡ã解決ããåŠçãå éããŸããã
ã¿ãŒã²ãããžã®å€æã¯ãäžèŠãªãµã€ã¯ã«ãªãã§åäžãã¹ã§çºçããŸãã
ååž°æ§ããããããããŒãã®å€ããªãã·ã§ã³ã§ãéžæãããã«çœ®ãæããããšãã§ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã¿ã°ã®æ§é ãå¥ã®ã¿ã°ã«äŸåããŠããå ŽåïŒããšãã°ã補åã®ã¿ã€ãã«ãã£ãŠç°ãªãã¿ã°ãå
¥åããã-Amazon APIã§XMLãçæãããšãã«ãããç©æ¥µçã«äœ¿çšããŸãïŒãXMLã«éåžžã«åœ¹ç«ã¡ãŸãã
åæã«ãã¡ã¿ããŒã¿ã䜿çšãããã¹ãŠã®äœæ¥ã¯ãªãã¬ã¯ã·ã§ã³ã«åºã¥ããŠãããå°æ¥çã«ã¯é床ã®åé¡ãçºçããå¯èœæ§ããããŸãã ãã®åé¡ã¯ãåå°çèšç®ã®é 延ãã³ã³ããŒã¿ãŒã®ã«ãŒã«å ã®é«éèšç®ã§ç§ãã¡ãæ¯é ãããšãã«æããã«ãªããŸãã çŸæç¹ã§ã¯ããã®ãããªåé¡ã¯ãŸã çºè¡šãããŠããŸããã ãã ãã衚瀺ãããå Žåãã€ãŸããå®å ã³ã³ããã®ã¿ã€ãããããåŠçã§ãã£ãã·ã¥ãããšããèãæ¹ã§ãã
ãŠãŒã¶ãŒãèšå®ããã°ããå€æŽã§ããããã«ããã¹ãŠã®ã«ãŒã«èšå®ãWebã€ã³ã¿ãŒãã§ã€ã¹ã«å¯ŸããŠè¡ããŸããã å€æèšå®ã¯æåã¯XMLã§ä¿åãããŠããŸããããç·šéãç°¡åã«ããããã«ãããŒã¿ããŒã¹ã«è»¢éããããšã«ããŸããã
ãã¹ãŠã®é·æãšçæããããªãããç®çã®ã.Net Frameworkã«åºã¥ããŠãããŒãµã«ããŒã¿ã³ã³ããŒã¿ãŒããåŸãããŸããã çŸåšã圌ã¯ã¢ããŸã³ããŠã©ãŒã«ããŒãããã®ä»ã®ãã¬ãŒãã£ã³ã°ããã¢ã§ååãå ¬éããããã®ã¢ãžã¥ãŒã«ã«ç©æ¥µçã«åãçµãã§ãããããŒã¿ã®ç¶ç¶çãªãããã³ã°ãå€æãããã³åŒ·åãå¿ èŠã§ãã