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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁìÓòÄ£ÐÍdzÎö
 
×÷Õߣº Ìð²Ë²¨²¨
  3035  次浏览      27
 2020-10-23 
 
±à¼­ÍƼö:
´ËÎÄÖ÷Òª½éÉÜÁËÆ¶ÑªÄ£ÐÍ¡¢ÁìÓòÄ£ÐÍ¡¢Æ¶ÑªÄ£ÐÍÖÐFacadeÓкÎÓõÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ÁìÓòÄ£ÐÍ

×î½ütaowenͬѧÁ¬Ðø·¢ÆðÁËÁ½Æð¹ØÓÚÆ¶ÑªÄ£ÐͺÍÁìÓòÄ£Ð͵ÄÌÖÂÛ£¬ÒýÆðÁË´ó¼ÒµÄ¹ã·ºÈÈÁÒµÄÌÖÂÛ£¬µ«ÊÇÌÖÂÛ(»òÕß˵ÊÇÕùÂÛ)µÄ½á¹ûµ½µ× ÔõÑù£¬ÎÒÏëÖµµÃÉÌȶ¡£ÎÊÌâÊÇ´ó¼Ò¶ÔƶѪģÐͺÍÁìÓòÄ£ÐͶ¼ÓÐ×Ô¼ºµÄ¿´·¨£¬Èç¹ûûÓжԴ˴ﵽ¸ÅÄîÉϵĹ²Ê¶£¬ÄÇôÌÖÂ۵Ľá¹ûÓ¦¸Ã¿ÉÏë¶øÖª£¬ÌÖÂÛµÄÊÕ»ñÒ²ÊÇÓеģ¬ ÖÁÉÙÖªµÀÁË·ÖÆçµÄ´æÔÚ¡£ÎªÁËʹÎÊÌâ¾ßÓÐÈ·¶¨ÐÔ£¬ÎÒÏë´ÓÒ»¸ö¼òµ¥Àý×Ó×ÅÊÖ£¬ÓÃÎÒ¶ÔÆ¶ÑªÄ£ÐͺÍÁìÓòÄ£Ð͵ĸÅÄîÀ´·Ö±ðʵÏÖÀý×Ó¡£ÖÁÓÚÎÒµÄÀí½â¶ÔÓë·ñ£¬´ó¼Ò¿ÉÒÔ×ö ÆÀÅУ¬ÖÁÉÙÓиö¿ÉÒÔÆÀÅеıê×¼ÔÚÕâ¡£

Ò»¸öÀý×Ó

ÎÒÒª¾ÙµÄÊÇÒ»¸öÒøÐÐתÕʵÄÀý×Ó£¬ÓÖÊÇÒ»¸ö±»ÓÃÀÄÁ˵ÄÀý×Ó¡£µ«¼´Ê¹Õâ¸öÀý×ÓÒ²²»ÊÇ×Ô¼ºÏë³öÀ´µÄ£¬¶øÊÇØâÇÔµÄ<<POJOs in Action>>ÖеÄÀý×Ó£¬Ô­ÁÂÎÒ¿ÉÁ¯µÄÏëÏñÁ¦ ¡£µ±Ç®´ÓÒ»¸öÕÊ»§×ªµ½ÁíÒ»¸öÕÊ»§Ê±£¬×ªÕʵĽð¶î²»Äܳ¬¹ýµÚÒ»¸öÕÊ»§µÄ´æ¿îÓà¶î£¬Óà¶î×ÜÊý²»Äܱ䣬ǮֻÊÇ´ÓÒ»¸öÕË»§Á÷ÏòÁíÒ»¸öÕÊ»§£¬Òò´ËËüÃDZØÐëÔÚÒ»¸öÊÂÎñÄÚÍê³É£¬Ã¿´ÎÊÂÎñ³É¹¦Íê³É¶¼Òª¼Ç¼´Ë´ÎתÕÊÊÂÎñ£¬ÕâÊÇËùÓеĹæÔò¡£

ƶѪģÐÍ

ÎÒÃÇÊ×ÏÈÓÃÆ¶ÑªÄ£ÐÍÀ´ÊµÏÖ¡£ËùνƶѪģÐ;ÍÊÇÄ£ÐͶÔÏóÖ®¼ä´æÔÚÍêÕûµÄ¹ØÁª(¿ÉÄÜ´æÔÚ¶àÓàµÄ¹ØÁª)£¬µ«ÊǶÔÏó³ýÁËgetºÍset·½ÍâÍ⼸ºõ¾ÍûÓÐÆäËüµÄ·½ ·¨£¬Õû¸ö¶ÔÏó³äµ±µÄ¾ÍÊÇÒ»¸öÊý¾ÝÈÝÆ÷£¬ÓÃCÓïÑԵϰÀ´Ëµ¾ÍÊÇÒ»¸ö½á¹¹Ì壬ËùÓеÄÒµÎñ·½·¨¶¼ÔÚÒ»¸öÎÞ״̬µÄServiceÀàÖÐʵÏÖ£¬ServiceÀà½ö½ö°ü º¬Ò»Ð©ÐÐΪ¡£ÕâÊÇJava Web³ÌÐò²ÉÓõÄ×î³£Óÿª·¢Ä£ÐÍ£¬Äã¿ÉÄܲÉÓõľÍÊÇÕâÖÖ·½·¨£¬ËäÈ»¿ÉÄܲ»ÖªµÀËüÓиö&ldquo;ƶѪģÐÍ&rdquo;µÄ³ÆºÅ£¬ÕâÒª¶à ¿÷Martin Flower(Õâ¸ö¼Ò»ï¹ß»á·¢Ã÷ÊõÓ)¡£

