Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
StarcounterºÍORM&DDD±È½Ï
 
×÷ÕßKostiantyn Cherniavskyi À´Ô´£ºinfoq ·¢²¼ÓÚ 2016-11-3
  2234  次浏览      28
 

±¾ÎÄÒªµã

1.ÓÉÓÚ¶ÔÏó-¹ØÏµ×迹ʧÅ䣬´«Í³µÄN²ãÉè¼Æ»áÒý·¢ÎÊÌ⣻

2.ÐÞ¸´ORMºÍÊý¾Ý¿âÎÊÌâµÄ×î¼Ñ·½Ê½ÊÇÒÆ³ýÄÇЩ²ã£»

3.·ÃÎÊÊý¾Ý¿â¶ÔÏó¿ÉÒԺͷÃÎÊÆÕͨµÄ.NETÀàÒ»Ñù¼òµ¥£»

4.ûÓд«Í³ÏÞÖÆµÄÊý¾Ý¿â¿ÉÒÔÌṩÉè¼Æ×ÔÓÉ£»

5.ÀàËÆStarcounterÕâÑùµÄ»ìºÏÊý¾Ý¿âÈÃÕâÒ»µã³ÉΪ¿ÉÄÜ¡£

±¾ÎĽ«Öصã½éÉܵ±Ç°¹©Èí¼þ¿ª·¢ÈËÔ±ºÍ¶ÀÁ¢Èí¼þ¹©Ó¦ÉÌʹÓõÄMVC¿ò¼ÜËù´æÔÚµÄһЩÎÊÌ⣬ȻºóÀûÓÃÄÚ´æÄÚÓ¦ÓóÌÐòÒýÇæStarcounterÌṩÁ˽â¾ö·½°¸¡£ÎªÁ˾¡¿ÉÄܵØÕæÊµ£¬¼¸¸öÔ´ÓÚʵ¼ÊÏîÄ¿µÄÀý×ÓʹÓÃÁËASP.NET+Entity Framework£¨Êý¾Ý¿âÓÅÏȺʹúÂëÓÅÏÈ£©£¬²¢ÒÔMS-SQL Server»òMySQL×÷ΪÊý¾Ý¿âÒýÇæ¡£±¾ÎÄĩβÓÐÒ»¸ö¼òµ¥µÄÈëÃÅÏîÄ¿£¬²»Òª¶Á¹ý¾ÍÍêÁË£¬»¹ÒªÇ××Ô²âÊÔһϡ£

ÔÚ¿ª·¢ÒµÎñÓ¦ÓóÌÐòʱ£¬Äã»á·¢ÏÖ£¬¼¸ºõÿ¸öÓ¦ÓóÌÐò¶¼ÐèÒªÒ»ÖÂÐÔ¹ÜÀí¼°ÔÚ¶à¸ö²¢·¢Óû§Ö®¼ä¹²ÏíÊý¾Ý¡£Í¨³££¬¸Ã¹¦ÄÜÊÇÓÉÊý¾Ý¿â¹ÜÀíϵͳ£¨DBMS£©ÌṩµÄ¡£ÔçÔÚ70Äê´ú³õ£¬´ó²¿·ÖDBMS¾ÍʵÏÖÁ˱ê×¼Êý¾Ý²Ù×÷ÓïÑÔSQL¡£ÓÚÊÇ£¬Èí¼þ¿ª·¢ÈËÔ±ÐèÒª¸ù¾Ýÿ¸öϵͳµÄÓÅȱµãÑ¡ÔñÒ»ÖÖÊý¾Ý´æ´¢·½·¨¡£È»¶ø£¬ËùÓеÄÓ¦ÓóÌÐò²î²»¶à¶¼²ÉÓÃÁËͬÑùµÄÉè¼Æ£ºÓ¦ÓóÌÐòÂß¼­ÔÚÕâÀÊý¾Ý¿âÔÚÄÇÀï¡£

1.ORM

SQLÊý¾Ý¿âÒýÇæ°´ÕÕ±í¡¢ÁкÍÐÐÀ´²Ù×÷Êý¾Ý¡£Ê¹ÓÃÈÎÒâOOPÓïÑÔ±àдµÄÓ¦ÓóÌÐòÔò°´ÕÕÀà¡¢ÊôÐÔºÍʵÀýÀ´²Ù×÷Êý¾Ý¡£

