Design patterns 使用decorator时的设计折衷
有一个具有以下伪代码的现有功能Design patterns 使用decorator时的设计折衷,design-patterns,wrapper,decorator,Design Patterns,Wrapper,Decorator,有一个具有以下伪代码的现有功能 class MyMessageSink implements MessageSink { public void sendToFulfillment(); } 现在,我想向sendToFulfillment方法添加事务和锁定功能。我使用包装器模式完成了这项工作 class TransactionalMessageSink{ private MessageSink sink; public TransactionalMess
class MyMessageSink implements MessageSink {
public void sendToFulfillment();
}
现在,我想向sendToFulfillment
方法添加事务和锁定功能。我使用包装器模式完成了这项工作
class TransactionalMessageSink{
private MessageSink sink;
public TransactionalMessageSink(MessageSink sink){
this.sink = sink;
}
public void sendToFulfillment(){
//start transaction
sink.sendToFulfillment();
//end transaction
}
}
类似地,我创建了一个LockingMessageSink
,客户端代码变成
new LockingMessageSink(new TransactionalMessageSink(new MyMessageSink())).sendToFulfillment
然而,事务和锁定代码非常少、简单和直接(因为我们使用的框架为我们完成了大部分样板工作)。所以我想到了另一种方法-
class MyMessageSink implements MessageSink {
public void lockAndSendToFulfillmentInTransaction(){
//locking start
sendToFulfillmentInTransaction();
//locking end
}
public void sendToFulfillmentInTransaction(){
//transaction start
sendToFulfillment();
//transaction end
}
public void sendToFulfillment();
}
这里的问题很明显,锁定代码和事务代码之间存在紧密耦合,但避免了为简单功能创建另外两个类
我个人喜欢第一种方法,但仍然不相信这是最好的方法
我的问题-除了使用包装器之外,还有没有更好的方法,即在单个类中处理这些问题而不影响设计方面的有效方法。听起来像是您需要的。如果您使用的是Java,请查看
事务和其他“方面”(如日志记录)被称为横切关注点,需要在多个设计和抽象中实现。AOP可以用来自动用样板文件包装您的方法,以执行事务或日志记录等。谢谢,我认为这完全符合这里的要求。但是,考虑一下,假设这些不是系统需求(如事务、日志),而是应用程序需求——在这种情况下,AOP仍然是最佳选择吗?因为我相信AOP主要用于实现系统需求,而不是应用程序需求