°ü½á¹¹

ÔÚÌÖÂÛ¾ßÌåµÄʵÏÖ֮ǰ£¬ÎÒÃÇÏÈÀ´¿´À´Æ¶ÑªÄ£Ð͵İü½á¹¹£¬ÒÔ±ã¶Ô´ËÓиö´ó¸ÅµÄÁ˽⡣

ƶѪģÐ͵ÄʵÏÖÒ»°ã°üÀ¨Èçϰü£º

dao£º¸ºÔð³Ö¾Ã»¯Âß¼­

model£º°üº¬Êý¾Ý¶ÔÏó£¬ÊÇservice²Ù×ݵĶÔÏó

service£º·ÅÖÃËùÓеķþÎñÀ࣬ÆäÖаüº¬ÁËËùÓеÄÒµÎñÂß¼­

facade£ºÌṩ¶ÔUI²ã·ÃÎʵÄÈë¿Ú

´úÂëʵÏÖ

ÏÈ¿´model°üµÄÁ½¸öÀ࣬AccountºÍTransferTransaction¶ÔÏ󣬷ֱð´ú±íÕÊ»§ºÍÒ»´ÎתÕËÊÂÎñ¡£ÓÉÓÚËüÃDz»°üº¬ÒµÎñÂß¼­£¬¾ÍÊÇÒ»¸öÆÕͨµÄJava Bean£¬ÏÂÃæµÄ´úÂëÊ¡ÂÔÁËgetºÍset·½·¨¡£

public class Account {
private String accountId;
private BigDecimal balance;

public Account() {}
public Account(String accountId, BigDecimal balance) {
this.accountId = accountId;
this.balance = balance;
}
// getter and setter ....

}

 

public class TransferTransaction {
private Date timestamp;
private String fromAccountId;
private String toAccountId;
private BigDecimal amount;

public TransferTransaction() {}

public TransferTransaction(String fromAccountId, String toAccountId, BigDecimal amount, Date timestamp) {
this.fromAccountId = fromAccountId;
this.toAccountId = toAccountId;
this.amount = amount;
this.timestamp = timestamp;
}

// getter and setter ....
}

 

ÕâÁ½¸öÀàûʲô¿É˵µÄ£¬ËüÃǾÍÊÇһЩÊý¾ÝÈÝÆ÷¡£½ÓÏÂÀ´¿´service°üÖÐTransferService½Ó¿ÚºÍËüµÄʵÏÖ TransferServiceImpl¡£TransferService¶¨ÒåÁËתÕË·þÎñµÄ½Ó¿Ú£¬TransferServiceImplÔòÌṩÁËתÕË·þ ÎñµÄʵÏÖ¡£

public interface TransferService {
TransferTransaction transfer (String fromAccountId, String toAccountId, BigDecimal amount)
throws AccountNotExistedException, AccountUnderflowException;
}

 

public class TransferServiceImpl implements TransferService {
private AccountDAO accountDAO;
private TransferTransactionDAO transferTransactionDAO;

public TransferServiceImpl (AccountDAO accountDAO,
TransferTransactionDAO transferTransactionDAO) {
this.accountDAO = accountDAO;
this.transferTransactionDAO = transferTransactionDAO;

}

public TransferTransaction transfer (String fromAccountId, String toAccountId,
BigDecimal amount) throws AccountNotExistedException, AccountUnderflowException {
Validate.isTrue (amount.compareTo(BigDecimal.ZERO) > 0);

Account fromAccount = accountDAO.findAccount(fromAccountId);
if (fromAccount == null) throw new AccountNotExistedException (fromAccountId);
if (fromAccount.getBalance( ).compareTo(amount) < 0) {
throw new AccountUnderflowException (fromAccount, amount);
}

Account toAccount = accountDAO.findAccount (toAccountId);
if (toAccount == null) throw new AccountNotExistedException (toAccountId);
fromAccount.setBalance (fromAccount.getBalance( ).subtract(amount));
toAccount.setBalance (toAccount.getBalance().add(amount));

accountDAO.updateAccount (fromAccount); // ¶ÔHibernateÀ´ËµÕâ²»ÊDZØÐëµÄ
accountDAO.updateAccount (toAccount); // ¶ÔHibernateÀ´ËµÕâ²»ÊDZØÐëµÄ
return transferTransactionDAO.create (fromAccountId, toAccountId, amount);
}
}

TransferServiceImplÀàʹÓÃÁËAccountDAOºÍTranferTransactionDAO£¬ËüµÄtransfer·½·¨¸ºÔðÕû¸ö תÕʲÙ×÷£¬ËüÊ×ÏÈÅжÏתÕʵĽð¶î±ØÐë´óÓÚ0£¬È»ºóÅжÏfromAccountIdºÍtoAccountIdÊÇÒ»¸ö´æÔÚµÄAccountµÄ accountId£¬Èç¹û²»´æÔÚÅ×AccountNotExsitedException¡£½Ó×ÅÅжÏתÕʵĽð¶îÊÇ·ñ´óÓÚfromAccountµÄÓà¶î£¬Èç ¹ûÊÇÔòÅ×AccountUnderflowException¡£½Ó×Å·Ö±ðµ÷ÓÃfromAccountºÍtoAccountµÄsetBalanceÀ´¸üÐÂËü ÃǵÄÓà¶î¡£×îºó±£´æµ½Êý¾Ý¿â²¢¼Ç¼½»Òס£TransferServiceImpl¸ºÔðËùÓеÄÒµÎñÂß¼­£¬ÑéÖ¤ÊÇ·ñ³¬¶îÌáÈ¡²¢¸üÐÂÕÊ»§Óà¶î¡£Ò»Çв¢²»¸´ÔÓ£¬¶Ô ÓÚÕâ¸öÀý×ÓÀ´Ëµ£¬Æ¶ÑªÄ£Ð͹¤×÷µÃ·Ç³£ºÃ£¡ÕâÊÇÒòΪÕâ¸öÀý×ÓÏ൱¼òµ¥£¬ÒµÎñÂß¼­Ò²²»¸´ÔÓ£¬Ò»µ©ÒµÎñÂß¼­±äµÃ¸´ÔÓ£¬TransferServiceImpl¾Í »áÅòÕÍ¡£