ÕâÖÖʧÅä»áµ¼ÖÂÓ¦ÓóÌÐòºÍÊý¾Ý¿âÖ®¼äµÄͨÐŲã²úÉú´óÁ¿µÄÈßÓà´úÂ롣ΪÁ˼õÉÙÈßÓà´úÂë¡¢BugºÍ¿ª·¢Ê±¼ä£¬ORM¿â£¨¶ÔÏó¹ØÏµÓ³É䣩±»·¢Ã÷³öÀ´¡£

ORMÔÚÓ¦ÓóÌÐòºÍÊý¾Ý¿âÖ®¼äÓÖ¼ÓÁËÒ»²ã¡£ORM³äµ±ÁË±í¡¢ÁС¢ÐкÍÀà¡¢ÊôÐÔ¡¢ÊµÀý¸ÅÄîÖ®¼äµÄ·­Òë¡£

ORMsÖ¼ÔÚ£º

1.1. ÒÆ³ýÓ¦ÓóÌÐòÖеÄËùÓÐSQL´úÂ룻

1.2. Ϊ·ÃÎÊÊý¾Ý¿â±íÌṩºÍ·ÃÎÊÆÕͨµÄÓ¦ÓóÌÐòÀàÒ»ÑùµÄ·½Ê½£»

1.3. Ϊ²»ÐÞ¸ÄÓ¦ÓóÌÐò´úÂëÇл»Êý¾Ý¿âÒýÇæÌṩ¿ÉÄÜ¡£

Õâ¿ÉÄÜÌýÉÏÈ¥ºÜºÃ£¬µ«Òź¶µÄÊÇ£¬Ã»ÓÐÕâÑùµÄºÃÊ¡£ÏÂÃæÊǵ±Ç°Ê¹ÓÃORMµÄʵ¼ÊÇé¿ö£º

1.1. ¼õÉÙÓ¦ÓóÌÐòÖеÄSQL´úÂ룻

1.2. Ϊ·ÃÎÊÊý¾Ý¿â±íÌṩºÍ·ÃÎÊÆÕͨµÄÓ¦ÓóÌÐòÀàÀàËÆµÄ·½Ê½£»

1.3. ΪÉÙÐÞ¸ÄÓ¦ÓóÌÐò´úÂëÇл»Êý¾Ý¿âÒýÇæÌṩ¿ÉÄÜ¡£

³öÏÖÕâÖÖÇé¿ö²»ÊÇÒòΪORM²»ºÃ£¬¶øÊÇÒòΪÊý¾Ý¿âÒýÇæµÄ¼Ü¹¹¡£ÈÃÎÒÃÇ¿´Ï¾¿¾¹ÊÇʲôÏÞÖÆÁËORM¡£

1.1. ÒÆ³ýÓ¦ÓóÌÐòÖеÄËùÓÐSQL´úÂë

ÔÚÈκÎSQLÊý¾Ý¿âÒýÇæÖУ¬SQL²éѯ¶¼ÊÇΨһµÄÊý¾Ý²Ù×÷·½Ê½¡£ORMÓ¦¸Ã½«±íÀàʵÀýÉϵÄÿ¸ö¶¯×÷ת»»³ÉSQL²éѯ£¬²¢ÔÚÊý¾Ý¿âÀïÔËÐС£

ORMÉв»¹»ÖÇÄÜ£¬ÎÞ·¨Ñ¡Ôñ×îºÃµÄSQLÓï·¨¡£´óÐ͸´ÔÓ²éѯ»¹ÊÇÓ¦¸ÃÓÉ¿ª·¢ÈËÔ±ÀûÓÃ×Ô¼ºµÄSQL֪ʶÀ´±àд¡£

ÓÐЩ¶¯×÷£¬Èç´¥·¢Æ÷£¬Ö»ÄÜÔÚÊý¾Ý¿âÒýÇæÄÚÖ´ÐУ¬¶ø¸ÃÒýÇæÖ»Ö§³ÖSQL¡£

1.2. Ϊ·ÃÎÊÊý¾Ý¿â±íÌṩºÍ·ÃÎÊÆÕͨµÄÓ¦ÓóÌÐòÀàÒ»ÑùµÄ·½Ê½

ÀàʵÀýµÄÊôÐÔÖµºÍʵÀý±¾Éí¶¼±£´æÔÚÄÚ´æÖС£±íÀàµÄÊôÐÔÖµ±£´æÔÚÊý¾Ý¿âÒýÇæÖУ¬¿ÉÄÜÊÇHDD»òÄÚ´æµÄÁíÒ»²¿·Ö¡£ÎªÁË·ÃÎʱíÀàʵÀý£¬ÎÒÃDZØÐ뽫ËùÓеÄÊôÐÔÖµÒ»Æð¼ÓÔØ£¬»òÕß°´Ðè¼ÓÔØÃ¿¸öÊôÐÔ£¨ÑÓ³Ù¼ÓÔØ£©¡£ÕâÁ½ÖÖ·½·¨¶¼¿ÉÄܻᵼÖÂÐÔÄÜÎÊÌâ¡£

