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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁìÓò½¨Ä£
 
  1960  次浏览      28
 2018-6-22
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬±¾ÎÄÈ«Ãæ½²½âÒÔDDDΪ´ú±íµÄ¿ª·¢Ä£Ê½Ó봫ͳCRUDµÄÁìÓò½¨Ä£¡£

ΪʲôҪÁìÓò½¨Ä£

80ºó³ÌÐòÔ±¶¼ÖªµÀ£¬ÎÒÃǹú¼Ò¡°ÏµÍ³·ÖÎöʦ¡± ºÍ¡°ÏµÍ³Éè¼ÆÊ¦¡± ÊÇÁ½ÖÖ²»Í¬µÄÖ°³Æ¿¼ÊÔ£¬Ò²¾ÍÊÇ·ÖÎöϵͳºÍÉè¼ÆÏµÍ³²»ÊÇͬһ¸öÈË£¬ÕâÖÖ¸îÁѵ¼ÖÂÐèÇó·ÖÎöµÄ½á¹ûÎÞ·¨Ö±½Ó½øÐÐÉè¼Æ±à³Ì£¬¶øÄܹ»½øÐбà³ÌÔËÐеĴúÂëȴŤÇúÐèÇ󣬵¼Ö¿ͻ§ÔËÐÐÈí¼þºó²Å·¢Ïֺܶ๦Äܲ»ÊÇ×Ô¼ºÏëÒªµÄ£¬¶øÇÒÈí¼þ²»ÄÜ¿ìËÙ¸úËæÐèÇó±ä»¯¡£

DDDÔò´òÆÆÁËÕâÖÖ¸ôºÒ£¬Ìá³öÁËÁìÓòÄ£Ð͸ÅÄͳһÁË·ÖÎöºÍÉè¼Æ±à³Ì£¬Ê¹µÃÈí¼þÄܹ»¸üÁé»î¿ìËÙ¸úËæÐèÇó±ä»¯¡£

ºó¶Ë¼¼ÊõÑݱä

·þÎñÆ÷ºó¶Ë·¢Õ¹Ö÷Òª¿ÉÒÔ·Ö³ÉÈý¸ö½×¶Î£º

1. UI+DataBaseµÄÁ½²ã¼Ü¹¹£¬ÕâÖÖÃæÏòÊý¾Ý¿âµÄ¼Ü¹¹Ã»ÓÐÁé»îÐÔ¡£

2. UI+Service+DataBaseµÄ¶à²ãSOA¼Ü¹¹£¬ÕâÖÖ·þÎñ+±íÄ£Ð͵ļܹ¹Ò×ʹ·þÎñ±äµÃÄÒÖ×£¬ÄÑÓÚά»¤ÍØÕ¹£¬ÉìËõÐÔÄܲÕâÒ²ÊÇSpring Web Ó¦ÓõÄ×î´ó°Ü±Ê.

3. DDD+SOAµÄʼþÇý¶¯µÄCQRS¶Áд·ÖÀë¼Ü¹¹£¬Ó¦¸¶¸´ÔÓÒµÎñÂß¼­£¬ÒÔ¾ÛºÏÄ£ÐÍÌæ´úÊý¾Ý±íÄ£ÐÍ£¬ÒÔ²¢·¢µÄʼþÇý¶¯Ìæ´ú´®ÁªµÄÏûÏ¢Çý¶¯¡£ÕæÕýʵÏÖÒÔÒµÎñʵÌåΪºËÐĵÄÁé»îÍØÕ¹¡£

ÒÔDDDΪ´ú±íµÄ¿ª·¢Ä£Ê½Ó봫ͳCRUD»ò¹ý³Ì½Å±¾»òÕßÃæÏòÊý¾Ý±íµÈÔÚ¿ª·¢Ð§ÂÊÉϱȽÏÈçÏ£º

¶ÔÓÚÊÂÎñ½Å±¾£¬Ò»¾ä»°¸ÅÀ¨¾ÍÊÇ¡°ÉÏÊÖÈÝÒ×£¬Î¬»¤ÄÑ¡±

DDD¸ïÃü

DDD¸ïÃüÐÔÔÚÓÚ£¬ÁìÓòÄ£ÐÍ׼ȷ·´Ó³ÁËÒµÎñÓïÑÔ£¬¶ø´«Í³J2EE»òSpring+HibernateµÈÊÂÎñÐÔ±à³ÌÄ£ÐÍÖ»¹ØÐÄÊý¾Ý£¬ÕâЩÊý¾Ý¶ÔÏó³ýÁ˼òµ¥setter/getter·½·¨Í⣬ûÓÐÈκÎÒµÎñ·½·¨£¬±»±ÈÓ÷³ÉƶѪģʽ¡£

ÒÔÒøÐÐÕ˺ÅAccountΪ°¸Àý£¬AccountÓС°´æ¿î¡±£¬¡°¼ÆËãÀûÏ¢¡±ºÍ¡°È¡¿î¡±µÈÒµÎñÐÐΪ£¬µ«ÊÇ´«Í³¾­µäµÄ·½Ê½Êǽ«¡°´æ¿î¡±£¬¡°¼ÆËãÀûÏ¢¡±ºÍ¡°È¡¿î¡±ÐÐΪ·ÅÔÚÕ˺ŵķþÎñAccountServiceÖУ¬¶ø²»ÊÇ·ÅÔÚAccount¶ÔÏó±¾ÉíÖ®ÖС£ÎÒÃDz»ÄÜÒòΪÓÃÁ˼ÆËã»ú£¬ÓÃÁËÊý¾Ý¿â£¬ÓÃÁË¿ò¼Ü£¬ÒµÎñÄ£ÐÍ·´¶ø±»¼¼Êõ¿ò¼Ü¸ø°ó¼ÜÁË£¬¾ÍÏñÈËËäÈ»ÊÇÓÉĸÇ×ÉúµÄ£¬µ«ÊÇÈ˵ijԺÈÀ­ÈöĸÇײ»ÄÜÌæ´ú£¬¸ü²»ÄÜÒÔĸ°®ÃûÒå°þ¶áÈ˵ÄÕý³£Ö°ÔðÐÐΪ£¬Èç¹ûÊÇÕâÑù£¬Õâ¸öÈ˾ÍÊDZ»Ä¸°®°ó¼ÜÁË¡£

DDD²»ÊÇÒøµ¯

Èí¼þµÄÊÀ½çÀïûÓÐÒøµ¯£¬ÊÇÓÃÊÂÎñ½Å±¾»¹ÊÇÁìÓòÄ£ÐÍûÓжԴíÖ®·Ö£¬¹Ø¼ü¿´ÊÇ·ñºÏÊÊ¡£¾ÍÏñ×ÔÓªºÍƽ̨Äĸöģʽ¸üºÃ£¿´ð°¸ÊǶ¼ºÜºÃ£¬ËùÒÔÑÇÂíÑ·¿ÉÒÔÓÐÈý·½Èëס£¬°¢ÀïÒ²¿ÉÒÔÓÐ×Ô½¨²ÖÂï¡£

ʵ¼ÊÉÏ£¬CQRS¾ÍÊǶÔÊÂÎñ½Å±¾ºÍÁìÓòÄ£ÐÍÁ½ÖÖģʽµÄ×ۺϣ¬ÒòΪ¶ÔÓÚQueryºÍ±¨±íµÄ³¡¾°£¬Ê¹ÓÃÁìÓòÄ£ÐÍÍùÍù»á°Ñ¼òµ¥µÄÊÂÇéŪ¸´ÔÓ£¬´ËʱÍêÈ«¿ÉÒÔÓð¿¨Ä·Ìêµ¶°ÑÁìÓò²ãÌêµô£¬Ö±½Ó·ÃÎÊInfrastructure¡£