ÓÅȱµã

ƶѪģÐ͵ÄÓŵãÊǺÜÃ÷ÏԵģº

±»Ðí¶à³ÌÐòÔ±ËùÕÆÎÕ£¬Ðí¶à½Ì²Ä²ÉÓõÄÊÇÕâÖÖÄ£ÐÍ£¬¶ÔÓÚ³õѧÕߣ¬ÕâÖÖÄ£ÐͺÜ×ÔÈ»£¬ÉõÖÁ±»ºÜ¶àÈËÈÏΪÊÇjavaÖÐ×îÕýͳµÄÄ£ÐÍ¡£

Ëü·Ç³£¼òµ¥£¬¶ÔÓÚ²¢²»¸´ÔÓµÄÒµÎñ(תÕÊÒµÎñ)£¬Ëü¹¤×÷µÃºÜºÃ£¬¿ª·¢ÆðÀ´·Ç³£Ñ¸ËÙ¡£ËüËÆºõÒ²²»ÐèÒª¶ÔÁìÓòµÄ³ä·ÖÁ˽⣬ֻҪ¸ø³öҪʵÏÖ¹¦ÄܵÄÿһ¸ö²½Ö裬¾ÍÄÜʵÏÖËü¡£

ÊÂÎñ±ß½çÏ൱Çå³þ£¬Ò»°ãÀ´ËµserviceµÄÿ¸ö·½·¨¶¼¿ÉÒÔ¿´³ÉÒ»¸öÊÂÎñ£¬ÒòΪͨ³£ServiceµÄÿ¸ö·½·¨¶ÔÓ¦×ÅÒ»¸öÓÃÀý¡££¨ÔÚÕâ¸öÀý×ÓÖÐÎÒʹÓÃÁËfacade×÷ΪÊÂÎñ±ß½ç£¬ºóÃæÎÒÒª½²Õâ¸öÊǶàÓàµÄ)

ÆäȱµãΪҲÊǺÜÃ÷ÏԵģº

ËùÓеÄÒµÎñ¶¼ÔÚserviceÖд¦Àí£¬µ±ÒµÔ½À´Ô½¸´ÔÓʱ£¬service»á±äµÃÔ½À´Ô½ÅÓ´ó£¬×îÖÕÄÑÒÔÀí½âºÍά»¤¡£

½«ËùÓеÄÒµÎñ·ÅÔÚÎÞ״̬µÄserviceÖÐʵ¼ÊÉÏÊÇÒ»¸ö¹ý³Ì»¯µÄÉè¼Æ£¬ËüÔÚ×éÖ¯¸´ÔÓµÄÒµÎñ´æÔÚÌìÈ»µÄÁÓÊÆ£¬Ëæ×ÅÒµÎñµÄ¸´ÔÓ£¬ÒµÎñ»áÔÚserviceÖжà¸ö·½·¨¼äÖØ¸´¡£

µ±Ìí¼ÓÒ»¸öеÄUIʱ£¬ºÜ¶àÒµÎñÂß¼­µÃÖØÐÂд¡£ÀýÈ磬µ±ÒªÌṩWeb ServiceµÄ½Ó¿Úʱ£¬Ô­ÏÈΪWeb½çÃæÌṩµÄservice¾ÍºÜÄÑÖØÓ㬵¼ÖÂÖØ¸´µÄÒµÎñÂß¼­£¨ÔÚÆ¶ÑªÄ£Ð͵ķֲãͼÖпÉÒÔ¿´µÃ¸üÇå³þ£©£¬ÈçºÎ±£³ÖÒµÎñÂß¼­Ò»ÖÂÊǺܴóµÄÌôÕ½¡£

ÁìÓòÄ£ÐÍ

½ÓÏÂÀ´¿´¿´ÁìÓòÇý¶¯Ä£ÐÍ£¬ÓëÆ¶ÑªÄ£ÐÍÏà·´£¬ÁìÓòÄ£ÐÍÒª³Ðµ£¹Ø¼üÒµÎñÂß¼­£¬ÒµÎñÂß¼­ÔÚ¶à¸öÁìÓò¶ÔÏóÖ®¼ä·ÖÅ䣬¶øServiceÖ»ÊÇÍê³ÉһЩ²»ÊʺϷÅÔÚÄ£ÐÍÖеÄÒµÎñÂß¼­£¬ËüÊǷdz£±¡µÄÒ»²ã£¬ËüÖ¸»Ó¶à¸öÄ£ÐͶÔÏóÀ´Íê³ÉÒµÎñ¹¦ÄÜ¡£

°ü½á¹¹

ÁìÓòÄ£Ð͵ÄʵÏÖÒ»°ã°üº¬Èçϰü£º

infrastructure: ´ú±í»ù´¡ÉèÊ©²ã£¬Ò»°ã¸ºÔð¶ÔÏóµÄ³Ö¾Ã»¯¡£