ÔÚ·ÃÎʱíÀàµÄʵÀýʱ£¬¿ª·¢ÈËÔ±Ó¦¸ÃÀμÇÊý¾Ý¿âµÄÏÞÖÆ¡£

ÎÒÃǶ¼ÖªµÀ¡°¼ÆËãÊôÐÔ£¨calculated properties£©¡±ÓжàÖØÒª£¬µ«Òź¶µÄÊÇ£¬ORM²»Ö§³Ö¡£ÀýÈ磬¿¼ÂÇÏÂÏÂÃæµÄÀàºÍ²éѯ£º

public class OrderItem {
public int Quantity;
public decimal Price;
public decimal Amount {
return this.Price * this.Quantity;
}
}

var items = db.OrderItems.Where(x => x.Amount > 1000);

Where²éѯ»á±»×ª»»³ÉSQL£¬È»ºóʧ°Ü£¬ÒòΪÊý¾Ý¿âûÓÐÌṩAmountÊôÐÔ¡£

1.3. Ϊ²»ÐÞ¸ÄÓ¦ÓóÌÐò´úÂëÇл»Êý¾Ý¿âÒýÇæÌṩ¿ÉÄÜ

ÓÐÐíÐí¶à¶à²»Í¬µÄÊý¾Ý¿âÒýÇæ£¬Ã¿Ò»ÖÖ¶¼ÓÐ×Ô¼º¶ÀÒ»ÎÞ¶þµÄÌØÐÔ¡¢ÓŵãºÍ²»×ã¡£Èç¹û²»¼ì²é²¢ÖØÐ´Ó¦ÓóÌÐòijЩ²¿·ÖµÄ´úÂ룬¾Í²»¿ÉÄÜÇл»Êý¾Ý¿âÒýÇæ¡£ÉÏÒ»¸öÒýÇæµÄ¶ÀÌØÌØÐÔ±ØÐëɾ³ý¡£

³¢ÊÔ½«Ò»¸öÏîÄ¿´ÓMS-SQLÇ¨ÒÆµ½MySQL£¬´ÓMS-SQLÇ¨ÒÆµ½MS-SQL CE£¬»òÕß·´¹ýÀ´£¬Äã¾ÍÁ˽âËùÃæÁÙµÄÌôÕ½ÁË£º²»Í¬µÄÊý¾ÝÀàÐÍ£¬²»Í¬µÄ¡°Ìø¹ýNÐС±ºÍ¡°È¡Ç°NÐС±ÊµÏÖ¡¢²»Í¬µÄ×Ó²éѯ¡¢ÊÓͼ¡¢´æ´¢¹ý³ÌʵÏÖºÍÏÞÖÆ¡£

2. ÁìÓòÇý¶¯Éè¼Æ£¨DDD£©

½«ÒµÎñÓ¦ÓóÌÐò·Ö³ÉÁ½²¿·Ö£¨Ó¦ÓúÍÊý¾Ý¿â£©»áµ¼ÖÂÒ»Ð©ÖØ´óÎÊÌ⡣ΪÁ˽â¾öÄÇЩÎÊÌ⣬ÁìÓòÇý¶¯Éè¼Æ±»·¢Ã÷³öÀ´¡£

ÏÂÃæÁгöÁËDDDÖ¼ÔÚ½â¾öµÄ²¿·ÖÎÊÌ⣺

2.1. ÏîÄ¿ÖÐÏàͬµÄ¹¦ÄÜ£¬ÆäʵÏÖ·½Ê½Ïàͬ»òÕßÔÚ²»Í¬µÄµØ·½²»Í¬£»

2.2. ͬһ¸öÏîÓв»Ö¹Ò»¸ö¶ÔÏó£»

2.3. ÓеĶÔÏóµÄÊôÐÔʵ¼ÊÉϲ»ÊÇÄǸö¶ÔÏóµÄ»ù±¾ÊôÐÔ£»

2.4. Ïà¹ØÏîÖ®¼äÓÐÒ»¸öÔã¸âµÄ¹ØÏµ£»

2.5. ÎÞ·¨Í¨¹ý²é¿´¶ÔÏóÁ˽âÕû¸öÓ¦Óá£