ÎÒ¸öÈËÒ²ÊǼá¾ö·´¶Ô¹ý¶ÈÉè¼ÆµÄ£¬Òò´Ë¶ÔÓÚ¼òµ¥ÒµÎñ³¡¾°£¬ÎÒÇ¿Á¦½¨Ò黹ÊÇʹÓÃÊÂÎñ½Å±¾£¬ÆäÓŵãÊǼòµ¥¡¢Ö±¹Û¡¢Ò×ÉÏÊÖ¡£µ«¶ÔÓÚ¸´ÔÓµÄÒµÎñ³¡¾°£¬ÄãÔÙÕâÃ´Íæ¾Í²»ÐÐÁË£¬ÒòΪһµ©ÒµÎñ±äµÃ¸´ÔÓ£¬ÊÂÎñ½Å±¾¾ÍºÜÄÑÓ¦¶Ô£¬ÈÝÒ×Ôì³É´úÂëµÄ¡°Ò»¹øÖࡱ£¬ÏµÍ³µÄ¸¯»¯ËٶȺ͸´ÔÓÐÔ³ÊÖ¸Êý¼¶ÉÏÉý¡£Ä¿Ç°±È½ÏÓÐЧµÄÖÎÀí°ì·¨¾ÍÊÇÁìÓò½¨Ä££¬ÒòΪÁìÓòÄ£ÐÍÊÇÃæÏò¶ÔÏóµÄ£¬ÔÚ·â×°ÒµÎñÂß¼­µÄͬʱ£¬ÌáÉýÁ˶ÔÏóµÄÄÚ¾ÛÐÔºÍÖØÓÃÐÔ£¬ÒòΪʹÓÃÁËͨÓÃÓïÑÔ£¨Ubiquitous Language£©£¬Ê¹µÃÒþ²ØµÄÒµÎñÂß¼­µÃµ½ÏÔÐÔ»¯±í´ï£¬Ê¹µÃ¸´ÔÓÐÔÖÎÀí³ÉΪ¿ÉÄÜ¡£

½ÓÏÂÀ´£¬ÈÃÎÒÃÇ¿´Ò»¸öÒøÐÐתÕ˵ÄʵÀý£¬¶Ô±ÈÏÂÊÂÎñ½Å±¾ºÍÁìÓòÄ£ÐÍÁ½Õß±à³ÌÄ£Ð͵IJ»Í¬¡£

DDD³õÌåÑé

ÒøÐÐתÕËÊÂÎñ½Å±¾ÊµÏÖ

ÔÚÊÂÎñ½Å±¾µÄʵÏÖÖУ¬¹ØÓÚÔÚÁ½¸öÕ˺ÅÖ®¼äתÕ˵ÄÁìÓòÒµÎñÂß¼­¶¼±»Ð´ÔÚÁËMoneyTransferServiceµÄʵÏÖÀïÃæÁË£¬¶øAccount½ö½öÊÇgettersºÍsettersµÄÊý¾Ý½á¹¹£¬Ò²¾ÍÊÇÎÒÃÇ˵µÄƶѪģÐÍ£º

public class MoneyTransferServiceTransact