domain£º´ú±íÁìÓò²ã¡£domain°üÖаüÀ¨Á½¸ö×Ó°ü£¬·Ö±ðÊÇmodelºÍservice¡£modelÖаüº¬Ä£ÐÍ¶Ô Ïó£¬Repository£¨DAO)½Ó¿Ú¡£Ëü¸ºÔð¹Ø¼üÒµÎñÂß¼­¡£service°üΪһϵÁеÄÁìÓò·þÎñ£¬Ö®ËùÒÔÐèÒªservice£¬°´ÕÕDDDµÄ¹Ûµã£¬ÊÇÒòΪÁìÓòÖеÄijЩ¸ÅÄî±¾ÖÊÊÇһЩÐÐΪ£¬²¢ÇÒ²»±ã·ÅÈëij¸öÄ£ÐͶÔÏóÖС£±ÈÈçתÕʲÙ×÷£¬ËüÊÇÒ»¸öÐÐΪ£¬²¢ÇÒËüÉæ¼°Èý¸ö¶Ô Ïó£¬fromAccount£¬toAccountºÍTransferTransaction£¬½«Ëü·ÅÈëÈÎÒ»¸ö¶ÔÏóÖж¼²»ºÃ¡£

application: ´ú±íÓ¦Óò㣬ËüµÄÖ÷ÒªÌṩ¶ÔUI²ãµÄͳһ·ÃÎʽӿڣ¬²¢×÷ΪÊÂÎñ½çÏÞ¡£

´úÂëʵÏÖ

ÏÖÔÚÀ´¿´ÊµÏÖ£¬ÕÕÀýÏÈ¿´modelÖеĶÔÏó£º

public class Account {
private String accountId;
private BigDecimal balance;

private OverdraftPolicy overdraftPolicy = NoOverdraftPolicy.INSTANCE;

public Account() {}

public Account(String accountId, BigDecimal balance) {
Validate.notEmpty(accountId);
Validate.isTrue(balance == null || balance.compareTo(BigDecimal.ZERO) >= 0);

this.accountId = accountId;
this.balance = balance == null ? BigDecimal.ZERO : balance;
}

public String getAccountId() {
return accountId;
}

public BigDecimal getBalance() {
return balance;
}

public void debit (BigDecimal amount) throws AccountUnderflowException {
Validate.isTrue (amount.compareTo(BigDecimal.ZERO) > 0);

if (!overdraftPolicy.isAllowed (this, amount)) {
throw new AccountUnderflowException (this, amount);
}
balance = balance.subtract(amount);
}

public void credit (BigDecimal amount) {
Validate.isTrue (amount.compareTo(BigDecimal.ZERO) > 0);

balance = balance.add(amount);
}

}

ÓëÆ¶ÑªÄ£Ð͵ÄÇø±ðÔÚÓÚAccountÀàÖаüº¬ÒµÎñ·½·¨(credit,debit)£¬×¢ÒâûÓÐset·½·¨£¬¶ÔAccountµÄ¸üÐÂÊÇͨ¹ýÒµÎñ·½·¨À´¸üРµÄ¡£ÓÉÓÚ¡°²»ÔÊÐí´ÓÕÊ»§È¡³ö´óÓÚ´æ¿îÓà¶îµÄ×ʽð¡±ÊÇÒ»ÌõÖØÒª¹æÔò£¬½«Ëü·ÅÔÚÒ»¸öµ¥¶ÀµÄ½Ó¿ÚOverdraftPolicyÖУ¬Ò²ÌṩÁËÁé»îÐÔ£¬µ±ÒµÎñ¹æÔò ±ä»¯Ê±£¬Ö»ÐèÒª¸Ä±äÕâ¸öʵÏ־ͿÉÒÔÁË¡£

TransferServiceImplÀࣺ

public class TransferServiceImpl implements TransferService {
private AccountRepository accountRepository;
private TransferTransactionRepository transferTransactionRepository;

public TransferServiceImpl (AccountRepository accountRepository,
TransferTransactionRepository transferTransactionRepository) {
this.accountRepository = accountRepository;
this.transferTransactionRepository = transferTransactionRepository;
}

public TransferTransaction transfer(String fromAccountId, String toAccountId,
BigDecimal amount) throws AccountNotExistedException, AccountUnderflowException {
Account fromAccount = accountRepository.findAccount (fromAccountId);
if (fromAccount == null) throw new AccountNotExistedException (fromAccountId);
Account toAccount = accountRepository.findAccount (toAccountId);
if (toAccount == null) throw new AccountNotExistedException(toAccountId);

fromAccount.debit(amount);
toAccount.credit(amount);

accountRepository.updateAccount (fromAccount); // ¶ÔHibernateÀ´ËµÕâ²»ÊDZØÐëµÄ
accountRepository.updateAccount (toAccount); // ¶ÔHibernateÀ´ËµÕâ²»ÊDZØÐëµÄ
return transferTransactionRepository.create (fromAccountId, toAccountId, amount);
}

}

ÓëÆ¶ÑªÄ£ÐÍÖеÄTransferServiceImplÏà±È£¬×îÖ÷ÒªµÄ¸Ä±äÔÚÓÚÒµÎñÂß¼­±»ÒÆ×ßÁË£¬ÓÉAccountÀàÀ´ÊµÏÖ¡£¶ÔÓÚÕâÑùÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÁìÓòÄ£ÐÍûÓÐÌ«¶àÓÅÊÆ£¬µ«ÊÇÈÔÈ»¿ÉÒÔ¿´µ½´úÂëµÄʵÏÖÒª¼òµ¥Ò»Ð©¡£µ±ÒµÎñ±äµÃ¸´ÔÓÖ®ºó£¬ÁìÓòÄ£Ð͵ÄÓÅÊÆ¾ÍÌåÏÖ³öÀ´ÁË¡£