ÕâÀïÓÐһƪ½éÉÜDDDµÄÎÄÕ£ºÁìÓòÇý¶¯Éè¼Æ¡ª¡ª¿ªÊ¼Ö®Ç°ÏÈÃ÷ȷ˼Ïë¡£

ÏÖÔÚ£¬ÎÒÃǽ«Ïêϸ½éÉÜÉÏÃæÁгöµÄÿһÌõÄÚÈÝ£¬Àí½â϶¼ÊÇʲôÇé¿ö¡£

2.1. ÏîÄ¿ÖÐÏàͬµÄ¹¦ÄÜ£¬ÆäʵÏÖ·½Ê½Ïàͬ»òÕßÔÚ²»Í¬µÄµØ·½²»Í¬

Õâ¸öÎÊÌâµÄÔ­ÒòÎÞÒÉÊÇÓ¦Óñ»·Ö³ÉÁ˲»Í¬µÄ²¿·Ö¡£ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£º

Óиö¹ºÎï³µ£¬ÀïÃæÓÐһЩÎïÆ·¡£ÏÂÃæÊÇÁ½¸ö³¡¾°¡£

a£©Óû§Ïò¹ºÎï³µÌí¼Ó»ò´Ó¹ºÎﳵɾ³ýÒ»¸öÎïÆ·¡£×ܼۻáÔÚÓû§±£´æÐÞ¸Ä֮ǰ×Ô¶¯¼ÆËã¡£Õâ¸ö¼ÆËãÊÇÓÉÓ¦ÓóÌÐòÍê³É¡£

b£©¹ÜÀíÔ±°´ÕÕ×ܼÛ˳ÐòÁгöÁËËùÓйºÎï³µ¡£×ܼÛÊÇÓÉÊý¾Ý¿â¼ÆËãµÄ¡£

´ó¶àÊý¿ª·¢ÈËÔ±»áÇãÏòÓÚÔÚ¹ºÎï³µÖÐÌí¼ÓÒ»¸öTotalAmountÊôÐÔ¡£Ò»µ©¹ºÎï³µÀïµÄÎïÆ··¢ÉúÁ˱仯£¬TotalAmountÊôÐԾͻá¸üС£Õâ½â¾öÁ˵ÚÒ»¸öÎÊÌ⣬µ«µ¼ÖÂÁËÉÏÃæÁгöµÄµÚÈý¸öÎÊÌâ¡£

2.2. ͬһ¸öÏîÓв»Ö¹Ò»¸ö¶ÔÏó

Ó¦ÓóÌÐòºÍÊý¾Ý¿âÖ®¼äµÄͨÐÅËÙ¶ÈÊÇ×î´óµÄÐÔÄÜȱÏÝÖ®Ò»¡£ÎªÁ˼õÉÙ´«ÊäµÄÊý¾ÝÁ¿£¬ÓÐЩ´ó±í¿ÉÄÜ»áÓÐÁ½¸ö»òÁ½¸öÒÔÉϵÄORMÀà¡£

Ò»¸ö¼òµ¥µÄÀý×Ó£¬ÏÂ±í£º

CREATE TABLE Cars (
ID int,
Driver varchar,
PlateNumber varchar,
Brand varchar,
Model varchar,
Kit varchar,
Color varchar,
Engine decimal,
Travelled int,
Year int,
Cost decimal,
FuelConsumption decimal
)

¿ÉÄÜ»á²úÉúÁ½¸ö³¡¾°£º

a£©ÏÔʾËùÓÐÆû³µµÄÁÐ±í¡ª¡ªÐèÒªËùÓÐ×ֶΣ»

b£©ÔÚÒ»¸ö×Ô¶¯Íê³É×Ö¶ÎÖÐÏÔʾÆû³µÁÐ±í¡ª¡ªÖ»ÐèÒªID¡¢DriverºÍPlateNumberÖµ¡£

Èç¹ûÕâÁ½ÖÖÇé¿öʹÓÃÏàͬµÄORMÀ࣬ÄÇô£¬¼´Ê¹Æû³µÀàµÄËùÓÐ×Ö¶ÎÖµ²»»á¶¼Óõ½£¬Ò²»áÈ«²¿´ÓÊý¾Ý¿â¼ÓÔØµ½Ó¦ÓóÌÐò¡£ÕâÒâζ×Å´«ÊäÁ˸ü¶àµÄÊý¾Ý¡¢ÏûºÄÁ˸ü¶àµÄʱ¼ä£¬×îÖÕ¾ÍÒª³Ðµ£¿Í»§²»ÂúÒâµÄ·çÏÕ¡£