ionScriptImpl
implements MoneyTransferService {
private AccountDao accountDao;
private BankingTransactionRepository

bankingTransactionRepository;
. . .
@Override
public BankingTransaction transfer(
String fromAccountId, String toAccountId,

double amount) {
Account fromAccount = accountDao.findById

(fromAccountId);
Account toAccount = accountDao.findById(toA

ccountId);
. . .
double newBalance = fromAccount.getBalance()

- amount;
switch (fromAccount.getOverdraftPolicy()) {
case NEVER:
if (newBalance < 0) {
throw new DebitException("Insufficient funds");
}
break;
case ALLOWED:
if (newBalance < -limit) {
throw new DebitException(
"Overdraft limit (of " + limit + ") exceeded:

" + newBalance);
}
break;
}
fromAccount.setBalance(newBalance);
toAccount.setBalance(toAccount.getBalance()

+ amount);
BankingTransaction moneyTransferTransaction

=
new MoneyTranferTransaction(fromAccountId,

toAccountId, amount);
bankingTransactionRepository.addTransaction

(moneyTransferTransaction);
return moneyTransferTransaction;
}
}

ÉÏÃæµÄ´úÂë´ó¼Ò¿´ÆðÀ´Ó¦¸Ã±È½ÏÑÛÊ죬ÒòΪĿǰ´ó²¿·Öϵͳ¶¼ÊÇÕâôдµÄ¡£ÐèÇóÆÀÉóÍ꣬¹¤³Ìʦ»­¼¸ÕÅUMLͼÍê³ÉÉè¼Æ£¬¾Í¿ªÊ¼ÏòÉÏÃæÕâÑùí¡ÒµÎñ´úÂëÁË£¬ÕâÑùд»ù±¾²»ÓÃÌ«·ÑÄÔ£¬ÍêÈ«ÊÇÃæÏò¹ý³ÌµÄ´úÂë·ç¸ñ¡£ÓÐЩͬѧ¿ÉÄÜ»á˵£¬ÎÒÕâÑùдҲ¿ÉÒÔʵÏÖϵͳ¹¦Äܰ¡£¬»¹ÊÇÄǾ仰¡°just because you can, doesn¡¯t mean you should¡±¡£Ëµ¾ä²»ºÃÌýµÄ£¬ÕýÊÇÓÐÕâô¶à¡°Ã»ÓÐ×·Ç󡱡¢¡°²»ÇóÉϽø¡±µÄÂëÅ©²ÅÔì³ÉÁËÓ¦ÓÃϵͳµÄ»ìÂÒ¡¢°Ü»µÁËÓ¦Óÿª·¢µÄÃûÉù¡£ÕâÒ²ÊÇΪʲôºÜ¶àÓ¦Óÿª·¢¹¤³Ìʦ¾õµÃ¹¤×÷ûÒâ˼£¬¼¼Êõº¬Á¿µÍ£¬¾õµÃÕûÌì¾ÍÊÇдif-elseµÄÒµÎñÂß¼­´úÂ룬ϵͳÓÖÀ㬹¤×÷·±Ëö¡¢ÎÞÁÄ¡¢Ã»Óгɳ¤¡¢Ã»Óгɾ͸У¬ËùÒÔתÏòÈ¥×öÖмä¼þ°¡£¬È¥Ð´JDK°¡£¬¾õµÃÄǸöNB¡£Êµ¼ÊÉÏ£¬Ó¦Óÿª·¢Ò»µã¶¼²»¼òµ¥Ò²²»ÎÞÁÄ£¬ÒµÎñµÄ±ä»¯±Èµ×²ãInfrastructureµÄ±ä»¯Òª¶àµÃ¶à£¬½â¾öµÄÄѶÈҲ˿ºÁ²»±Èдµ×²ã´úÂëÈÝÒ×£¬Ö»ÊǺܶàÈËÑ¡ÔñÁËÓÃÎÞÁĵķ½Ê½È¥×ö¡£ÆäʵÎÒÃÇÊÇÓа취×öµÄ¸üÓÅÑŵģ¬ÕâÖÖÓÅÑŵķ½Ê½¾ÍÊÇÁìÓò½¨Ä££¬Î¨ÓÐÕÆÎÕÁËÕâÖÖÓÅÑÅÄã²ÅÄÜʵÏÖ´Ó¹¤³ÌʦÏòÓ¦Óüܹ¹µÄתÐÍ¡£Í¬ÑùµÄÒµÎñÂß¼­£¬½ÓÏÂÀ´¾ÍÈÃÎÒÃÇ¿´Ò»ÏÂÓÃDDDÊÇÔõô×öµÄ¡£

ÒøÐÐתÕËÁìÓòÄ£ÐÍʵÏÖ

Èç¹ûÓÃDDDµÄ·½Ê½ÊµÏÖ£¬AccountʵÌå³ýÁËÕ˺ÅÊôÐÔÖ®Í⣬»¹°üº¬ÁËÐÐΪºÍÒµÎñÂß¼­£¬±ÈÈçdebit( )ºÍcredit( )·½·¨¡£

// @Entity
public class Account {
// @Id
private String id;
private double balance;
private OverdraftPolicy overdraftPolicy;
. . .
public double balance() { return balance; }
public void debit(double amount) {
this.overdraftPolicy.preDebit(this, amount);
this.balance = this.balance - amount;
this.overdraftPolicy.postDebit(this, amount);
}
public void credit(double amount) {
this.balance = this.balance + amount;
}
}

¶øÇÒ͸֧²ßÂÔOverdraftPolicyÒ²²»½ö½öÊÇÒ»¸öEnumÁË£¬¶øÊDZ»³éÏó³É°üº¬ÁËÒµÎñ¹æÔò²¢²ÉÓÃÁ˲ßÂÔģʽµÄ¶ÔÏó¡£

public interface OverdraftPolicy {
void preDebit(Account account, double amount);
void postDebit(Account account, double amount);
}
public class NoOverdraftAllowed implements OverdraftPolicy {
public void preDebit(Account account, double amount) {
double newBalance = account.balance() - amount;
if (newBalance < 0) {
throw new DebitException("Insufficient funds");
}
}
public void postDebit(Account account, double amount) {
}
}
public class LimitedOverdraft implements OverdraftPolicy {
private double limit;
. . .
public void preDebit(Account account, double amount) {
double newBalance = account.balance() - amount;
if (newBalance < -limit) {
throw new DebitException(
"Overdraft limit (of " + limit + ") exceeded: " + newBalance);
}
}
public void postDebit(Account account, double amount) {
}
}

¶øDomain ServiceÖ»ÐèÒªµ÷ÓÃDomain Entity¶ÔÏóÍê³ÉÒµÎñÂß¼­¼´¿É¡£

public class MoneyTransferServiceDomainModelImpl
implements MoneyTransferService {
private AccountRepository accountRepository;
private BankingTransactionRepository bankingTrans

actionRepository;
. . .
@Override
public BankingTransaction transfer(
String fromAccountId, String toAccountId, double amount)

{Account fromAccount = accountRepository.findById

(fromAccountId);
Account toAccount = accountRepository.findById

(toAccountId);
. . .
fromAccount.debit(amount);
toAccount.credit(amount);
BankingTransaction moneyTransferTransaction =
new MoneyTranferTransaction(fromAccountId,

toAccountId, amount);
bankingTransactionRepository.addTransaction

(moneyTransferTransaction);
return moneyTransferTransaction;
}
}

ͨ¹ýÉÏÃæµÄDDDÖØ¹¹ºó£¬Ô­À´ÔÚÊÂÎñ½Å±¾ÖеÄÂß¼­£¬±»·ÖÉ¢µ½Domain Service£¬Domain EntityºÍOverdraftPolicyÈý¸öÂú×ãSOLIDµÄ¶ÔÏóÖУ¬ÔÚ¼ÌÐøÔĶÁ֮ǰ£¬ÎÒ½¨Òé¿ÉÒÔ×Ô¼ºÏÈÌå»áÒ»ÏÂDDDµÄºÃ´¦¡£

ÁìÓò½¨Ä£µÄºÃ´¦

DDD×î´óµÄºÃ´¦ÊÇ£º½Ó´¥µ½ÐèÇóµÚÒ»²½¾ÍÊÇ¿¼ÂÇÁìÓòÄ£ÐÍ£¬¶ø²»Êǽ«ÆäÇиî³ÉÊý¾ÝºÍÐÐΪ£¬È»ºóÊý¾ÝÓÃÊý¾Ý¿âʵÏÖ£¬ÐÐΪʹÓ÷þÎñʵÏÖ£¬×îºóÔì³ÉÐèÇóµÄÊ×Ö«·ÖÀë¡£DDDÈÃÄãÊ×ÏÈ¿¼ÂǵÄÊÇÒµÎñÓïÑÔ£¬¶ø²»ÊÇÊý¾Ý¡£DDDÇ¿µ÷ÒµÎñ³éÏóºÍÃæÏò¶ÔÏó±à³Ì£¬¶ø²»Êǹý³ÌʽҵÎñÂß¼­ÊµÏÖ¡£Öص㲻ͬµ¼Ö±à³ÌÊÀ½ç¹Û²»Í¬¡£

ÃæÏò¶ÔÏó

·â×°£ºAccountµÄÏà¹Ø²Ù×÷¶¼·â×°ÔÚAccount EntityÉÏ£¬Ìá¸ßÁËÄÚ¾ÛÐԺͿÉÖØÓÃÐÔ¡£

¶à̬£º²ÉÓòßÂÔģʽµÄOverdraftPolicy£¨¶à̬µÄµäÐÍÓ¦Óã©Ìá¸ßÁË´úÂëµÄ¿ÉÀ©Õ¹ÐÔ¡£

ÒµÎñÓïÒåÏÔÐÔ»¯

ͨÓÃÓïÑÔ£º¡°Ò»¸öÍŶӣ¬Ò»ÖÖÓïÑÔ¡±£¬½«Ä£ÐÍ×÷ΪÓïÑÔµÄÖ§Öù¡£È·±£ÍŶÓÔÚÄÚ²¿µÄËùÓн»Á÷ÖУ¬´úÂëÖУ¬»­Í¼£¬Ð´¶«Î÷£¬ÌرðÊǽ²»°µÄʱºò¶¼ÒªÊ¹ÓÃÕâÖÖÓïÑÔ¡£ÀýÈçÕ˺ţ¬×ªÕË£¬Í¸Ö§²ßÂÔ£¬ÕâЩ¶¼ÊǷdz£ÖØÒªµÄÁìÓò¸ÅÄÈç¹ûÕâЩÃüÃû¶¼ºÍÎÒÃÇÈÕ³£ÌÖÂÛÒÔ¼°PRDÖеÄÃèÊö±£³ÖÒ»Ö£¬½«»á¼«´óÌáÉý´úÂëµÄ¿É¶ÁÐÔ£¬¼õÉÙÈÏÖª³É±¾¡£Ëµµ½Õ⣬ÉÔ΢ͲÛÒ»ÏÂÎÒÃÇÓÐЩ¹¤³ÌʦµÄÓ¢Óïˮƽ£¬ÓÐЩÉñ·­ÒëÈÃһЩºËÐÄÁìÓò¸ÅÄî±äµÃÃæÄ¿È«·Ç¡£

ÏÔÐÔ»¯£º¾ÍÊǽ«ÒþʽµÄÒµÎñÂß¼­´ÓÒ»ÍÆif-elseÀïÃæ³éÈ¡³öÀ´£¬ÓÃͨÓÃÓïÑÔÈ¥ÃüÃû¡¢È¥Ð´´úÂ롢ȥÀ©Õ¹£¬ÈÃÆä±ä³ÉÏÔʾ¸ÅÄ±ÈÈ硰͸֧²ßÂÔ¡±Õâ¸öÖØÒªµÄÒµÎñ¸ÅÄ°´ÕÕÊÂÎñ½Å±¾µÄд·¨£¬Æäº¬ÒåÍêÈ«ÑÍûÔÚ´úÂëÂß¼­ÖÐûÓÐÍ»ÏÔ³öÀ´£¬¿´´úÂëµÄÈË×ÔȻҲÊÇÒ»Á³ã±ƣ¬¶øÁìÓòÄ£ÐÍÀïÃæ½«ÆäÓòßÂÔģʽ³éÏó³öÀ´£¬²»½öÌá¸ßÁË´úÂëµÄ¿É¶ÁÐÔ£¬¿ÉÀ©Õ¹ÐÔÒ²ºÃÁ˺ܶࡣ

ÈçºÎ½øÐÐÁìÓò½¨Ä£

³õ²½½¨Ä£

ÁìÓò½¨Ä£Õâ¸ö»°ÌâÌ«´ó£¬¹ØÓڴ˵ij¤Æª´óÂÛºÍÊé¼®Ò²ºÜ¶à£¬±ÈÈçʲôͨ¹ýÓï·¨ºÍ¾ä·¨ÉîÈë·ÖÎö·¨£¬ÔÚÎÒ¿´À´ÕâЩ·½·¨ÂÛÓÐЩ·±ËöÁË¡£ºÃµÄÄ£ÐÍÓ¦¸ÃÊǽ¨Á¢ÔÚ¶ÔÒµÎñÉîÈëÀí½âµÄ»ù´¡ÉÏ£¬Èç¹ûÒµÎñÀí½â²»µ½Î»£¬ÄãÔÙÔõô·ÖÎö¾ä×ÓÒ²²»¿ÉÄܲú³öºÃµÄÄ£ÐÍ¡£¾ÍÎÒ×Ô¼ºµÄ¾­Ñé¶øÑÔ£¬½¨Ä£Ò²ÊÇÒ»¸ö²»¶Ïµü´úµÄ¹ý³Ì£¬ËùÒÔÒ»¿ªÊ¼¿ÉÒÔ¼òµ¥µãÀ´£¬¾Í²ÉÓÃÁ½²½½¨Ä£·¨×¥×¡Ò»Ð©ºËÐĸÅÄȻºó¼ÙÉèһЩҵÎñ³¡¾°×ß²éһϣ¬ÔÙдһЩα´úÂëÑéÖ¤Ò»ÏÂrunһϣ¬¿´¿´Ë³²»Ë³£¬Èç¹ûºÜ˳»¬£¬ËµÃ÷û벡£¬·ñÔò¾ÍÒª¿´¿´ÊDz»ÊÇÐèÒªµ÷ÕûÒ»ÏÂÄ£ÐÍ£¬Ëæ×ÅÏîÄ¿µÄ½øÐкͶÔÒµÎñÀí½âµÄ²»¶ÏÉîÈ룬ÕâÖÖµü´ú½«³ÖÐø½øÐС£

ÄÇʲôÊÇÁ½²½½¨Ä£·¨ÄØ£¿Ò²¾ÍÊÇÖ»ÐèÒªÁ½¸ö²½Öè¾ÍÄܽ¨Ä£ÁË£¬Ê×ÏÈ´ÓUser StoryÕÒÃû´ÊºÍ¶¯´Ê£¬È»ºóÓÃUMLÀàͼ»­³öÁìÓòÄ£ÐÍ¡£ÊDz»ÊǺܼòÔ¼£¿¼òÔ¼²¢²»Òâζ׿òµ¥£¬¶ÔÓÚÒµÎñ¼Ü¹¹Ê¦ºÍϵͳ·ÖÎöʦÀ´Ëµ£¬¼û¹¦Á¦µÄµØ·½ÍùÍù¾ÍÔÚÓÚ´Ë¡£

¾Ù¸öÀõ×Ó£¬±ÈÈçÈÃÄãÉè¼ÆÒ»¸öÖнéϵͳ£¬Ò»¸öµäÐ͵ÄUser Story¿ÉÄÜÊÇ¡°Ð¡Ã÷È¥ÕÒ¹¤×÷£¬Öнé˵ÄãÁô¸öµç»°£¬Óй¤×÷»ú»áÎÒ»á֪ͨÄ㡱£¬ÕâÀïÃæµÄ¹Ø¼üÃû´ÊºÜ¿ÉÄܾÍÊÇÎÒÃÇÐèÒªµÄÁìÓò¶ÔÏó£º

1.СÃ÷ÊÇÇóÖ°Õß¡£

2.µç»°ÊÇÇóÖ°ÕßµÄÊôÐÔ¡£

3.Öнé°üº¬ÁËÖн鹫˾£¬ÖнéÔ±¹¤Á½¸ö¹Ø¼ü¶ÔÏó¡£

4.¹¤×÷»ú»á¿Ï¶¨Ò²ÊǹؼüÁìÓò¶ÔÏó£»

5.֪ͨÕâ¸ö¶¯´Ê°µÊ¾ÎÒÃÇÕâÀïÓù۲ìÕßģʽ»á±È½ÏºÏÊÊ¡£

È»ºóÔÙÊáÀíÒ»ÏÂÁìÓò¶ÔÏóÖ®¼äµÄ¹ØÏµ£¬Ò»¸öÇóÖ°Õß¿ÉÒÔӦƸ¶à¸ö¹¤×÷»ú»á£¬Ò»¸ö¹¤×÷»ú»áÒ²¿ÉÒÔ±»¶à¸öÇóÖ°ÕßӦƸ£¬M2MµÄ¹ØÏµ£¬Öн鹫˾¿ÉÒÔ°üº¬¶à¸öÔ±¹¤£¬O2MµÄ¹ØÏµ¡£¶ÔÓÚÕâÑù¼òµ¥µÄ³¡¾°£¬Õâ¸ö½¨Ä£¾Í²î²»¶àÁË¡£

µ±È»ÎÒÃǵÄÒµÎñ³¡¾°ÍùÍù±ÈÕâ¸öÒª¸´ÔÓ£¬¶øÇÒ²»ÊÇËùÓеÄÃû´Ê¶¼ÊÇÁìÓò¶ÔÏóÒ²¿ÉÄÜÊÇÊôÐÔ£¬Ò²²»ÊÇËùÓе͝´Ê¶¼ÊÇ·½·¨Ò²¿ÉÄÜÊÇÁìÓò¶ÔÏó£¬ÔÙÕߣ¬¿´µÄ¼ûʵÌåºÃÕÒ£¬¿´²»¼ûµÄ¡¢Òþ²ØµÄ£¬ÐèÒªÉîÈëÀí½âÒµÎñ£¬ÐèÒª¡°ÎÞÖÐÉúÓС±²ÅÄܵõ½µÄ³éÏó¾ÍûÄÇôÈÝÒ×·¢ÏÖÁË£¬ËùÒÔÒª¾ßÌåÎÊÌâ¾ßÌå¶Ô´ý£¬Õâ¸ö½ø»¯µÄ¹ý³ÌÐèÒªÎÒÃÇÓкܺõÄÒµÎñÀí½âÁ¦£¬³éÏóÄÜÁ¦ÒÔ¼°½¨Ä£µÄ¾­Ñ飨֪µÀΪʲô¹«Ë¾µÄjob modelÀïÄÇôǿµ÷¼¼ÊõÈËÔ±µÄÒµÎñÀí½âÁ¦ºÍ³éÏóÄÜÁ¦Á˰ɣ©£¬±ÈÈçͨ³£Çé¿öÏ£¬¼Û¸ñºÍ¿â´æÖ»ÊǶ©µ¥ºÍÉÌÆ·µÄÒ»¸öÊôÐÔ£¬µ«ÊÇÔÚ°¢ÀïϵµçÉÌÒµÎñ³¡¾°Ï£¬¼Û¸ñ¼ÆËãºÍ¿â´æ¿Û¼õµÄ¸´Ôӳ̶ȿÉÒÔÈÃÄ㻳ÒÉÈËÉú£¬Òò´Ë×÷ΪµçÉÌÖÐ̨£¬°Ñ¼Û¸ñºÍ¿â´æµ¥¶Àµ±³ÉÒ»¸öÓò£¨Domain£©È¥¶Ô´ýÊǺܱØÒªµÄ¡£ÁíÍ⣬½¨Ä£²»ÊÇÒ»¸öÒ»´ÎÐԵŤ×÷£¬ÍùÍùËæ×ÅÒµÎñµÄ±ä»¯ÒÔ¼°ÎÒÃǶÔÒµÎñµÄÀí½âÔ½À´Ô½ÉîÈë²ÅÄÜ¿´ÇåϵͳµÄȫò£¬ËùÒÔµü´úÖØ¹¹ÊÇÃâ²»Á˵ģ¬Ò²¾ÍÊÇÒªAgile Modelling¡£

Ä£ÐÍÖØ¹¹

Ä£ÐÍͳһ

½¨Ä£µÄ¹ý³ÌºÜÏñäÈËÃþÏ󣬲»Í¬±³¾°ÈËÓò»Í¬µÄÊӽǿ´Í¬Ò»¸ö¶«Î÷£¬ÆäÀí½âÒ²ÊDz»Ò»ÑùµÄ¡£±ÈÈçÁ½¸öäÈ˶¼Ãþµ½´óÏó±Ç×Ó£¬Ò»¸öÈËÈÏΪÊÇÏñÉߣ¨»îµÄÄܶ¯£©£¬¶øÁíÒ»¸öÈËÈÏΪÏñÏû·ÀË®¹Ü£¨¿ÉÒÔÅçË®£©£¬ÄÇôËûÃǽ«ºÜÄѼ¯³É¡£Ë«·½¶¼ÎÞ·¨½ÓÊܶԷ½µÄÄ£ÐÍ£¬ÒòΪÄDz»·ûºÏ×Ô¼ºµÄÌåÑé¡£ÊÂʵÉÏ£¬ËûÃÇÐèÒªÒ»¸öеijéÏó£¬Õâ¸ö³éÏóÐèÒª°ÑÉߵġ°»î×ŵÄÌØÐÔ¡±ÓëÏû·ÀË®¹ÜµÄ¡°ÅçË®¹¦ÄÜ¡±ºÏ²¢µ½Ò»Æð£¬¶øÕâ¸ö³éÏó»¹Ó¦¸ÃÅųýÏÈǰÁ½¸öÄ£ÐÍÖÐһЩ²»È·Çеĺ¬ÒåºÍÊôÐÔ£¬±ÈÈç¶¾ÑÀ£¬»òÕß¾íÆðÀ´·Åµ½Ïû·À³µÉÏÈ¥µÄÐÐΪ£¬Õâ¾ÍÊÇÄ£Ð͵Äͳһ¡£Í³Ò»ÍêµÄÄ£ÐÍÒ²Ðí»¹²»½Ð´óÏó±Ç×Ó£¬µ«ÊÇÒѾ­ºÜ½Ó½ü´óÏó±Ç×ÓµÄÊôÐԺ͹¦ÄÜÁË£¬Ëæ×ÅÎÒÃǶÔÄ£ÐͶÔÏó¡¢¶ÔÒµÎñÀí½âµÄÔ½À´Ô½ÉîÈë¡¢Ô½À´Ô½Í¸³¹£¬ÎÒÃǻ᲻¶ÏµÄµ÷ÕûÑÝ»¯ÎÒÃǵÄÄ£ÐÍ£¬ËùÒÔ½¨Ä£²»ÊÇÒ»¸öone-time offµÄ¹¤×÷£¬¶øÊÇÒ»¸ö³ÖÐø²»¶ÏÑÝ»¯Öع¹µÄ¹ý³Ì¡£

Ä£ÐÍÑÝ»¯

ÊÀ½çÉÏΨһ²»±äµÄ¾ÍÊDZ仯£¬Ä£ÐͺʹúÂëÒ»ÑùÒ²ÐèÒª²»¶ÏµÄÖØ¹¹ºÍ¾«»¯£¬Ã¿Ò»´ÎµÄ¾«»¯Ö®ºó£¬¿ª·¢ÈËÔ±Ó¦¸Ã¶ÔÁìÓò֪ʶÓÐÁ˸ü¼ÓÇåÎúµÄÈÏʶ¡£ÕâʹµÃÀí½âÉϵÄÍ»ÆÆ³ÉΪ¿ÉÄÜ£¬Ö®ºó£¬Ò»ÏµÁпìËٵĸıäµÃµ½Á˸ü·ûºÏÓû§ÐèÒª²¢¸ü¼ÓÇкÏʵ¼ÊµÄÄ£ÐÍ¡£Æä¹¦ÄÜÐÔ¼°ËµÃ÷ÐÔ¼±ËÙÔöÇ¿£¬¶ø¸´ÔÓÐÔÈ´ËæÖ®Ïûʧ¡£ÕâÖÖÍ»ÆÆÐèÒªÎÒÃǶÔÒµÎñÓиü¼ÓÉî¿ÌµÄÁìÎòºÍ˼¿¼£¬È»ºóÔÙ¼ÓÉÏÖØ¹¹µÄÓÂÆøºÍÄÜÁ¦£¬ÓÂÆøÊÇÏîÄ¿¹¤ÆÚºÜ½ôÄã¸Ò²»¸ÒÖØ¹¹£¬ÄÜÁ¦ÊÇÄãÓÐûÓÐÍ걸µÄCI±£Ö¤ÄãµÄÖØ¹¹²»ÆÆ»µÏÖÓеÄÒµÎñÂß¼­¡£

ʵÌåÔÚÑݱä

ÒÔ¿ªÆªµÄÒøÐÐÕ˺ÅΪÀý£¬¼ÙÈçÒ»¿ªÊ¼Õ˺Ŷ¼ÓÐwithdraw£¨È¡Ç®£©µÄÐÐΪ£¬´ËʱֻÐèÒªÔÚAccountÉϼÓÉÏwithdraw·½·¨¾ÍºÃÁË¡£

- ÑݱäÒ»£º

Ëæ×ÅÒµÎñµÄ·¢Õ¹£¬ÎÒÃÇÐèÒªÖ§³ÖATMÕ˺źÍOnlineÕ˺ţ¬¶øOnlineÕ˺ÅÊDz»ÄÜwithdrawµÄ£¬´Ëʱ×î²îµÄ×ö·¨ÊDZ£³ÖÄ£ÐͲ»±ä£¬¶øÊÇÔÚwithdraw·½·¨ÖÐÅжÏÈç¹ûÊÇOnlineAccountÔòÅ׳öÒì³£¡£ÕâÖÖ¼òµ¥µÄ´úÂë¶ÑÆö¿ÉÒÔÂú×ãÒµÎñ¹¦ÄÜ£¬µ«ÊÇÆäÒµÎñÓïÒåÍêÈ«±»Ñڸǡ£¸üºÃµÄÖØ¹¹·½·¨Ó¦¸ÃÊǽ«withdraw³é³ÉÒ»¸ö½Ó¿ÚIWithdrawable¡£

- Ñݱä¶þ£º

ºÃµÄ£¬Ã»ÓÐʲô¿ÉÒÔ×èµ²ÒµÎñ¶Ô±ä»¯µÄÏòÍù¡£ÏÖÔÚ¹«Ë¾³öÓÚ°²È«ÐԵĿ¼ÂÇ£¬ÎªÐ¿ªÍ¨µÄATMAccountÉèÖÃÁËÈ¡¿îÉÏÏߣ¬³¬¹ýÔò²»ÄÜÖ§È¡¡£¼òµ¥×ö·¨ÊÇÔÚIWithdrawableÖÐÔÙ¼ÓÈëÒ»¸ösetLimitÐÐΪ£¬¿ÉÊÇÎÒÃDz¢²»Ïë¸Ä¶¯Ó°Ïìµ½ÀϵÄÕ˺ÅÒµÎñ£¬ËùÒÔ¸üºÃµÄÖØ¹¹Ó¦¸ÃÊÇÖØÐÂдһ¸öILimitedWithdrawable½Ó¿Ú£¬ÈÃÆä¼Ì³ÐÀϽӿڣ¬ÕâÑùÀϵĴúÂë¾Í¿ÉÒÔ±£³Ö²»±äÁË¡£

ͨ¹ýÉÏÃæµÄÀý×Ó£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÁìÓòÄ£ÐͺÍÃæÏò¶ÔÏóÊÇÒ»¶ÔÂÏÉúÐֵܣ¬ÎÒÃÇ»áÓõ½´óÁ¿µÄOOÔ­Ôò£¬±ÈÈçÉÏÃæµÄÖØ¹¹¾ÍÓõ½ÁËSOLIDµÄSRP£¨µ¥Ò»Ö°Ô𣩺ÍOCP£¨¿ª±ÕÔ­Ôò£©¡£ÔÚʵ¼Ê¹¤×÷ÖУ¬ÎÒµÄÈ·Ò²ÓÐÕâÑùµÄÌå»á£¬×Ô´Ó¼ùÐÐDDDÒÔºó£¬ÎÒÃDzÉÓÃOOAºÍOODµÄʱºò±ÈÒÔǰÃ÷ÏÔ¶àÁ˺ܶ࣬OOµÄÄÜÁ¦Ò²ÔÚ²»¶ÏµÄÌáÉý¡£

ÒýÈëгéÏó

»¹ÊÇÒÔ¿ªÆªµÄתÕËÀ´¾Ù¸öÀý×Ó£¬¼ÙÈçתÕËÒµÎñ¿ªÊ¼±äµÄ¸´ÔÓ£¬ÒªÖ§³ÖÏÖ½ð£¬ÐÅÓÿ¨£¬Ö§¸¶±¦£¬±ÈÌØ±ÒµÈ¶àÖÖͨµÀ£¬ÇÒûÖÖͨµÀµÄÔ¼Êø²»Ò»Ñù£¬»¹ÒªÖ§³ÖÒ»¶Ô¶àµÄתÕË¡£ÄÇôÄ㻹ÊÇÓÃÒ»¸ötransfer(fromAccount, toAccount)¾Í²»ºÏÊÊÁË£¬¿ÉÄÜÐèÒª³éÏó³öÒ»¸öרÃŵÄÁìÓò¶ÔÏóTransaction£¬ÕâÑù²ÅÄܸüºÃµÄ±í´ïÒµÎñ£¬ÆäÑÝ»¯¹ý³ÌÈçÏ£º

¾ÛºÏ¸ù

¾ÛºÏ¸ù£¨Aggregate Root£©ÊÇDDDÖеÄÒ»¸ö¸ÅÄÊÇÒ»ÖÖ¸ü´ó·¶Î§µÄ·â×°£¬°ÑÒ»×éÓÐÏàͬÉúÃüÖÜÆÚ¡¢ÔÚÒµÎñÉϲ»¿É·Ö¸ôµÄʵÌåºÍÖµ¶ÔÏó·ÅÔÚÒ»Æð¿¼ÂÇ£¬Ö»ÓиùʵÌå¿ÉÒÔ¶ÔÍⱩ¶ÒýÓã¬Ò²ÊÇÒ»ÖÖÄÚ¾ÛÐԵıíÏÖ¡£

È·¶¨¾ÛºÏ±ß½çÒªÂú×ã¹Ì¶¨¹æÔò£¨Invariant£©£¬ÊÇÖ¸ÔÚÊý¾Ý±ä»¯Ê±±ØÐë±£³ÖµÄÒ»ÖÂÐÔ¹æÔò£¬¾ßÌ广ÔòÈçÏÂ

1.¸ùʵÌå¾ßÓÐÈ«¾Ö±êʶ£¬×îÖÕ¸ºÔð¼ì²é¹æ¶¨¹æÔò

2.¾ÛºÏÄÚµÄʵÌå¾ßÓб¾µØ±êʶ£¬ÕâЩ±êʶÔÚAggregateÄÚ²¿²ÅÊÇΨһµÄ

3.Íⲿ¶ÔÏó²»ÄÜÒýÓóý¸ùEntityÖ®ÍâµÄÈκÎÄÚ²¿¶ÔÏó

4.Ö»ÓÐAggregateµÄ¸ùEntity²ÅÄÜÖ±½Óͨ¹ýÊý¾Ý¿â²éѯ»ñÈ¡£¬ÆäËû¶ÔÏó±ØÐëͨ¹ý±éÀú¹ØÁªÀ´·¢ÏÖ

5.AggegateÄÚ²¿µÄ¶ÔÏó¿ÉÒÔ±£³Ö¶ÔÆäËûAggregate¸ùµÄÒýÓÃ

6. Aggregate±ß½çÄÚµÄÈκζÔÏóÐÞ¸Äʱ£¬Õû¸öAggregateµÄËùÓй̶¨¹æÔò¶¼±ØÐëÂú×ã

»¹ÊÇ¿´ÒøÐеÄÀý×Ó£¬Account£¨Õ˺ţ©ÊÇCustomerInfo£¨¿Í»§ÐÅÏ¢£©EntityºÍAddress£¨Öµ¶ÔÏ󣩵ľۺϸù£¬Tansaction£¨½»Ò×£©ÊÇÁ÷Ë®£¨Journal£©µÄ¾ÛºÏ¸ù£¬ÒòΪÁ÷Ë®ÊÇÒòΪ½»ÒײŲúÉúµÄ£¬¾ßÓÐÏàͬµÄÉúÃüÖÜÆÚ¡£

×îºóÌáÐÑһϣ¬¾ÛºÏ¸ùÊÇÒ»¸öÂß¼­¸ÅÄÖ÷¹ÛÐÔºÜÇ¿£¬ËùÒÔÔÚ½¨Ä£¹ý³ÌÖкÜÈÝÒײúÉú·ÖÆç£¬Òò´ËÔÚÈÕ³£¹¤×÷ÖÐǧÍò²»Òª½ÌÌõ£¬°ÑÎÕסһÌõÖ÷ÒªÔ­Ôò£¬ÎÒÃǵÄ×îÖÕÄ¿µÄÊÇΪÁËÒµÎñÓïÒåÏÔÏÖ»¯£¬Èç¹ûÒòΪ¾ÛºÏ¸ù°ÑÄ£ÐÍ۵ĻÞɬÄѶ®ÄǾ͵ò»³¥Ê§ÁË

ʹÓÃÁìÓò·þÎñ

ʲôÊÇÁìÓò·þÎñ

ÓÐЩÁìÓòÖе͝×÷£¬ËüÃÇÊÇһЩ¶¯´Ê£¬¿´ÉÏȥȴ²»ÊôÓÚÈκζÔÏó¡£ËüÃÇ´ú±íÁËÁìÓòÖеÄÒ»¸öÖØÒªµÄÐÐΪ£¬ËùÒÔ²»ÄܺöÂÔËüÃÇ»òÕß¼òµ¥µØ°ÑËüÃǺϲ¢µ½Ä³¸öʵÌå»òÕßÖµ¶ÔÏóÖС£µ±ÕâÑùµÄÐÐΪ´ÓÁìÓòÖб»Ê¶±ð³öÀ´Ê±£¬×î¼Ñʵ¼ùÊǽ«ËüÉùÃ÷³ÉÒ»¸ö·þÎñ¡£ÕâÑùµÄ¶ÔÏó²»ÔÙÓµÓÐÄÚÖõÄ״̬¡£ËüµÄ×÷Óýö½öÊÇΪÁìÓòÌṩÏàÓ¦µÄ¹¦ÄÜ¡£ServiceÍùÍùÊÇÒÔÒ»¸ö»î¶¯À´ÃüÃû£¬¶ø²»ÊÇEntityÀ´ÃüÃû¡£ÀýÈ翪ƪתÕ˵ÄÀý×Ó£¬×ªÕË£¨transfer£©Õâ¸öÐÐΪÊÇÒ»¸ö·Ç³£ÖØÒªµÄÁìÓò¸ÅÄµ«ÊÇËüÊÇ·¢ÉúÔÚÁ½¸öÕ˺ÅÖ®¼äµÄ£¬¹éÊôÓÚÕ˺ÅEntity²¢²»ºÏÊÊ£¬ÒòΪһ¸öÕ˺ÅEntityûÓбØÒªÈ¥¹ØÁªËûÐèҪתÕ˵ÄÕ˺ÅEntity£¬ÕâÖÖÇé¿öÏ£¬Ê¹ÓÃMoneyTransferDomainService¾Í±È½ÏºÏÊÊÁË¡£

ʶ±ðÁìÓò·þÎñ£¬Ö÷Òª¿´ËüÊÇ·ñÂú×ãÒÔÏÂÈý¸öÌØÕ÷£º

1. ·þÎñÖ´ÐеIJÙ×÷´ú±íÁËÒ»¸öÁìÓò¸ÅÄÕâ¸öÁìÓò¸ÅÄîÎÞ·¨×ÔÈ»µØÁ¥ÊôÓÚÒ»¸öʵÌå»òÕßÖµ¶ÔÏó¡£

2. ±»Ö´ÐеIJÙ×÷Éæ¼°µ½ÁìÓòÖÐµÄÆäËûµÄ¶ÔÏó¡£

3. ²Ù×÷ÊÇÎÞ״̬µÄ¡£

ÁìÓò·þÎñÏÝÚå

ÔÚʹÓÃÁìÓò·þÎñÊ±ÒªÌØ±ðµ±ÐÄ£¬Ò»¸ö±È½Ï³£¼ûµÄ´íÎóÊÇûÓÐŬÁ¦ÎªÐÐΪÕÒµ½Ò»¸öÊʵ±µÄ¶ÔÏ󣬾ÍÖ±½Ó³éÏó³ÉÁìÓò·þÎñ£¬Õâ»áʹÎÒÃǵĴúÂëÖð½¥×ª»¯Îª¹ý³ÌʽµÄ±à³Ì£¬Ò»¸ö¼«¶ËµÄÀý×ÓÊǰÑËùÓеÄÐÐΪ¶¼·Åµ½ÁìÓò·þÎñÖУ¬¶øÁìÓòÄ£ÐÍÍË»¯³ÉÖ»ÓÐÊôÐÔµÄÆ¶ÑªDO£¬ÄÇDDD¾ÍûÓÐÈκÎÒâÒåÁË¡£ËùÒÔÒ»¶¨ÒªÉîÈë˼¿¼£¬¼È²»ÄÜÃãÇ¿½«ÐÐΪ·Åµ½²»·ûºÏ¶ÔÏó¶¨ÒåµÄ¶ÔÏóÖУ¬ÆÆ»µ¶ÔÏóµÄÄÚ¾ÛÐÔ£¬Ê¹ÆäÓïÒå±äµÃÄ£ºý¡£Ò²²»Äܲ»¼Ó˼¿¼µÄ¶¼·Åµ½ÁìÓò·þÎñÖУ¬´Ó¶øÍË»¯³ÉÃæÏò¹ý³ÌµÄ±à³Ì¡£

Ó¦Ó÷þÎñºÍÁìÓò·þÎñÈçºÎ»®·Ö

ÔÚÁìÓò½¨Ä£ÖУ¬ÎÒÃÇÒ»°ã½«ÏµÍ³»®·ÖÈý¸ö´óµÄ²ã´Î£¬¼´Ó¦Óò㣨Application Layer£©£¬ÁìÓò²ã£¨Domain Layer£©ºÍ»ù´¡ÊµÊ©²ã£¨Infrastructure Layer£©£¬¹ØÓÚÕâÈý¸ö²ã´ÎµÄÏêϸÄÚÈÝ¿ÉÒԲο¼ÎÒµÄÁíһƪSOFA¿ò¼ÜµÄ·Ö²ãÉè¼Æ¡£¿ÉÒÔ¿´µ½ÔÚApp²ãºÍDomain²ã¶¼ÓзþÎñ£¨Service£©£¬ÕâÁ½¸öServiceÈçºÎ»®·ÖÄØ£¬Ê²Ã´ÑùµÄ¹¦ÄÜÓ¦¸Ã·ÅÔÚÓ¦Óò㣬ʲôÑùµÄ¹¦ÄÜÓ¦¸Ã·ÅÔÚÁìÓò²ãÄØ£¿

¾ö¶¨Ò»¸ö·þÎñ£¨Service£©Ó¦¸Ã¹éÊôÓÚÄÄÒ»²ãÊǺÜÀ§Äѵġ£Èç¹ûËùÖ´ÐеIJÙ×÷¸ÅÄîÉÏÊôÓÚÓ¦Óò㣬ÄÇô·þÎñ¾ÍÓ¦¸Ã·Åµ½Õâ¸ö²ã¡£Èç¹û²Ù×÷ÊǹØÓÚÁìÓò¶ÔÏóµÄ£¬¶øÇÒȷʵÊÇÓëÁìÓòÓйصġ¢ÎªÁìÓòµÄÐèÒª·þÎñ£¬ÄÇôËü¾ÍÓ¦¸ÃÊôÓÚÁìÓò²ã¡£×ܵÄÀ´Ëµ£¬Éæ¼°µ½ÖØÒªÁìÓò¸ÅÄîµÄÐÐΪӦ¸Ã·ÅÔÚDomain²ã£¬¶øÆäËü·ÇÁìÓòÂß¼­µÄ¼¼Êõ´úÂë·ÅÔÚApp²ã£¬ÀýÈç²ÎÊýµÄ½âÎö£¬ÉÏÏÂÎĵÄ×é×°£¬µ÷ÓÃÁìÓò·þÎñ£¬ÏûÏ¢·¢Ë͵ȡ£»¹ÊÇÒøÐÐתÕ˵ÄcaseΪÀý£¬ÏÂͼ¸ø³öÁË»®·ÖµÄ½¨Ò飺

±ß½çÉÏÏÂÎÄ

ÁìÓòʵÌåÊÇÓб߽çÉÏÏÂÎĵ쬱ÈÈçAppleÕâ¸öʵÌ岻ͬµÄÉÏÏÂÎÄ£¬±í´ïµÄº¬Òå¾ÍÍêÈ«²»Ò»Ñù£¬ÔÚË®¹ûµêËü¾ÍÊÇË®¹û£¬ÔÚÆ»¹ûרÂôµêËü¾ÍÊÇÊÖ»ú¡£

ËùÒԱ߽çÉÏÏÂÎÄ£¨Bounded Context£©ÔÚDDDÀïÃæÊÇÒ»¸ö·Ç³£ÖØÒªµÄ¸ÅÄBounded ContextÃ÷È·µØÏÞ¶¨ÁËÄ£Ð͵ÄÓ¦Ó÷¶Î§£¬ÔÚContextÖУ¬Òª±£Ö¤Ä£ÐÍÔÚÂß¼­ÉÏͳһ£¬¶ø²»Óÿ¼ÂÇËüÊDz»ÊÇÊÊÓÃÓڱ߽çÖ®ÍâµÄÇé¿ö¡£ÔÚÆäËûContextÖУ¬»áʹÓÃÆäËûÄ£ÐÍ£¬ÕâЩģÐ;ßÓв»Í¬µÄÊõÓï¡¢¸ÅÄî¡¢¹æÔòºÍUbiquitous LanguageµÄÐл°¡£

ÄÇô²»Í¬ContextϵÄÒµÎñÒª»¥ÏàͨÐÅÔõô°ìÄØ£¿Õâ¾ÍÉæ¼°¿ç±ß½çµÄ¼¯³ÉÁË£¬¼¯³É²»ÄÜÊǼòµ¥µÄHSFµ÷Ó㬶øÊÇÐèÒªÒ»¸öרÃŵķÀ¸¯²ã£¨Anti-Corruption£©×öת»¯£¬ÆäÒâÒåÖ÷ÒªÓÐÒÔÏÂÁ½µã£º

ºÍÍⲿÒÀÀµ½âñî

±ÜÃâÍⲿÁìÓò¸ÅÄîÎÛȾContextÄÚ²¿ÊµÌåÓïÒå

ÒÔÎÒÃÇÕæÊµµÄÒµÎñ³¡¾°¾Ù¸öÀý×Ó£¬±ÈÈç»áÔ±Õâ¸ö¸ÅÄîÔÚICBUÍøÕ¾ÊÇÖ¸ÍøÕ¾ÉϵÄBuyer£¬µ«ÊÇÔÚCRMÁìÓòÊÇÖ¸Customer£¬ËäÈ»ºÜ¶àµÄÊôÐÔ¶¼ÊÇÒ»ÑùµÄ£¬µ«ÊǶþÕßÔÚ²»Í¬µÄContextÏÂÆäÓïÒåºÍ¸ÅÄîÊÇÓвî±ðµÄ£¬ÎÒÃÇÐèÒªÓÃAC×öÒ»ÏÂת»»£º

ÒµÎñ¿ÉÊÓ»¯ºÍ¿ÉÅäÖû¯

ºÃµÄÁìÓò½¨Ä£¿ÉÒÔ½µµÍÓ¦Óõĸ´ÔÓÐÔ£¬¶ø¿ÉÊÓ»¯ºÍ¿ÉÅäÖû¯Ö÷ÒªÊǰïÖú´ó¼Ò£¨Ö÷ÒªÊǷǼ¼ÊõÈËÔ±£¬±ÈÈç²úÆ·£¬ÒµÎñºÍ¿Í»§£©Ö±¹ÛµØÁ˽âϵͳºÍÅäÖÃϵͳ£¬ÌṩÁËÒ»ÖÖ¡°code free¡±µÄ½â¾ö·½°¸£¬Ò²ÊÇSaaSÈí¼þµÄÖ÷ÒªÂôµã¡£Òª×¢ÒâµÄÊÇ¿ÉÊÓ»¯ºÍ¿ÉÅäÖû¯ÄÑÃâ»á¸øÏµÍ³Ôö¼Ó¶îÍâµÄ¸´ÔÓ¶È£¬±ØÐëÉ÷Ö®ÓÖÉ÷£¬×îºÃÊÇÄÜʹ¿ÉÊÓ»¯ºÍÅäÖû¯µÄÂß¼­ÓëÒµÎñÂß¼­¾¡Á¿ÉÙµÄñîºÏ£¬·ñÔòÆÆ»µÁËÔ­Óеļܹ¹£¬°ÑÊÂÇé¸ãµÄ¸ü¸´ÔӾ͵ò»³¥Ê§ÁË¡£

ÔÚ¿ÉÀ©Õ¹Éè¼ÆÖУ¬ÎÒÒѾ­½éÉÜÁËÎÒÃÇSOFA¼Ü¹¹ÊÇÈçºÎͨ¹ýÀ©Õ¹µãµÄÉè¼ÆÀ´Ö§³Å²»Í¬ÒµÎñ²îÒ컯µÄÐèÇóµÄ£¬ÄÇô¿É·ñ¸ü½øÒ»²½£¬ÎÒÃǽ«ÁìÓòµÄÐÐΪ£¨Ò²½ÐÄÜÁ¦£©ºÍÀ©Õ¹µãÓÿÉÊÓ»¯µÄ·½Ê½³ÊÏÖ³öÀ´£¬²¢¶ÔÓÚһЩ²»ÐèÒª±àÂëʵÏÖµÄÀ©Õ¹µãÓÃÅäÖõķ½Ê½È¥Íê³ÉÄØ¡£µ±È»ÊÇ¿ÉÒԵ쬱ÈÈ绹ÊÇ¿ªÆª×ªÕ˵ÄÀý×Ó£¬¶ÔÓÚ͸֧²ßÂÔOverdraftPolicyÕâ¸öÒµÎñÀ©Õ¹µã£¬ÐÂÀ´Ò»¸öÒµÎñ˵͸֧¶î¶È²»Äܳ¬¹ý1000£¬ÎÒÃÇ¿ÉÒÔÍêÈ«½áºÏ¹æÔòÒýÇæ½øÐÐÅäÖû¯Íê³É£¬¶ø²»ÐèÒª±àÂë¡£

ËùÒÔÎÒÄÜÏëµ½µÄÒ»ÖÖ»¹±È½ÏÓÅÑŵķ½Ê½£¬ÊÇͨ¹ýAnnotation×¢½âµÄ·½Ê½¶ÔÁìÓòÄÜÁ¦ºÍÀ©Õ¹µã½øÐбê×¢£¬È»ºóÔÚϵͳbootstrap½×¶Î£¬Í¨¹ý´úÂëɨÃèµÄ·½Ê½£¬½«ÕâЩÄÜÁ¦µãºÍÀ©Õ¹µãÊÕ¼¯ÆðÀ´ÉÏ´«µ½ÖÐÐÄ·þÎñÆ÷£¬È»ºóÔÙͨ¹ýGUIµÄ·½Ê½³ÊÏÖ³öÀ´£¬´Ó¶ø×öµ½ÒµÎñµÄ¿ÉÊÓ»¯ºÍ¿ÉÅäÖû¯¡£´ó¸ÅµÄʾÒâͼÈçÏ£º

ÓÐͬѧ¿ÉÄÜ»áÎÊÁ÷³ÌÒª²»Òª¿ÉÊÓ»¯£¬ÕâÀïÒª·ÖÇå³þÁ½¸ö¸ÅÄҵÎñÂß¼­Á÷ºÍ¹¤×÷Á÷£¬ºÜ¶àͬѧ»ìÏýÁËÕâÁ½¸ö¸ÅÄî¡£ÒµÎñÂß¼­Á÷ÊÇÏìÓ¦Ò»´ÎÓû§ÇëÇóµÄÒµÎñ´¦Àí¹ý³Ì£¬Æä±¾Éí¾ÍÊÇÒµÎñÂß¼­£¬¶ÔÆä±àÅźͿÉÊÓ»¯µÄÒâÒå²¢²»ÊǺܴó£¬ÎÞÍâºõÖ»ÊǰѴúÂëÂß¼­¿ÉÊÓ»¯ÁË£¬ÔÚÎÒÃǵÄSOFA¿ò¼ÜÖУ¬ÊÇͨ¹ýÀ©Õ¹µãºÍ²ßÂÔģʽÀ´´¦ÀíÒµÎñµÄ·ÖÖ§Çé¿ö£¬¶øÎÒ¿´µ½ÎÒÃǰ¢ÀïºÜ¶àµÄÄÚ²¿ÏµÍ³½«ÕâÖÖÏìÓ¦Ò»´ÎÓû§ÇëÇóµÄÒµÎñÂß¼­ÓúÜÖØµÄ¹¤×÷Á÷ÒýÇæÀ´×ö£¬ÃÀÆäÃûÔ»Á÷³Ì¿É±àÅÅ£¬ÊµÖÊÉÏÍùÍùÊǰѼòµ¥µÄÊÂÇ鸴ÔÓ»¯ÁË¡£¶ø¹¤×÷Á÷ÊÇÖ¸Íê³ÉÒ»ÏîÈÎÎñËùÐèÒª²»Í¬½ÚµãµÄÁ¬½Ó£¬½ÚµãÖ÷Òª·ÖΪ×Ô¶¯½ÚµãºÍÈ˹¤½Úµã£¬ÆäÖÐÿ¸öÈ˹¤½Úµã¶¼ÐèÒªÓû§µÄ²ÎÓ룬Ҳ¾ÍÊÇÏìÓ¦Ò»´ÎÓû§µÄÇëÇ󣬱ÈÈçÉóÅúÁ÷³ÌÖеľ­ÀíÉóÅú½Úµã£¬CRMÏúÊÛ¹ý³ÌµÄÒµÎñÔ±µÄ´¦Àí½ÚµãµÈµÈ¡£´Ëʱ¿ÉÒÔ¿¼ÂÇʹÓù¤×÷Á÷ÒýÇæ£¬ÌرðÊǵ±ÄãµÄϵͳÐèÒªÈÃÓû§×Ô¶¨ÒåÁ÷³ÌµÄʱºò£¬ÄǾͲ»µÃ²»Ê¹ÓÿÉÊÓ»¯ºÍ¿ÉÅäÖõŤ×÷Á÷ÒýÇæÁË£¬³ý´ËÖ®Í⣬×îºÃ²»Òª×ÔÕÒÂé·³¡£ÎÒÔøÔÚÒøÐй¤×÷¹ý£¬Ç×ÑÛ¿´¼û¹ýIBMÊÇÔõôºöÓÆÒøÐÐʹÓÃËüÃǵÄBPMϵͳ£¬È»ºó°ÑϵͳŪµÄ¾Þ¸´ÔÓÎޱȣ¬ËùÒÔÎÒ¶Ô¹¤×÷Á÷ÒýÇæµÄÓ¡Ïó²¢²»ºÃ£¬µ±È»Ò²²»ÅųýÓÐÓõÄÌØ±ðºÏÊʵݸÀý£¬Ö»ÊÇÎÒ»¹Ã»¿´¼û£¬Èç¹ûÓп´¼ûµÄͬѧÂé·³¸æËßÎÒÒ»Éù£¬Ñ§Ï°Ò»Ï¡£ÒòΪÎÒÃÇÏÖÔÚ»¹Ã»ÓÐÈÃÓû§×Ô¶¨ÒåÁ÷³ÌµÄËßÇó£¬ËùÒÔʹÓù¤×÷Á÷ÒýÇæ²¢²»ÔÚÎÒÃÇÏֽ׶εĿ¼ÂÇ·¶Î§Ö®ÄÚ¡£

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

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