ÓÅȱµã

ÆäÓŵãÊÇ£º

ÁìÓòÄ£ÐͲÉÓÃOOÉè¼Æ£¬Í¨¹ý½«Ö°Ôð·ÖÅäµ½ÏàÓ¦µÄÄ£ÐͶÔÏó»òService£¬¿ÉÒԺܺõÄ×éÖ¯ÒµÎñÂß¼­£¬µ±ÒµÎñ±äµÃ¸´ÔÓʱ£¬ÁìÓòÄ£ÐÍÏÔ³ö¾Þ´óµÄÓÅÊÆ¡£

µ±ÐèÒª¶à¸öUI½Ó¿Úʱ£¬ÁìÓòÄ£ÐÍ¿ÉÒÔÖØÓ㬲¢ÇÒÒµÎñÂß¼­Ö»ÔÚÁìÓò²ãÖгöÏÖ£¬ÕâʹµÃºÜÈÝÒ×¶Ô¶à¸öUI½Ó¿Ú±£³ÖÒµÎñÂß¼­µÄÒ»ÖÂ(´ÓÁìÓòÄ£Ð͵ķֲãͼ¿ÉÒÔ¿´µÃ¸üÇå³þ)¡£

ÆäȱµãÊÇ£º

¶Ô³ÌÐòÔ±µÄÒªÇó½Ï¸ß£¬³õѧÕß¶ÔÕâÖÖ½«Ö°Ôð·ÖÅäµ½¶à¸öЭ×÷¶ÔÏóÖеķ½Ê½¸Ðµ½¼«²»ÊÊÓ¦¡£

ÁìÓòÇý¶¯½¨Ä£ÒªÇó¶ÔÁìÓòÄ£ÐÍÍêÕû¶øÍ¸³¹µÄÁ˽⣬ֻ¸ø³öÒ»¸öÓÃÀýµÄʵÏÖ²½ÖèÊÇÎÞ·¨µÃµ½ÁìÓòÄ£Ð͵ģ¬ÕâÐèÒªºÍÁìÓòר¼ÒµÄ³ä·ÖÌÖÂÛ¡£´íÎóµÄÁìÓòÄ£ÐͶÔÏîÄ¿µÄΣº¦·Ç³£Ö®´ó£¬¶øÊµÏÖÒ»¸öºÃµÄÁìÓòÄ£Ðͷdz£À§ÄÑ¡£

¶ÔÓÚ¼òµ¥µÄÈí¼þ£¬Ê¹ÓÃÁìÓòÄ£ÐÍ£¬ÏÔµÃÓÐЩɱ¼¦ÓÃÅ£µ¶ÁË¡£

ÎҵĿ´·¨

Õⲿ·ÖÎÒ½«Ìá³öһЩ¿ÉÄÜ´æÔÚÕùÒéµÄÎÊÌâ²¢Ìá³ö×Ô¼ºµÄ¿´·¨¡£

Èí¼þ·Ö²ã

Àí½âÈí¼þ·Ö²ã¡¢Ã÷Îúÿ²ãµÄÖ°Ôð¶ÔÓÚÀí½âÁìÓòÄ£ÐÍÒÔ¼°´úÂëʵÏÖÊÇÓкô¦µÄ¡£Èí¼þÒ»°ã·ÖΪËIJ㣬·Ö±ðΪ±íʾ²ã£¬Ó¦Óò㣬ÁìÓò²ãºÍ»ù´¡ÉèÊ©²ã¡£Èí¼þÁìÓòÖÐÁíÍâÒ»¸öÖøÃûµÄ·Ö²ãÊÇTCP/IP·Ö²ã£¬·ÖΪӦÓòã,ÔËÊä²ã,Íø¼Ê²ãºÍÍøÂç½Ó¿Ú²ã¡£ÎÒ·¢ÏÖËüÃÇÖ®¼ä´æÔÚ¶ÔÓ¦¹ØÏµ£¬¼ûÏÂ±í£º

TCP/IP·Ö²ã Èí¼þ·Ö²ã  
    ±íʾ²ã ¸ºÔðÏòÓû§ÏÔʾÐÅÏ¢¡£
Ó¦Óò㠸ºÔð´¦ÀíÌØ¶¨µÄÓ¦ÓóÌÐòϸ½Ú¡£ÈçFTP,SMTPµÈЭÒé¡£ Ó¦Óò㠶¨ÒåÈí¼þ¿ÉÒÔÍê³ÉµÄ¹¤×÷£¬Ö¸»ÓÁìÓò²ãµÄ¶ÔÏóÀ´½â¾öÎÊÌâ¡£Ëü²»¸ºÔðÒµÎñÂß¼­£¬ÊǺܱ¡µÄÒ»²ã¡£
ÔËÊä²ã Á½Ì¨Ö÷»úÉϵÄÓ¦ÓóÌÐòÌṩ¶Ëµ½¶ËµÄͨÐÅ¡£Ö÷Òª°üÀ¨TCP,UDPЭÒé¡£ ÁìÓò²ã ¸ºÔðÒµÎñÂß¼­£¬ÊÇÒµÎñÈí¼þµÄºËÐÄ¡£
Íø¼Ê²ã ´¦Àí·Ö×éÔÚÍøÂçÖеĻ£¬ÀýÈç·Ö×éµÄѡ·¡£Ö÷Òª°üÀ¨IPЭÒé¡£  
ÍøÂç½Ó¿Ú²ã ²Ù×÷ϵͳÖеÄÉ豸Çý¶¯³ÌÐòºÍ¼ÆËã»úÖжÔÓ¦µÄÍøÂç½Ó¿Ú¿¨¡£ËüÃÇÒ»Æð´¦ÀíÓëµçÀ£¨»òÆäËûÈκδ«Êäý½é£©µÄÎïÀí½Ó¿Úϸ½Ú¡£ »ù´¡ÉèÊ©²ã ΪÉϲãÌṩͨÓü¼ÊõÄÜÁ¦£¬ÈçÏûÏ¢·¢ËÍ£¬Êý¾Ý³Ö¾Ã»¯µÈ¡£

