以下是引用 精灵 于 2011-11-4 9:26:32 发表的文字:
以下是引用 xietao 于 2011-11-3 16:37:52 发表的文字:
精灵你说:
> 后来,我又仔细看了一下系统的参考手册,发现里面还有一个“ChangeReaderPassword”函数专门用来修改密码的,我自己试着使用了一下,感觉还是不行...
现在我想知道,同样是用了这个API,你第一次为什么“不行”呢?具体出现了什么问题?我想了解这些细节的目的是,想看看我们的函数本身或者文档或者其他环境因素有没有妨碍二次开发的地方,如果有,我们好想办法克服。
谢老师您好,其实参考手册写的很详细。我在开始查找参考手册的时候在调用“ChangeReaderPassword”函数的时候我没有采用“long lRet = this.ReaderStatisForm.Channel.ChangeReaderPassword”这种调用方式,我当时调用错了,我是先把这个函数的类NEW出来后,调用的。呵呵。。。后来监控“strError”值一直在提示我说“System.UriFormatException:Invalid URI: The URI is empty.”。呵呵。。
其实就我个人而言,我感觉能否在参考手册中增补一下对于参考手册内容的索引,这样用户查询起来也比较方便。呵呵。。。另外,如果不牵扯您那里过多精力的情况下,能否再推出一个“速查手册”,在手册中除了有详细的函数调用方式以外,能否再增补一下这个函数的调用示例。。这样,会像我这样的初学者就能很快掌握这个函数的使用方法了。呵呵。。。。。个人意见。。仅供参考。呵呵。。。
> ...我是先把这个函数的类NEW出来后,调用的...
哦,原来是这样。
这引出了一个很有意思的话题。
所谓二次开发,基本上是使用一个宿主程序现有的设置,用新的需求和顺序把那些对象、功能重新组合。
我们常见的一个缩略语是DOM,这是“Document Object Model”的意思,就是“文档对象模型”。其实能叫做“Object Model”的东西很多,内务前端的每一个统计窗,都有一个“Object Model”概念,你可以把它理解为你旅行要去住的酒店,或者稍微长时间一点你租住的公寓,房间里面有一些现成的设施,它们已经在那里,你只需要使用就可以,并不需要你住进去的时候新装修房间、购买家具,当然,你走的时候也不能带走。
统计窗多半要和应用服务器打交道,为了便于理解,我们构造了一个“通讯通道”的概念,好比打电话时候看到的电话线。这就是几乎每个统计窗里面你二次开发的时候看到的XXXXForm的Channel对象,这就是一根“通讯通道”。
通讯通道自然是有某些代码执行的时候创建的,但当你在二次开发中关注它的时候,你需要认为它已经创建好了,只等你来使用它,而不必亲自去创建它。并且,因为你编写二次开发的派生类的时候,类似OnRecord()这样的函数被宿主程序在循环中一次次触发,那么从概念你应该假定每次在OnRecord()函数中使用完这个通道后,不要去摧毁或者释放它,因为后面还要被用到呢。那么最后统计结束的时候谁来收拾它,也就是摧毁或者释放它呢?那也是宿主程序的责任。好比你在酒店退房后,你不必操心酒店服务员去整理房间更换床单之类的事情。
不过,宿主程序里面提供的固定设施,不一定能满足我们的全部需求,有时候我们在处理过程中需要new新的类的对象,可能是宿主程序提供的现成类我们new出来新的对象,也有可能是我们在二次开发代码里面自己编写的类。这类对象的特点是我们自己创建,使用,然后我们自己释放。生命周期很短,通常是在一个被调用的函数期间就使用完毕了。如果这种对象的生存周期很长,例如跨越整个批处理循环的期间,那么我们可以把对象设计为派生类的成员(而不是函数内部的临时对象)。如果对象需要生命周期更长,例如跨越多次完整的批处理调用之间,那有可能需要动用宿主程序在MainForm也就是框架窗口内的存储机制了,不过,概念也是非常简单的。
只需要明确搞清楚这些概念:对象是谁创建的?生存周期有多长?打算把对象放在哪里?其实这些问题恰好不是软件开发的特殊问题,而有点类似于生活常识了,并不复杂。有时候显得复杂,可能是因为没有人去讲清楚,或者为了显得专业故意给弄复杂了。
> ...我感觉能否在参考手册中增补一下对于参考手册内容的索引,这样用户查询起来也比较方便。呵呵。。。另外,如果不牵扯您那里过多精力的情况下,能否再推出一个“速查手册”,在手册中除了有详细的函数调用方式以外,能否再增补一下这个函数的调用示例...
这些都是很好的建议。正巧我们这一段集中研究如何升级两个手册,相信这些要求都会体现在新版的手册中。