Èç¹ûÕâÁ½ÖÖÇé¿öʹÓò»Í¬µÄORMÀ࣬¾Í»áÎ¥·´DDDģʽ¡£µ±Ó¦ÓóÌÐò±»·Ö³É²»Í¬µÄ²¿·Ö£¬¾Í»áµ¼ÖÂÎÊÌâ¡£Èç¹û±íCarsλÓÚÓ¦ÓóÌÐòÖ®ÄÚ£¬Õâ¸öÎÊÌâ¾Í²»´æÔÚÁË¡£

2.3. ÓеĶÔÏóµÄÊôÐÔʵ¼ÊÉϲ»ÊÇÄǸö¶ÔÏóµÄ»ù±¾ÊôÐÔ

ͨ³££¬Éî¶ÈǶÌ×ÐèÒªÈßÓàÊôÐÔÀ´ÌáÉýÐÔÄÜ¡£

ÕâÊÇÒ»¸ö¼òµ¥ÇÒ³£¼ûµÄÄ£ÐÍ¡£ÏÖÔÚ¼ÙÉ裬ÎÒÃÇÓÐÒ»Ïîµ÷²é£¬²¢ÇÒÐèÒª²éѯµ÷²éµÄËùÓÐÎÊÌâ¡£

SQLµÄд·¨ÈçÏ£º

SELECT Question.*
FROM Question INNER JOIN Section ON Question.SectionID = Section.ID
INNER JOIN Page ON Section.PageID = Page.ID
INNER JOIN Survey ON Page.SurveyID = Survey.ID
WHERE Survey.ID = ?

LINQ²éѯµÄд·¨ÈçÏ£º

Context.Questions.Where(q => q.Section.Page.SurveyID = ?);

ÄÇô£¬Õâ¸ö²éѯÓÐʲôÎÊÌâÄØ£¿ÓÐÐÔÄÜÎÊÌâ¡£

¿´ÏÂÏÂÃæÕâÕÅͼ¡£ÕâÕÅͼ¿´ÉÏÈ¥Òª¸´ÔÓһЩ£¬ÒòΪÓÐËĸöÈßÓà¹ØÏµ¡£

ÓÉÓÚÌí¼ÓÁËÆäËûµÄ¹ØÏµ£¬SQL²éѯ±ä³ÉÁËÏÂÃæµÄÑù×Ó£º

SELECT *
FROM Question
WHERE Question.SurveyID = ?

ÎÒÃÇΪʲôÐèÒªÄÇЩÈßÓàÊôÐԺ͹ØÏµÄØ£¿´ð°¸ºÜ¼òµ¥£ºÎªÁËÌáÉýÐÔÄÜ¡£Èç¹ûµÚÒ»ÖÖ·½·¨ÔËÐеÃ×ã¹»¿ì£¬ÎÒÃÇ»¹»áÌí¼ÓÄÇЩ¹ØÏµÂ𣿵±È»²»»á¡£

2.4. Ïà¹ØÏîÎÞ·¨ºÜºÃµØÐ­µ÷

Ï໥¹ØÁªµÄÁ½¸ö±í¿ÉÒÔ×÷ΪÕâ¸öÎÊÌâµÄÒ»¸öÀý×Ó¡£

TABLE A (ID, Name, BID);
TABLE B (ID, Name, AID);

²åÈëÁ½ÐÐÏ໥¹ØÁªµÄ¼Ç¼ÐèÒªÈý¸ö²Ù×÷£º

Insert row A.
Insert row B with AID.
Update BID of row A.

Õâ¶Î´úÂëÔÚORM±íÀàÀïÊÇÐв»Í¨µÄ£º

var a = new A();
var b = new B();

a.Name = ¡°Instance of A with B¡±;
a.B = b;
b.Name = ¡°Instance of B with A¡±;
b.A = a;

Context.SaveChanges();

Õ⻹ÊÇÒòΪÀàºÍ±íÖ®¼äµÄת»»¡£SQLÊý¾Ý¿âÒýÇæ²»Ö§³Öͬʱ²åÈëÁ½Ðлò¶àÐÐÊý¾Ý¡£

ÁíÒ»¸öÀý×ÓÊÇ¡°¶àÖØÑ¡Ôñ£¨multi-select£©¡±Öµ¡£

TABLE Motherboard (
ID int,
Brand varchar,
Socket varchar,
Ram varchar,
Name varchar
);

TABLE CPU (
ID int,
Brand varchar,
Socket varchar,
Name varchar
);