¶ÔÓÚTCP/IPÀ´Ëµ£¬ÔËÊä²ãºÍÍø¼Ê²ãÊÇ×îºËÐĵģ¬ÕâÒ²ÊÇTCP/IPÃû×ÖµÄÓÉÀ´£¬¾ÍÏñÁìÓò²ãÒ²ÊÇÈí¼þ×îºËÐĵÄÒ»²ã¡£¿ÉÒÔ¿´³öÁìÓòÄ£Ð͵İü½á¹¹ÓëÈí ¼þ·Ö²ãÊÇÒ»Öµġ£ÔÚÈí¼þ·Ö²ãÖУ¬±íʾ²ã¡¢ÁìÓò²ãºÍ»ù´¡ÉèÊ©²ã¶¼ÈÝÒ×Àí½â£¬ÄÑÀí½âµÄÊÇÓ¦Óò㣬ºÜÈÝÒ׺ÍÁìÓò²ãÖÐService»ìÏý¡£ÁìÓòServiceÊôÓÚ ÁìÓò²ã£¬ËüÐèÒª³Ðµ£²¿·ÖÒµÎñ¸ÅÄ²¢ÇÒÕâ¸öÒµÎñ¸ÅÄî²»Ò×·ÅÈëÄ£ÐͶÔÏóÖС£Ó¦Óòã·þÎñ²»³Ðµ£ÈκÎÒµÎñÂß¼­ºÍÒµÎñ¸ÅÄËüÖ»Êǵ÷ÓÃÁìÓò²ãÖеĶÔÏ󣨷þÎñºÍÄ£ ÐÍ£©À´Íê³É×Ô¼ºµÄ¹¦ÄÜ¡£Ó¦ÓòãΪ±íʾ²ãÌṩ½Ó¿Ú£¬µ±UI½Ó¿Ú¸Ä±äÒ»°ãÒ²»áµ¼ÖÂÓ¦Óòã½Ó¿Ú¸Ä±ä£¬Ò²¿ÉÄܵ±UI½Ó¿ÚºÜÏàËÆÊ±Ó¦Óòã½Ó¿Ú²»Óøı䣬µ«ÊÇÁìÓò²ã (°üÀ¨ÁìÓò·þÎñ)²»Äܱ䶯¡£ÀýÈçÒ»¸öÓ¦ÓÃͬʱÌṩWeb½Ó¿ÚºÍWeb Service½Ó¿Úʱ£¬Á½ÕßµÄÓ¦Óòã½Ó¿ÚÒ»°ã²»Í¬£¬ÕâÊÇÒòΪWeb ServiceµÄ½Ó¿ÚÒ»°ãÒª´ÖһЩ¡£¿ÉÒÔºÍTCP/IPµÄ²ãÄ£ÐͽøÐÐÀà±È£¬¿ª·¢Ò»¸öFTP³ÌÐòºÍMSNÁÄÌì³ÌÐò£¬ËüÃǵÄÓ¦Óò㲻ͬ£¬µ«ÊÇ¿ÉÒÔͬÑùÀûÓà TCP/IPЭÒ飬TCP/IPЭÒé²»Óñ䡣ÓëÈí¼þ·Ö²ã²»Í¬µÄÊÇ£¬µ±Í¬Ñù¿ª·¢Ò»¸öFTP³ÌÐòʱ£¬Èç¹ûÖ»ÊÇUI½Ó¿Ú²»Í¬£¬Ò»¸öÊÇÃüÁîÐгÌÐò£¬Ò»¸öÊÇͼÐνç Ãæ£¬Ó¦Óò㲻Óñ䣨ÀûÓõͼÊÇFTP·þÎñ£©¡£ÏÂͼ¸ø³öÁìÓòÄ£ÐÍÖеķֲ㣺

Repository½Ó¿ÚÊôÓÚÁìÓò²ã

