组件开发的困惑

yyd021 2011-02-16 11:33:10
做通用软件的二次开发,在开发过程中遇到这样的事情。通用软件通过用户界面调用扩展组件的功能,在开发过程中,关于交互方面有以下几个问题。
1.但现在软件的调用顺序与我需要的不一致,比如说:
在界面操作添加一个对象,通用软件默认的是先初始化对象,然后允许你对对象的参数对象进行配置。我现在需要先配置好一个参数对象,然后将这个参数对象赋值给该对象,使其依据实现配置好的参数初始化。在目前这种机制上,可否有办法办到。
2.错误处理机制
通用软件通过引用某个虚拟方法来实现功能,具体如何引用不可知。在二次开发中,重写该虚方法,如何处理在该虚方法中产生的异常,并传递给通用软件的错误处理系统。该方法没有定义异常信息的返回,只有一个BOOL型的返回。

请大家提供一些建议,不胜感激!
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyd021 2011-02-23
  • 打赏
  • 举报
回复
第一个问题想来想去没有别改变他的程序的办法,后来我用自定义事件的方式解决的,当客户需要重新初始化对象时,在配置界面触发一个事件。然后对象接收到这个事件后,重新安装配置对象出事后这个对象。

第二个问题我找了2天,由于之前对调试Debug类和Trace类不是很熟悉,后来学习了这两个类。经过研究通用软件,发现其日志是通过重构Trace类来实现的,我只需要在需要形成日志的地方,调用Trace方法,就可以将自定义的错误日志写入日志文件了。
yyd021 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuwei2500 的回复:]
C# code

//这里是不是应该这样写呢?
ParaObj paraObj = new ParaObj();
paraObj.Config();
Device devObj = new Device(paraObj );
devObj.paraObj = paraObj;
[/Quote]

最后一句话没有必要,我在Device类初始化的时候就已经给赋值了。
我希望是得到这样一个结果,可是这段代码都是在通用软件里面,我无法修改的。
yyd021 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yyd021 的回复:]
//由于我需要在初始化devObj对象中,先由用户自定义好paraObj的参数,
//然后依据paraObj的参数给初始化paraObj对象;
//所以我需要下面的顺序
[/Quote]

这里应该是
//由于我需要在初始化devObj对象时,先由用户自定义好paraObj的参数,
//然后依据paraObj的参数再初始化devObj对象;
//所以我需要下面的顺序
yyd021 2011-02-16
  • 打赏
  • 举报
回复
第一个问题实际上是这样的,我通过简单代码来举例。
实际执行顺序,我的工作就是写Device 和ParaObj 类;

//通用软件内部的顺序 大概是这样的,这里不可见,我根据实际测试结果推测。
Void CreateNewDevice()
{
Device devObj = new Device(new ParaObj());

ParaObj paraObj = new ParaObj();

//这个方法客户自定义参数对象的配置
paraObj.Config();
devObj.paraObj = paraObj;
}

//由于我需要在初始化devObj对象中,先由用户自定义好paraObj的参数,
//然后依据paraObj的参数给初始化paraObj对象;
//所以我需要下面的顺序
Void CreateNewDevice()
{
ParaObj paraObj = new ParaObj();

//这个方法客户自定义参数对象的配置
paraObj.Config();

Device devObj = new Device(paraObj);
}


由于paraObj.Config()过程,实际上是用户在软件运行期间自由配置的。所以我不能将这个过程写入到ParaObj对象的构造函数里去.

另外,我也不能在Device类 paraObj数据的get过程中进一步初始化Device对象,因为,不能保证在paraObj之前,Device类已经做过其他的操作,那么再按照paraObj初始化类可能会出错。
liuwei2500 2011-02-16
  • 打赏
  • 举报
回复
关于第一个问题,这不足以成为一个问题,因为作为正规调用,是需要初始化一个对象,然后传入对象这种方式。或许就是多了一步就是需要你通过代码指示该操作已被允许。这可能是基于安全性来考虑的。
第二个问题:bool的返回值是要告诉你该函数调用是否成功,出现异常肯定是要不成功的,以我的推测这套软件应该已经做好了各种已成的处理。如果你要重写该虚方法,因为你不知道出现的异常是一种什么异常【我指的是名称】。当然你可以自己捕获该异常,但是你只能通过自己的方法来处理异常,不能抛给系统处理,因为你的异常类型可能和他定义的异常类型不太一样,导致异常的处理毫无意义。
liuwei2500 2011-02-16
  • 打赏
  • 举报
回复

//这里是不是应该这样写呢?
ParaObj paraObj = new ParaObj();
paraObj.Config();
Device devObj = new Device(paraObj );
devObj.paraObj = paraObj;

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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