怀疑在哪里定义行动 对一个类的属性采取行动?
例如: - 帐户是类,我们将在其中定义帐户属性,例如帐户号,持有人姓名。
像往常一样,银行的员工(班级)可以在客户的账户上添加,更新(crud)操作。
我怀疑在哪个类中我们必须在Employee类或Account类中定义那些(crud)动作?
因为这些操作是由员工实时执行的。另一方面,Actions需要对Account属性进行操作,可以在Account类本身中定义,哪个更好?
'需要对属性执行操作,在同一个类中定义更好'或者'行动是在课堂上定义的,他们(演员)的行动是否更好' ?
答案 0 :(得分:1)
恕我直言,Employee类应该是一个简单的POJO,为了在其他组件中使用它,你应该创建一个AccountOperation服务(Java EE上下文中的EJB)
public class AccountOperation
{
Customer customer;
Employee employee;
public void createAnAccount(){
}
public void deleteAnAccount(){
}
public void debitAnAccount(){
}
}
答案 1 :(得分:1)
在我对你描述的问题的理解中,这样的"操作"进入service layer。
您可以在上面分享的链接中看到Martin Fowler将服务层描述为:
使用一层服务定义应用程序的边界 建立一组可用的操作并协调 应用程序在每个操作中的响应。
因此,在我对您的解决方案的看法中,员工和帐户都只是像@Rotka所说的POJO。在我看来,你的图层的界面有点像
在数据源层:
interface AccountRepository {
Account findById(Long id);
Account save(Account account);
}
我怀疑你可以删除一个银行帐户,但你可以把它置于不活动的状态。
比你的服务层可能有点像
interface AccountService {
Account openAccount(Account account);
void closeAccount(Account account);
transferFunds(Account source, Account target);
...
}
你所谓的员工可能是在这里使用的错误抽象。您可能会考虑用户,例如当前允许打开帐户的用户吗?
因此,请考虑以下假设实现
class DefaultAccountService implements AccountService {
private SecurityContext securityContext;
private Validator validator;
private AccountRespotiroy accountRepository;
@Override
public Account openAccount(Account account) {
if(!securityContext.getUser().hasPermission("openAccount")){
throw new UnAuthorizedException("You cannot open accounts");
}
Set<ConstraintViolation> violations = validator.validate(account);
if(violations.size() > 0){
throw new BadRequestException("Invalid account", violations);
}
return accountRepository.save(account);
}
...
}
答案 2 :(得分:-1)
创建和删除帐户 - 创建帐户实例,然后传递&#34; whodunnit&#34;作为员工 - 或完成某事时的某些相关标识符:
Account Account = new Account(Customer, AccountNumber);
Account.createAccount(Employee).
Account.deleteAccount(Employee).
对于交易,您需要两个帐户 - 信用卡和借记卡帐户。由于事务跨越多个帐户,因此以下方法必须位于其自己的类中:
public void AccountTransaction(Account CreditAccount,
Account DebitAccount,
float TransactionAmount.
Employee Employee){
CreditAccount.creditAccount(TransactionAmount, Employee);
DebitAccount.debitAccount(TransactionAmount, Employee);
}
很可能这种方法会被许多&#34;交易类型调用&#34; (贷款,利息支付,汇款等)