¿ÉÄÜÓÐÈ˻ὫRepository½Ó¿Ú£¬Ï൱ÓÚÆ¶ÑªÄ£ÐÍÖеÄDAO½Ó¿Ú£¬¹éÓÚ»ù´¡ÉèÊ©²ã£¬±Ï¾¹ÔÚÆ¶ÑªÄ£ÐÍÖÐDAOÊǺÍËüµÄʵÏÖ·ÅÔÚÒ»Æð¡£Õâ¾ÍÉæ¼° Repository ½Ó¿Úµ½µ×ºÍË­±È½ÏÃÜÇУ¿Ó¦¸ÃºÍdomain²ã±È½ÏÃÜÇУ¬ÒòΪRepository½Ó¿ÚÊÇÓÉdomain²ãÀ´¶¨ÒåµÄ¡£ÓÃTCP/IPÀ´Àà±È£¬Íø¼Ê²ãÖ§³Ö±ê×¼ ÒÔÌ«Íø¡¢ÁîÅÆ»·µÈÍøÂç½Ó¿Ú£¬Ö§³Ö½Ó¿ÚÊÇÔÚÍø¼Ê²ãÖж¨ÒåµÄ£¬Ã»ÓÐÔÚÍø¼Ê²ã¶¨ÒåµÄÍøÂç½Ó¿ÚÊDz»Äܱ»Íø¼Ê²ã·ÃÎʵġ£ÄÇôΪʲôÔÚÆ¶ÑªÄ£ÐÍÖÐDAOµÄ½Ó¿ÚûÓзÅÔÚ model°üÖУ¬ÕâÊÇÒòΪƶѪģÐÍÖÐDAOµÄ½Ó¿ÚÊÇÓÉserviceÀ´¶¨ÒåµÄ£¬µ«ÊÇΪʲôDAO½Ó¿ÚҲûÓзÅÔÚservice°üÖУ¬ÎÒÎÞ·¨½âÊÍ£¬°´ÕÕÎÒµÄ ¹ÛµãDAO½Ó¿Ú·ÅÔÚservice°üÖÐÒª¸üºÃһЩ£¬½«DAO½Ó¿Ú·ÅÔÚdao°ü»òÐíÓÐÃû³ÆÉ϶ÔÓ¦µÄ¿¼ÂÇ¡£¶ÔÓÚÁìÓòÄ£ÐÍ£¬½«Repository½Ó¿Ú·ÅÈë infrastructure°üÖлáÒýÈë°üµÄÑ­»·ÒÀÀµ£¬RepositoryÒÀÀµDomain£¬DomainÒÀÀµRepository¡£È»¶ø¶ÔÓÚÆ¶ÑªÄ£ ÐÍ£¬½«DAO½Ó¿Ú·ÅÈëdao°üÖÐÔò²»»áÒýÈë°üÑ­»·ÒÀÀµ£¬Ö»ÓÐservice¶ÔDAOºÍmodelµÄÒÀÀµ£¬¶øÃ»Óз´·½ÏòµÄÒÀÀµ£¬ÕâÒ²µ¼ÖÂservice°üºÜ ²»Îȶ¨£¬serviceÓÖÕýÊÇ·ÅÖÃÒµÎñÂß¼­µÄµØ·½¡£JDependÕâ¸ö¹¤¾ß¿ÉÒÔ¼ì²â°üµÄÒÀÀµ¹ØÏµ¡£

ƶѪģÐÍÖÐFacadeÓкÎÓã¿

ÎÒÒÔǰµÄ×öÒ»¸öÏîĿʹÓõľÍÊÇÆ¶ÑªÄ£ÐÍ£¬Ê¹ÓÃÁËserviceºÍfacade£¬µ±ÎÒÃÇÌÖÂÛserviceºÍfacadeÓÐÊ²Ã´Çø±ðʱ£¬ºÜÉÙÓÐÈËÇå ³þ£¬×îÖÕ½á¹ûfacade¾ÍÊÇÒ»¸ö¿Õ¿Ç£¬Ëü³ýÁ˽«·½·¨ÊµÏÖίÍиøÏàÓ¦µÄservice·½·¨£¬²»×öÈκÎÊ£¬ËüÃǵĽӿÚÖеķ½·¨¶¼Ò»Ñù¡£FacadeÓ¦¸ÃÊÇÖ÷ Òª³äµ±Ô¶³Ì·ÃÎʵÄÃÅÃæ£¬ÕâÔÚEJBʱ´úÏ൱ÆÕ±é£¬×Ô´ÓRod Johson½ÐÈÂwithout EJBÖ®ºó£¬´ó¼Ò¶ÔEJBµÄÈÈÇé½µÁ˺ܶ࣬¶ÔÐí¶àʹÓÃÆ¶ÑªÄ£Ð͵ÄÓ¦ÓóÌÐòÀ´Ëµ£¬facadeÊÇûÓбØÒªµÄ¡£Æ¶ÑªÄ£ÐÍÖеÄserviceÔÚ±¾ÖÊÉÏÊôÓÚÓ¦Óò㠵Ķ«Î÷¡£µ±È»Èç¹ûȷʵÐèÒªÌṩԶ³Ì·ÃÎÊ£¬ÄÇôԶ³ÌFacade(»òÐí½Ð×öRemote Service¸üºÃ)Ò²ÊǺÜÓÐÓõ쬵«ÊÇËüÈÔÈ»ÊôÓÚÓ¦Óò㣬ֻ²»¹ýÔÚ¼¼Êõ²ãÃæÉϽ«ËüµÄʵÏÖίÍиø¶ÔÓ¦µÄService¡£ÏÂͼÊÇÆ¶ÑªÄ£Ð͵ķֲ㣺

ƶѪģÐÍ·Ö²ã

´ÓÉÏÃæµÄ·Ö²ã¿ÉÒÔ¿´³öƶѪģÐÍʵ¼ÊÉÏÏ൱ÓÚÈ¡ÏûµôÁËÁìÓò²ã£¬ÒòΪÁìÓò²ã²¢Ã»Óаüº¬ÒµÎñÂß¼­¡£

DAOµ½µ×ÓÐûÓбØÒª£¿