--Ö÷°åÖ§³ÖµÄCPU
TABLE MotherboardCpu (
ID int,
MotherboardID int,
CpuID int
);

µ±Ò»¶¨»áÑ¡Ôñ¶àÐÐʱ£¬ÀýÈ磬µ±ÐèÒª²éѯËùÓÐÖ÷°å¼°ÆäÖ§³ÖµÄCPUʱ£¬µ±Í¨¹ýCPUÃû³Æ¹ýÂËʱ£¬´ÓMotherboardCpu±í²éѯ²¢´¦ÀíÊý¾Ý»áÏÔÖøµØ½µµÍÐÔÄÜ¡£

¿ª·¢ÈËԱͨ³£»áʹÓÃÏÂÃæµÄÊý¾ÝÄ£ÐÍÌæ»»ÉÏÊöÄ£ÐÍ£º

TABLE Motherboard (
ID int,
Brand varchar,
Socket varchar,
Ram varchar,
Name varchar,
--ÒÔCSV/JSON¸ñʽÁгöÖ§³ÖµÄCPUÃû³Æ
Cpu text
);

TABLE Cpu (
ID int,
Brand varchar,
Socket varchar,
Name varchar
);

´ÓÁìÓòÉè¼ÆµÄ½Ç¶È¿´£¬MotherboardºÍCPUÊÇÁ½¸öÏà¹ØµÄʵÌ壬µ«ËüÃÇÔÚÊý¾Ý¿âÀïûÓÐÈκιØÏµ¡£

2.5. ÎÞ·¨Í¨¹ý²é¿´¶ÔÏóÁ˽âÕû¸öÓ¦ÓÃ

ÏÂÃæµÄÀý×ÓÊÇÒ»¸öÏîÄ¿ÖеÄʵÌåͼ¡£

ÏîÄ¿ÖеÄÿÕÅ±í¶¼ÐèÒªÒ»¸öORMÀà¡¢Ò»¸öJSON±íʾÀàºÍÒ»¸öJavaScriptÀࡣÿ¸ö±íÈý¸öÀ࣬¶øÇÒ±íÒ²ÄÑÒÔά»¤¡£¿ª·¢ÈËÔ±¾ö¶¨½«½«ËùÓеÄ״̬ºÍÀàÐÍ´æµ½Ò»ÕűíÀ´Ó¶ø¼õÉÙ±íµÄÊýÁ¿¡£×îºó£¬Êý¾Ý±íͼÈçÏ£º

ʵÌåͼºÜÇåÎú£¬Ò»Ä¿ÁËÈ»£¬¶øÊý¾Ý±íͼÔòÏ൱ÄÑÀí½â¡£¿ò¼ÜµÄÏÞÖÆµ¼Ö¿ª·¢ÈËÔ±ÐèÒªÔÚÊý¾Ý¿â´¿¾»¶ÈºÍ´úÂë´¿¾»¶ÈÖ®¼ä½øÐÐÈ¡Éá¡£

Starcounter

ÏÂͼչʾÁËStarcounterµÄ¼Ü¹¹¡£

¸ÃͼչʾÁËÔËÐÐÔÚÊý¾Ý¿âÀïµÄStarcounterÓ¦ÓóÌÐò£¬Ëü¿ÉÒÔÖ±½Ó·ÃÎʱ£´æÔÚRAMÖеÄÊý¾Ý¿â¶ÔÏó¡£

Êý¾Ý²»ÐèÒªÔÚÊý¾Ý¿âºÍÓ¦ÓóÌÐòÖ®¼äÍù·µ¡£Ó¦ÓóÌÐòÀ༴Êý¾Ý¿â¶ÔÏó¡£ÓÐÁËStarcounter£¬¾Í²»ÐèÒªORM»òÆäËûÓ³ÉäÆ÷ÁË¡£

ÏÂÃæÊÇÒ»¸öÊý¾Ý¿âÀඨÒå¡£

[Database]
public class Vehicle {
public string PlateNumber;
public string Brand;
public string Model;
}

ûÓÐÉÏÏÂÎÄÉùÃ÷£¬Ã»ÓбíÃû»òÕßÊôÐÔÃûÓ³ÉäÆ÷£¬ÓеÄÖ»ÊÇ´øÓÐÊôÐÔµÄC#Àà¡£ÏÂÃæÊÇÁíÍâÒ»¸ö´øÓÐÍâ¼üµÄÀý×Ó¡£

[Database]
public class VehicleStatus {
public string Name;
}

