[内详]B中有A的实例,A,B定义了相同的一个event,A抛消息给B,再由B往外抛,是否合理?

lethwei 2009-07-02 05:54:03
分层是一种比较好的模块化方法, 实际使用中也确实如此
但是这样会出现很多代码的重复, 比如标题中情况, 关于消息处理, 就有重复, 感觉与 DRY(Don't Repeat Yourself) 又抵触了
大家怎么认为? 又或者是如何处理这种问题的? 欢迎讨论

class A {
public event EventHandler TheEvent;
protected void RaiseTheEvent()
{
if (TheEvent != null) {
TheEvent(this, EventArgs.Empty);
}
}
}

class B {
public event EventHandler TheEvent;
protected void RaiseTheEvent()
{
if (TheEvent != null) {
TheEvent(this, EventArgs.Empty);
}
}

A _a = new A();

B()
{
_a.TheEvent += delegate
{
RaiseTheEvent();
};
}
}
...全文
39 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙宜坡 2009-07-09
  • 打赏
  • 举报
回复
我就这种类似的办法!


为了后期,就这样!
CGabriel 2009-07-09
  • 打赏
  • 举报
回复
我不喜欢,但我也在用.....
lethwei 2009-07-09
  • 打赏
  • 举报
回复
看来多数朋友还是认可这样的处理方式 ;)
弘毅致远 2009-07-04
  • 打赏
  • 举报
回复
有点像head first 第一章。
弘毅致远 2009-07-04
  • 打赏
  • 举报
回复
楼上的分析到位,把对象之间的依赖性进行分拆。
acqy 2009-07-03
  • 打赏
  • 举报
回复
我并没看出哪里有代码冗余,只是你在A和B里的事件名称相同而已。
这种做法是合理的。A可以有自己的事件,至于谁订阅了这个事件,A并不理会;代码中B订阅了A的事件,那么当B对A做了某种操作时,立刻会触发A中的这个事件,而这个事件又会由B转发给B的调用者(假设为C)。从C的角度看,是B发生了某件事情,但具体是谁使B发生了这件事?是A引起的,还是B本身自发的?就可以通过sender来判断。
lethwei 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
这种设计很合理,不同事件有不同用途,还可继承接口实现操作
[/Quote]
确实有合理的地方,但是楼上也有人提到了代码冗余
"copy-paste" 不是编程的大忌么,如果要分层,消息的层层转发势必会导致这样的重复代码,所以想知道有没有更好的办法?

btw. 这个方法在实际使用中也确实烦人,改了一边,另一边也要注意不能遗漏,代码姑且不说,就是注释也要保持同步
wuyq11 2009-07-02
  • 打赏
  • 举报
回复
public class Sender
{
public delegate void EventHandler(object sender);
public event EventHandler Event;

public void TEvent()
{
Console.WriteLine("event");
Event(this);
}
}
class Receiver
{
public Receiver(Sender sender)
{
sender.Event +=new Sender.EventHandler(OnEvent);
}
private void OnEvent(object sender)
{
Console.WriteLine("event" );
Console.Read();
}
}
wuyq11 2009-07-02
  • 打赏
  • 举报
回复
这种设计很合理,不同事件有不同用途,还可继承接口实现操作
V68V6 2009-07-02
  • 打赏
  • 举报
回复
LZ的意思是代码冗余了?

有时为了便于改动维护而分层确实会造成部分代码冗余
kkun_3yue3 2009-07-02
  • 打赏
  • 举报
回复
A中的消息给A的调用者使用
B中的消息给B的调用者使用

没有冲突

如果C是B的调用者,则C只关心B的事件
例子中B是A的调用者,B只关心A的事件
C此时可以关心A的事件,也可以不关心

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