±à¼ÍƼö: |
´ËÎÄÖ÷Òª½éÉÜÁËÆ¶ÑªÄ£ÐÍ¡¢ÁìÓòÄ£ÐÍ¡¢Æ¶ÑªÄ£ÐÍÖÐFacadeÓкÎÓõÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
ÁìÓòÄ£ÐÍ
×î½ütaowenͬѧÁ¬Ðø·¢ÆðÁËÁ½Æð¹ØÓÚÆ¶ÑªÄ£ÐͺÍÁìÓòÄ£Ð͵ÄÌÖÂÛ£¬ÒýÆðÁË´ó¼ÒµÄ¹ã·ºÈÈÁÒµÄÌÖÂÛ£¬µ«ÊÇÌÖÂÛ(»òÕß˵ÊÇÕùÂÛ)µÄ½á¹ûµ½µ×
ÔõÑù£¬ÎÒÏëÖµµÃÉÌȶ¡£ÎÊÌâÊÇ´ó¼Ò¶ÔƶѪģÐͺÍÁìÓòÄ£ÐͶ¼ÓÐ×Ô¼ºµÄ¿´·¨£¬Èç¹ûûÓжԴ˴ﵽ¸ÅÄîÉϵĹ²Ê¶£¬ÄÇôÌÖÂ۵Ľá¹ûÓ¦¸Ã¿ÉÏë¶øÖª£¬ÌÖÂÛµÄÊÕ»ñÒ²ÊÇÓеģ¬
ÖÁÉÙÖªµÀÁË·ÖÆçµÄ´æÔÚ¡£ÎªÁËʹÎÊÌâ¾ßÓÐÈ·¶¨ÐÔ£¬ÎÒÏë´ÓÒ»¸ö¼òµ¥Àý×Ó×ÅÊÖ£¬ÓÃÎÒ¶ÔÆ¶ÑªÄ£ÐͺÍÁìÓòÄ£Ð͵ĸÅÄîÀ´·Ö±ðʵÏÖÀý×Ó¡£ÖÁÓÚÎÒµÄÀí½â¶ÔÓë·ñ£¬´ó¼Ò¿ÉÒÔ×ö
ÆÀÅУ¬ÖÁÉÙÓиö¿ÉÒÔÆÀÅеıê×¼ÔÚÕâ¡£
Ò»¸öÀý×Ó
ÎÒÒª¾ÙµÄÊÇÒ»¸öÒøÐÐתÕʵÄÀý×Ó£¬ÓÖÊÇÒ»¸ö±»ÓÃÀÄÁ˵ÄÀý×Ó¡£µ«¼´Ê¹Õâ¸öÀý×ÓÒ²²»ÊÇ×Ô¼ºÏë³öÀ´µÄ£¬¶øÊÇØâÇÔµÄ<<POJOs
in Action>>ÖеÄÀý×Ó£¬ÔÁÂÎÒ¿ÉÁ¯µÄÏëÏñÁ¦ ¡£µ±Ç®´ÓÒ»¸öÕÊ»§×ªµ½ÁíÒ»¸öÕÊ»§Ê±£¬×ªÕʵĽð¶î²»Äܳ¬¹ýµÚÒ»¸öÕÊ»§µÄ´æ¿îÓà¶î£¬Óà¶î×ÜÊý²»Äܱ䣬ǮֻÊÇ´ÓÒ»¸öÕË»§Á÷ÏòÁíÒ»¸öÕÊ»§£¬Òò´ËËüÃDZØÐëÔÚÒ»¸öÊÂÎñÄÚÍê³É£¬Ã¿´ÎÊÂÎñ³É¹¦Íê³É¶¼Òª¼Ç¼´Ë´ÎתÕÊÊÂÎñ£¬ÕâÊÇËùÓеĹæÔò¡£
ƶѪģÐÍ
ÎÒÃÇÊ×ÏÈÓÃÆ¶ÑªÄ£ÐÍÀ´ÊµÏÖ¡£ËùνƶѪģÐ;ÍÊÇÄ£ÐͶÔÏóÖ®¼ä´æÔÚÍêÕûµÄ¹ØÁª(¿ÉÄÜ´æÔÚ¶àÓàµÄ¹ØÁª)£¬µ«ÊǶÔÏó³ýÁËgetºÍset·½ÍâÍ⼸ºõ¾ÍûÓÐÆäËüµÄ·½
·¨£¬Õû¸ö¶ÔÏó³äµ±µÄ¾ÍÊÇÒ»¸öÊý¾ÝÈÝÆ÷£¬ÓÃCÓïÑԵϰÀ´Ëµ¾ÍÊÇÒ»¸ö½á¹¹Ì壬ËùÓеÄÒµÎñ·½·¨¶¼ÔÚÒ»¸öÎÞ״̬µÄServiceÀàÖÐʵÏÖ£¬ServiceÀà½ö½ö°ü
º¬Ò»Ð©ÐÐΪ¡£ÕâÊÇJava Web³ÌÐò²ÉÓõÄ×î³£Óÿª·¢Ä£ÐÍ£¬Äã¿ÉÄܲÉÓõľÍÊÇÕâÖÖ·½·¨£¬ËäÈ»¿ÉÄܲ»ÖªµÀËüÓиö“ƶѪģÐÍ”µÄ³ÆºÅ£¬ÕâÒª¶à
¿÷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)µÄÌÖÂÛ¡£ÒÔ
ÉÏÖ»ÊÇÎÒ¸öÈ˹۵㣬ÈçÓв»Í¬Òâ¼û»¶ÓÖ¸³ö¡£ |