[Database]
public class Vehicle {
public string PlateNumber;
public string Brand;
public string Model;
public VehicleStatus Status;
}

Çé¿ö»¹ÊÇÒ»Ñù¡£Ã»ÓÐÍâ¼üÉùÃ÷£¬Ã»ÓÐÓ³É䣬ÓеÄÖ»ÊÇC#ÊôÐÔ¡£ÏÖÔÚÈÃÎÒÃÇ¿´Ï£¬Starcounter½â¾öÁËÉÏÊöÄÄЩÎÊÌ⣿

1.1. ÒÆ³ýÓ¦ÓóÌÐòÖеÄËùÓÐSQL´úÂë

Ŀǰ£¬StarcounterÈÔÈ»ÐèҪʹÓÃһЩSQL´ÓÊý¾Ý¿âÖвéѯ¶ÔÏó¡£²»¹ý£¬ÄãÐèÒª±àдµÄSQLÊýÁ¿´ó·ù¼õÉÙ£¬ÒòΪÄã¿ÉÒÔ×·×ÙÊôÐÔ£¬´ÓÒ»¸ö¶ÔÏóµ½ÏÂÒ»¸ö¶ÔÏ󣬶ø²»±ØÊ¹ÓÃÁªºÏ»ò¶àÖØ²éѯ¡£

1.2. Ϊ·ÃÎÊÊý¾Ý¿â±íÌṩºÍ·ÃÎÊÆÕͨµÄÓ¦ÓóÌÐòÀàÒ»ÑùµÄ·½Ê½

Êǵ쬾ø¶ÔµÄ¡£

Êý¾Ý¿â¶ÔÂß¼­¸´ÔÓµÄÖ»¶ÁÊôÐÔÌṩÁËÍêȫ֧³Ö¡£ÓÉÓÚC#¶ÔÏó¼´Êý¾Ý¿â¶ÔÏó£¬ËùÒÔ²»´æÔÚÈκÎÊý¾ÝÀàÐÍÎÊÌâ¡£

1.3. Ϊ²»ÐÞ¸ÄÓ¦ÓóÌÐò´úÂëÇл»Êý¾Ý¿âÒýÇæÌṩ¿ÉÄÜ

²»£¬´úÂëÐ޸ĺ͵÷ÕûÊDZØÐèµÄ¡£StarcounterʹÓÃÒ»ÖÖÓ봫ͳÊý¾Ý¿âÒýÇæÍêÈ«²»Í¬µÄ·½·¨¡£

2.1. ÏîÄ¿ÖÐÏàͬµÄ¹¦ÄÜ£¬ÆäʵÏÖ·½Ê½Ïàͬ»òÕßÔÚ²»Í¬µÄµØ·½²»Í¬£»

StarcounterûÓÐÊý¾Ý¿â¶ËºÍÓ¦ÓóÌÐò¶Ë¡£Êý¾Ý¿â¶ÔÏó¼´Ó¦ÓóÌÐò¶ÔÏ󣬷´Ö®ÒàÈ»¡£¶øÇÒ£¬´ó¶àÊýStarcounterÓ¦ÓóÌÐòÔÚ·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼ä¹²ÓÃÏàͬµÄÄ£ÐÍ¡£JavaScript¿âPuppetJs¸ºÔðͬ²½·þÎñÆ÷ºÍ¿Í»§¶ËÖ®¼äµÄ±ä»¯¡£

×îºó£¬Ö»ÓÐÒ»¸öÄ£ÐÍÀ࣬һ¸öµØ·½±àдÂß¼­£¬½µµÍÁËÔÚ²»Í¬µØ·½±àдÏàͬÂß¼­µÄ¿ÉÄÜÐÔ¡£

2.2. ͬһ¸öÏîÓв»Ö¹Ò»¸ö¶ÔÏó

²»ÐèҪΪÊý¾Ý¿â¶ÔÏó´´½¨ÈκζîÍâµÄÀà»òÓ³ÉäÆ÷£»Õû¸öÏî¿ÉÒÔÖ±½Ó´ÓÄÚ´æ·ÃÎÊ¡£

2.3. ÓеĶÔÏóµÄÊôÐÔʵ¼ÊÉϲ»ÊÇÄǸö¶ÔÏóµÄ»ù±¾ÊôÐÔ

