下面的伪代码有一个现有的功能
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();
}这里的问题很明显,锁和事务代码之间存在着紧密的耦合,但避免了为简单功能创建两个额外的类。
我个人喜欢第一种方法,但仍然不相信这是最好的办法。
我的问题是,除了使用包装器之外,还有其他更好的方法吗?即,在不影响设计方面的情况下,在单个类中处理这些问题的任何有效方法。
https://stackoverflow.com/questions/19327742
复制相似问题