本文是虚拟仪器的总体设计方案,是一个草案,很多具体设计还没定型。 暂时想独立建站,因为捆绑并没有太多好处。不过似乎php的程序员远远超过jsp的,而java类的又远远超过ruby on rail 的。这个现象让我有点不知所措。因为依我看,ruby优于java,虽然java是个蠢东西,但是依然远远优于php。 捆绑的好处还是有的,首先是结合紧密,从xxx的角度看,我甚至可以做一个wordpress插件,让用户用最最简单的方法就能自行编辑虚拟仪器。 但是我怀疑这个工作量应该大于独立建站,除非php的确优于java,而java优于ruby。 暂时认为独立的程序可行性更大。因为市面上早就有独立的虚拟仪器,但是从未见过网站性质的虚拟仪器。不过网站形式比较牛逼。这个想不好,设计完了再 说。 无论是仪器还是按钮,从设计角度角度看,都是同样的对象:输入有多个,输出也有多个,他们能对输出结果进行控制。即便从 按钮角度看,输入输出也未必只有一个,设计时要注意。 仪 器对象包括了多个按钮对象,但是这是聚合吗?如果这是聚合,那电路图是什么?如果搞不清楚,不如让仪器类与按钮类分开,让仪器层 增加更多的属性,比如被聚合的按钮的名称和位置 仪器在整个系统中,往往被看作一个按钮。这只是一个粒度问题。解决这个问题,就让仪器类继承按钮类,它就可以被cast成按钮了。 表现层必须很简单,若是网站形式,针对控件的每一个操作,都用ajax发送到后台java class,处理完毕后发送回来,控件根据class的指挥动作。 View层还需要负责对象的外观图片,对于仪器,还需要负责子对象的相对位置。 理论上,保证view层可以使用网页形式也可以使用app形式。 一个model,从使用角度看,是用户在设计它,而不是程序员。切记切记。 model对象:
所谓属性,包括 on/off型(开了就有声音,关了就没有), 线性放大型(推子,旋钮),选择型的波段开关。 从功能角度看,有电阻型的,用于控制放大的,值域的; 有电容型的,处理频域; 应该还有一些按钮,其功能在以上列表之外的。 按钮其实也是一些公共的class,而且肯定会需要用到接口,以实现多重继承. 真的需要这么花哨吗? 因为这些method会大量复用,所以还是独立出来,成为interface比较好。这叫Adaptor模式。 最难的部分是聚合后的对象,这个对象内部有很多对象,这个内部相关性是很复杂的。它实质上要表达的是一个电路图(内部逻辑)。(比如说,某个按钮按 下后,其他按钮无论干什么,都没用了) 针对这一点,需要一个数据库表,表达每个对象之间的输入输出关系。 运行的时候,翻译成链表(还是map?)(多个输入的话,就是多个 链表)只要找到仪器的输入(其实不用找,使用这个仪器的时候,用户当然会指定它的输入和输出),后面的计算倒是迎刃而解,可以自动完成的。 先从用户使用角度來解释吧:(本段不要删除,总控需要看,提意见)
以上是原理图部分,接下去要跟真实照片叠加。 power point 2007中是否有调音台的素材图片?而且非常像真的?
几个难点: 1)在编程时期,我们无法建立object,只是一些class和interface而已。用户使用的时候,才会告知,这个object的外观,具 体表现(比如默认衰减20db)。用什么方法可以在运行时new 一个对象?而且,一旦它被建立,还能保存。这似乎要用到对象的持久化了。 动态创建对象的方法: ClassName c = Class.forName(ClassName).newInstance() 问题是,这个c,是用 户输入的名字啊,写程序的时候是不知道的! the class need to have a default constructor. To do anything else, read the java.lang.reflect package API 2)用什么数据结构來表达这样的一个连线图?多输入和多输出的。map ? 一堆的interface 或者class,提供了method。 例子: double function amplifier (double volumn, double amp ){ return volumn*amp ; 输入输出的处理: 可以不用声音,而是用字符串+数字。比如 输入音量{bfb},经过按钮后,输出音量60%。 因为model层已经非常复杂了,为了让model层成为一个漂亮的类,它只描述它自己的行为,不管界面,也不管界面对它的调用。所以有个 control层负责处理用户在界面上的点击。 比如说,他按了电源按钮,cotrol 层要处理 button.click() ,然后把它翻译成 model中的 switch_off(); 就做类似的事情,别的不做。 找邱工好好聊聊,罗列出大多数开关的类型,画一个结构树。 按钮直接会有大量聚合,这用什么模式比较恰当? html5目前是否可以应用? 是否可以直接写canvas? javascript 5 对ajax有什么更新?毕竟我要做的是一个很轻量级的View,倘若有简单的方案,在view上不需要花什么工夫。 |