Èç¹ûÿ¸ö¶ÔÏóµÄÿ¸öÊôÐÔ¶¼¿ÉÒÔÖ±½Ó·ÃÎÊ£¬¶øÇҺܼòµ¥£¬¾Í²»ÐèÒª´´½¨¶îÍâµÄÊôÐÔ¡£CPUÀàÓ¦¸ÃÓÐÒ»¸öMotherboardµÄÒýÓã¬MotherboardÀàÓ¦¸ÃÓÐÒ»¸öPC CaseµÄÒýÓ㬵«CPUÀ಻Ӧ¸Ã°üº¬ÈκÎPC CaseµÄÒýÓá£

2.4. Ïà¹ØÏîÎÞ·¨ºÜºÃµØÐ­µ÷

Ó봫ͳSQLÊý¾Ý¿â²»Í¬£¬StarcounterÔÊÐíÄãͬʱ´æ´¢Á½¸öÏà¹Ø¶ÔÏó¡£ÏÂÃæµÄ´úÂë¿ÉÒÔÕý³£ÔËÐУº

Db.Transact(() => {
var a = new A();
var b = new B();

a.Name = "Instance of A with B";
a.B = b;
b.Name = "Instance of B with A";
b.A = a;
});

¶àÖØ²éѯÊôÐÔµÄÎÊÌâ¸üÈÝÒ×½â¾ö£º

[Database]
public class Motherboard {
public string Brand;
public string Socket;
public string Ram;
public string Name;

public IEnumarable<MotherboardCpu> MotherboardCpus {
get {
return Db.SQL<MotherboardCpu>("
SELECT o FROM MotherboardCpu o WHERE o.Motherboard = ?", this);
}
}

public string MotherboardCpuNames {
get {
return string.Join(", ", this.MotherboardCpus.Select(x => x.Name));
}
}
}

[Database]
public class Cpu {
public string Brand;
public string Socket;
public string Name;
}

[Database]
public class MotherboardCpu {
public Motherboard Motherboard;
public Cpu Cpu;
}

Ö»¶ÁÊôÐÔMotherboardCpuNamesÍêÈ«¿ÉÒÔÔÚÊý¾Ý¿â²ãÃæ·ÃÎÊ¡£ÏÂÃæµÄSQL²éѯÊÇÓÐЧµÄ£¡

var motherboards = Db.SQL<Motherboard>(
"SELECT o FROM Motherboard o WHERE o.MotherboardCpuNames LIKE ?",
"%i7-5___%");

×¢Ò⣺×Ö·û´®Á¬½ÓÊÇÒ»ÏîÐÔÄÜ´ú¼ÛºÜ¸ßµÄÈÎÎñ¡£Ê¹ÓÃÎñ±ØÒªÇ¡µ±¡£

ÏÂÃæÕâ¸ö²éѯÊÇÉÏÊö²éѯµÄÁíÒ»¸ö°æ±¾£¬ËٶȱÈÉÏÊö²éѯ¿ì25±¶£º

var motherboards = Db.SQL<Motherboard>(
"SELECT c.Motherboard FROM MotherboardCpu c WHERE c.Cpu.Name LIKE ?",
"%i7-5%").Distinct();

2.5. ÎÞ·¨Í¨¹ý²é¿´¶ÔÏóÁ˽âÕû¸öÓ¦ÓÃ

StarcounterÌṩÁËÒ»ÖÖ¼ò½àµÄ·½Ê½£¬Èÿª·¢ÈËÔ±¿ÉÒÔ¸ù¾ÝÐèÒª´´½¨ÈÎÒâ¶àµÄÊý¾Ý¿âÀࡣʹÓÃʲôÑùµÄÉè¼ÆÄ£Ê½£¬Ó¦ÓÃʲôÑùµÄ¼Ü¹¹£¬ÍêÈ«ÓÉ¿ª·¢ÈËÔ±¾ö¶¨¡£

С½á

¶ÔÓÚÄÇЩ¾­Àú¹ýÉÏÊöÈκÎÎÊÌâµÄ¿ª·¢ÈËÔ±¡¢Ð¡ÐÍ´´Òµ¹«Ë¾»òÕß´óÐÍÆóÒµÀ´Ëµ£¬ÏÖÔÚÓнâ¾ö·½°¸ÁË¡£´ÓÎÒ¸öÈ˵ľ­ÑéÀ´¿´£¬ÎÒÓùýASP.NET MVC£¬ÇãÏòÓÚ²»Ê¹ÓÃPHP£¬×ðÖØRuby on Rails¡£ÏÖÔÚ£¬ÎÒÎÞ·¨ÏëÏóÇÐ»ØÆäÖÐÈκÎÒ»Ïî¼¼Êõ²¢±àд´óÁ¿µÄ½ºË®´úÂë¡£

   
2234 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí