请教一个体系结构的问题

fengfeng2003 2003-04-30 10:15:06
现假设用MFCk开发一程序:
class CCircle
{
public:
.......
int Draw(CDC& ...)
.......
}

在窗口中绘图肯定要用到CDC类,也就是说Draw成员函数要有一个CDC类型参数,
请问这是否违反了领域层与表示层分离的原则,如果违背了的话,在类似画图程序中如何实现模型与视图分离呢?
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
netkid 2003-07-07
  • 打赏
  • 举报
回复
楼上说得不错
stonespace 2003-07-03
  • 打赏
  • 举报
回复
严格的说是违反了领域层与表示层分离的原则。

违反这个原则的代价是不能用于MFC之外的任何平台,而CCircle本身代表的概念和MFC无关,因此这样设计降低了CCirle的可重用性。

仔细考虑CCircle的概念,CCircle不仅仅表示“园”,而是可以显示的“园”,显示必须有载体,比如窗口、打印机等等。所以Draw必须有一个参数表示载体,问题的根本就是CDC的实例,并不代表载体的全部,而只能代表载体的一小部分,就是因为这个才导致可重用性的降低。

最一般的设计方法是,抽象一个显示载体类,比如CDisplayTarget类,然后,通过Adapt模式包装CDC的方法在MFC框架中画园。但是这样设计会导致类数目增加,增加复杂性,它带来的可重用性是否能够用得上?这个问题应该仔细权衡,如果可重用性没有机会用得上,还不如直接用CDC作为参数,这样容易实现也不容易出错。
WebDB 2003-07-03
  • 打赏
  • 举报
回复
使用MFC开发,实际上就已经确定使用的MS的应用框架,数据表现的时候必然要用到CDC等类。

Draw要输出自定义的图形类型,必然是在一个设备上输出的,我们把CDC仅仅看作指向设备的一个变量而已。

如果MFC的框架中CDC等类支持其他的操作系统,应该就能实现跨平台吧。
fengfeng2003 2003-07-03
  • 打赏
  • 举报
回复
能具体用简单代码解释一下吗?
w_rose 2003-05-02
  • 打赏
  • 举报
回复
“绘图”有两层含义:

一、为绘图计算所需要记录和变更的系统数据。
二、将已经计算好的结果直接绘制出来。

按层次将这两层分开,后者继承前者。

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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