ƶѪģÐÍÖеÄDAO»òÁìÓòÄ£ÐÍÖеÄRepositoryµ½µ×ÓÐûÓбØÒª£¿ÓÐÈËÈÏΪDAO»òÕß˵RepositoryÊdzäѪģÐ͵ĴóµÐ£¬¶Ô´ËÎÒÎÞÂÛÈç ºÎÒ²²»ÔÞͬ¡£DAO»òRepositoryÊǸºÔð³Ö¾Ã»¯Âß¼­µÄ£¬Èç¹ûÈ¡ÏûµôDAO»òRepository£¬½«³Ö¾Ã»¯Âß¼­Ö±½ÓдÈëµ½model¶ÔÏóÖУ¬ÊÆ±Ø Ôì³Émodel¶ÔÏó³Ðµ£²»±ØÒªµÄÖ°Ôð¡£ËäÈ»ÏÖÔÚµÄORM¿ò¼ÜÒѾ­×öµÃºÜºÃÁË£¬³Ö¾Ã»¯Âß¼­»¹ÊÇÐèÒª´óÁ¿µÄ´úÂ룬³Ö¾Ã»¯Âß¼­µÄ²ôÈë»áʹmodelÖеÄÒµÎñÂß¼­ ±äµÃÄ£ºý¡£ÔÊÐíÈ¥µôDAOµÄÒ»¸ö±ØÒªÌõ¼þ¾ÍÊÇJavaµÄµÄ³Ö¾Ã»¯¿ò¼Ü±ØÐë×ã¹»ÏȽø£¬³Ö¾Ã»¯Âß¼­µÄÒýÈë²»»á¸ÉÈÅÒµÎñÂß¼­£¬ÎÒÈÏΪÕâÔںܳ¤Ò»¶Îʱ¼äÄÚ½«ÎÞ·¨×ö µ½¡£ÔÚrailsÖÐÄܹ»½«DAOÈ¥µôµÄÔ­Òò¾ÍÊÇrailÖÐʵÏֳ־û¯Âß¼­µÄ´úÂëºÜ¼ò½àÖ±¹Û£¬ÕâÒ²ÓërubyµÄ±í´ïÄÜÁ¦Ç¿ÓйØÏµ¡£DAOµÄÁíÍâÒ»¸öºÃ´¦¸ôÀë Êý¾Ý¿â£¬Õâ¿ÉÒÔÖ§³Ö¶à¸öÊý¾Ý¿â£¬ÉõÖÁ¿ÉÒÔÖ§³ÖÎļþ´æ´¢¡£»ùÓÚDAOµÄÕâЩÓŵ㣬ÎÒÈÏΪ£¬¼´Ê¹½«À´JavaµÄ³Ö¾Ã»¯¿ò¼Ü×öµÃ×ã¹»ÓÅÐ㣬ʹÓÃDAO½«³Ö¾Ã»¯Âß ¼­´ÓÒµÎñÂß¼­ÖзÖÀ뿪À´»¹ÊÇÊ®·Ö±ØÒªµÄ£¬¿öÇÒËüÃDZ¾Éí¾ÍÓ¦¸Ã·ÖÀë¡£

½áÊøÓï

ÔÚÕâÆªÎÄÕÂÀÎÒʹÓÃÁËÒ»¸öתÕÊÀý×ÓÀ´ÃèÊöÁìÓòÄ£ÐÍºÍÆ¶ÑªÄ£Ð͵IJ»Í¬£¬ÊµÏÖ´úÂë¿ÉÒÔ´Ó¸½¼þÖÐÏÂÔØ£¬ÎÒÍÆ¼öÄ㿴ϸ½¼þ´úÂ룬Õâ»á¶ÔÁìÓòÄ£ÐÍºÍÆ¶ÑªÄ£ÐÍ Óиö¸üÇå³þµÄÈÏʶ¡£ÎÒ̸µ½ÁËÈí¼þµÄ·Ö²ã£¬ÒÔ¼°Æ¶ÑªÄ£ÐͺÍÁìÓòÄ£Ð͵ÄʵÏÖÓÖÊÇÔõÑù¶ÔÓ¦µ½ÕâЩ²ãÉÏÈ¥µÄ£¬×îºóÊǶÔDAO(»òRepository)µÄÌÖÂÛ¡£ÒÔ ÉÏÖ»ÊÇÎÒ¸öÈ˹۵㣬ÈçÓв»Í¬Òâ¼û»¶Ó­Ö¸³ö¡£

   
3035 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
iPersonµÄ¹ý³Ì¹Û£ºÒª ¹ý³Ì or ½á¹û
¡°ÒÔÈËΪ±¾¡±µÄ¹¤³ÌÕÜѧ
ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
UML ͼ½â£ºË³Ðòͼ£¨ sequence diagram £©
UML ͼ½â£º¶ÔÏóͼ£¨ class diagram £©
×îпγÌ
»ùÓÚUMLºÍEA½øÐÐϵͳ·ÖÎöÉè¼Æ
UML+EA+ÃæÏò¶ÔÏó·ÖÎöÉè¼Æ
»ùÓÚSysMLºÍEA½øÐÐϵͳÉè¼ÆÓ뽨ģ
UML + ǶÈëʽϵͳ·ÖÎöÉè¼Æ
ÁìÓòÇý¶¯µÄ½¨Ä£ÓëÉè¼Æ
³É¹¦°¸Àý
ijµçÐÅÔËÓª¹©Ó¦ÉÌ Ó¦ÓÃUML½øÐÐÃæÏò¶ÔÏó·ÖÎö
·é»ðͨÐÅ UML½øÐÐÃæÏò¶ÔÏóµÄ·ÖÎöÉè¼Æ
Î÷ÃÅ×Ó UMLÓëǶÈëʽÈí¼þ·ÖÎöÉè¼Æ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ ´Óϵͳµ½Èí¼þµÄ·ÖÎö¡¢Éè¼Æ
ÉîÛÚijÆû³µÆóÒµ Ä£ÐÍÇý¶¯µÄ·ÖÎöÉè¼Æ