`
apusiczhang
  • 浏览: 17422 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

IoVC,一种新的编程思想

阅读更多

IoVC——“Inversion of View-Control”,即“视图控制反转”,换言之:它能够把对“View(即 UI 视图)的控制力”注入到你的后台业务逻辑中。这样一来,你在编写业务逻辑的过程中,对 View 拥有足够的控制力,从而能够将展现层与业务逻辑完全的解耦。

 

举一个场景:页面中有一个文本输入框,它的值对应后台的一个JavaBean的属性。我们首先来看一下传统的编程模型:

 

页面:
<w:textField value="#{myBean.value}"/>
后台:
public class MyBean {
    private String value;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

 

此时,假设用户需要发生变化,我们需要设置文本输入框的tooltip,并且,它的值来自于后台 JavaBean 的另一个属性,那么,程序需要做如下调整:

 

页面:
<w:textField  value="#{myBean.value}" tooltip="#{myBean.tooltip}"/>
后台:
public class MyBean {
    private String value;
    private String tooltip;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }    public String getTooltip() {
        return tooltip;
    }
    public void setTooltip(String tooltip) {
        this.tooltip = tooltip;
    }
}

 

我们可以观察:在传统的编程模型下,如果页面逻辑发生变化,我们首先需要修改UI展现层,加上 tooltip="#{myBean.tooltip}" 的语句,然后,再在后台Bean中设置此属性值。

那么,在IoVC编程模型下,情况又是怎样的呢?

 

页面:
<w:textField id="txt"/>
后台:
public class MyBean {
    @Bind(id="txt")
    private String value;
}

 

如果需要扩展文本编辑框的tooltip属性,只需要:

 

页面:
<w:textField id="txt"/>
后台:
public class MyBean {
    @Bind(id="txt")
    private String value;

        @Bind(id="txt" att="tooltip")
    private String tooltip;
}

 

在IoVC编程模型下,Web页面不需要发生任何变化,你只需要在后台 Java Bean 中写上这样一行属性声明即可@Bind(id="txt" att="tooltip") private String tooltip,甚至于你连传统的getter/setter都不需要。

 

换言之,在传统的编程模型下,页面美工通过网页设计工具“画”出来的页面,程序员看不懂; 而如果程序员对页面进行修改,则页面美工又无法理解; 并且,如果要更改业务逻辑,程序员需要不断的维护页面内容,最终造成页面美工与程序员无法协同工作。而在 IoVC 的编程思想下,页面美工只需要给每个组件设置一个ID,程序员在后台的业务逻辑中,便拥有对页面 UI 元素的完全控制力。Web页面在美工完成之后,程序员再也无需因为需求的变更或者逻辑的变化,而再重新维护 Web页面内容。

 

简而言之,IoVC是一种更好的MVC,是对MVC的一种高层次抽象。

 

设想一下:日后美工人员画出来的页面(只要设置了正确的ID),程序员可以拿过来直接用,并且, 如果要对页面做调整(只要不是页面元素的增加或删除),程序员可以在自己熟悉的代码中直接设置,这岂非是一种很享受的境界?

 

更多技术文章,请见:http://www.operamasks.org/

 

分享到:
评论
68 楼 sxsxsx3 2008-03-27  
hax 写道
apusiczhang 写道

至于pig345兄所提到的:同一套应用逻辑(这里的逻辑二字,有些含糊,恕笔者口拙,无法详细阐述,但想必不少朋友应该可以理解),如果需要两种不同的面貌(html?xml?),其实这在OperaMasks中是再简单不过的问题:UI是基于组件的,我们更换一下组件的RenderKit即可。


换renderkit说得轻巧,但是是有前提的。那就是你的UI组件是足够抽象,譬如是设备无关的。那就不可能在UI组件里包含具体的style。否则我就很质疑所谓换renderkit的可行性。

因为renderkit实际是开发者所不能控制也不应控制(所谓透明)的中间层,这就说明style是不应该从你的java类穿越renderkit抵达页面的,而应该和你的java类解耦。


renderkit是指组件渲染的实现吧?从jsf的生命周期来看,在invoke application之后,就是组件渲染了,这个时候renderkit根据组件树来重绘页面是不是啥都可以生成?
67 楼 sxsxsx3 2008-03-27  
看了这么多,有点糊涂了。这种东西到底怎么样听来听去也不知道所以然,姑且去down个下来试试。觉得对于一种尚未了解的新技术,先不论好与坏,能给实际应用带来价值才是有意义的。
66 楼 hax 2008-03-27  
apusiczhang 写道

至于pig345兄所提到的:同一套应用逻辑(这里的逻辑二字,有些含糊,恕笔者口拙,无法详细阐述,但想必不少朋友应该可以理解),如果需要两种不同的面貌(html?xml?),其实这在OperaMasks中是再简单不过的问题:UI是基于组件的,我们更换一下组件的RenderKit即可。


换renderkit说得轻巧,但是是有前提的。那就是你的UI组件是足够抽象,譬如是设备无关的。那就不可能在UI组件里包含具体的style。否则我就很质疑所谓换renderkit的可行性。

因为renderkit实际是开发者所不能控制也不应控制(所谓透明)的中间层,这就说明style是不应该从你的java类穿越renderkit抵达页面的,而应该和你的java类解耦。
65 楼 hax 2008-03-27  
apusiczhang 写道

To Robbin兄:
    1) 模版语言:OperaMasks 已经在路上,那就是 Facelets。
    2) Annotation:在 OperaMasks 2.0中,已经大量运用了 Annotation。Robbin兄人在上海,套用上海的一句方言是:“Annotation不要太多哦。”
    3) JSF:我们站在JSF规范之上,取之精华,弃其糟泊。我们克服了许多JSF规范中不尽人意的地方,如对状态的维护,但同时,吸取了JSF大量的精华所在,如:组件模型、生命周期等等。但至于是否完全彻底的抛弃JSF,坦白说,我们也正在思考。



虽是跟robbin同志说的,我也来凑个热闹。

关于annotation。

我觉得annotation是个好东西是无疑的,但是我们当然也知道它所带来的耦合。为什么anno那么红,我个人觉得是原先许多解耦是无必要的,比如ORM,在多数时候把ORM规则写到单独的xml里并没有提供什么好处,因为它本来就是依赖你的Object model的,反而造成维护不便。

但是UI就大大不同。UI和app logic(更不要说domain logic)的耦合永远是麻烦的根源。

实际上,我们的问题是UI自身的logic怎么办。因为UI要越来越复杂。过去我们被迫写在jsp/taglib里,这导致一个极大的问题,就是ui logic和app logic交织到一块儿了。诚然这两者之间的界限并不是清晰的,就如同app logic和domain logic一样,有时候边界是模糊的。但是确实是存在区分。否则就不会有UI组件一说。UI组件无非是要把UI逻辑给包起来,别泄漏到app logic里。

我认为真正你要解决的问题是如何UI归UI,app归app。所以出现问题不是你对UI控制力太弱,而是你对UI控制太多。这看似矛盾,实则是深层问题的必然结果。因为UI自己搞不定,只好你想点法子越俎代庖。

关于JSF,偶只有一点题外话,取精去粗,这固然好,但是如果你们不能影响JSF的规范的发展方向,那还是白搭。总得来说,我对JSF的印象就是:它是一个续命的技术,而不是一个创新的技术。
64 楼 hax 2008-03-27  
apusiczhang 写道
pig345 写道

再具体的:你为什么不能在当用户输入某些不合法的字符给这个字段的时候,(在后台判断完成后,产生返回页面时),在这个字段上加上class='invalided_field'呢?
在css定义中完全可以在不同的界面方案(我说的皮肤)中,定义不同的.invalided_field{},从而使用不同的颜色/外框/背景色等等。。。

多多利用web本身提供的灵活性不是更好?

有时候解决问题不要太急于看实现,退一步,抽象点会获得很多灵活性,这种思考方式对框架作者尤其重要阿。


你说的对,一定要充分利用Web本身提供的灵活性。
但现在的问题并不是强调是用style,或者styleClass,还是说把 style 或 styleClass 的内容放在页面中还是放在后台 Bean 中的问题,笔者一直想强调的是:假设style或者styleClass都已经定义好了(且不论它是定义在哪里),那么,如何根据用户的输入,来更改UI的表现。
IoVC,让你拥有了一种能够在后台Bean中影响UI表现的能力。
仅此而已。



你那意思,不是做项目,而是来玩hack的?

UI本身如脱缰之野马。我们要做的就是通过各种方式加以规约,以便驾驭。

所以你无故提供这样的功能只能是潘多拉之魔盒。

说什么怎么怎么用……那是无意义的。JSP还叫你用taglib不要用scriptlet,有人听么?况且到目前为止你举的例子没有一个有足够的正当性。
63 楼 hax 2008-03-27  
apusiczhang 写道

首先请"pig345"兄再观察一下笔者的语句:我并不认为将style放到后台Bean是最佳解决方案。
但同时,也请"pig345"兄考虑这样一个问题:(我的这个场景举的可能也有问题,但时间紧,一时半会想不到更合适的场景)
假设用户需要这样一种场景,在某个textField中,当用户输入某些不合法的字符,字体颜色变成红色,否则,字体颜色是蓝色。
并且,对这些字符是否合法的判断,需要到数据库中进行查询对比。
请问,这种场景,怎样解决最合适呢?

再回到楼主关于换肤的话题,何谓换肤?是指不影响用户业务逻辑的情况下,自由的更改应用系统的UI风格。
但上面的这个场景,它已经不是“换肤”所能解决的问题,这个场景本身就是用户的一种逻辑。


这样的假设(红字蓝字)不是太过肤浅就是有意斧凿。下次用户改规则了,改粗体斜体了,你还改你的java代码里面的bind???

你这个思路不过是说所有问题都拿java扛吧(让java可以控制你的ui)。我们也想用一种语言包打天下,但是这是不可能也是自寻烦恼的。

至于说所谓逻辑。这纯粹是逻辑不清。用户在提需求的时候他没有presentation/app logic/domain logic的区分是非常之正常的。但是身为设计开发者,认为对具体UI的具体改动也能属于某种逻辑,那就很有问题。对用于“和谐”的一次性项目我没意见,管你怎么做无所谓。如果用在real world应用中,我就不敢苟同。
62 楼 hax 2008-03-27  
您一举例,偶们就发笑……

这个例子反映了传统CS编程(通过bean来做界面)的遗毒。

Web的做法是这样的:

label#name:lang(zh) { width:100px; }
label#name:lang(en) { width:200px; }

表现层的东西就是表现层。

你所作的改进,或许充其量可以说是为传统做法续命。

apusiczhang 写道

我再举一个场景:
假设我们的应用系统需要支持中文和英文两种语言。诸所周知,由于中英文的差异,会导致UI的表现也会有差异。
举个简单的例子,倘若我们有一个Label,中文下,它显示:"请输入姓名",而在英文下,显示"Please input your name"
换言之,中文下,这个Label的长度为100,而英文下,它的长度要为200才能够将字符显示完全。
这种问题如何解决?
在IoVC下(确切的说是在OperaMasks 2.0下),我们可以直接在资源文件中这样定义:
#LocalStrings_zh_CN.properties
SomeBean.labelId.width=100

#LocalStrings_en_US.properties
SomeBean.labelId.width=200

然后,我们无需再做任何事情,IoVC会自动帮助我们进行lable长度的调整。

这种解决方案无疑是非常自然的,或者套用目前的流行词汇,是非常“和谐”的,而我们的维护成本也很低。

那么,传统的、常规的解决方案是怎样的?
首先,依然要定义资源文件,
然后,在页面中引入这个资源文件,
<f:loadBundle basename="messages1" var="msgs" />
最后,在Label的定义处这样写:
<label width="#{msgs.SomeBean.labelId.width}"/>

哪种方案更优雅一些呢?

61 楼 xxjhappy 2008-03-27  
对于楼主提出的IoVC+jsfc,感觉同Tapestry有点类似阿,难道真的可以让美工和程序员之间的关系变的更为松散么?还有一个问题就是jsf由sun推出后,一直感觉有气无力的,看楼主的介绍感觉这个东西和jsf还是有着联系的,不知道如何能打破目前jsf的窘境?
60 楼 apusiczhang 2008-03-27  
pig345 写道
问题是在于,即使是最强调实用、敏捷、快速开发的ROR都严格遵循着MVC的老路子,而没有反行之,应该能说明点问题吧。(ROR倒是把3层结构给抛弃了,不像j2ee还很强调多层)


你说的对。

RoR确实带给我们很多思路,很多启发,但不能因为RoR的实现方案而限制了我们的思路,IoVC也并没有反行之。

何谓MVC?
笔者以为:所谓MVC,就是要降低Model和View之间的耦合度,同时通过Controller将Model和View之间需要耦合的部分加以控制,因此,Controller的能力越强,MVC架构的质量就越高,IoVC实际上就是要最大程度地增强Controller的能力,使Model和View之间的耦合度降到最低。

和传统MVC比较,IoVC中的model和view之间的耦合度更低,仅仅通过某种映射关系将model和view之间建立关联,
没有什么form bean,action之类的东西,因此model和view可以独立维护(再次重申,我前几篇回复中那个style的例子,确实没有举好,相反,这个例子反而会给大家带来许多误解,认为IoVC就是把view塞进model),而且model和view之间可以是多对多的映射,更可以实现粗粒度的应用组件。

当然,IoVC并不仅仅只是通过几个annotation在Model和View之间建立关联那么简单,它还包含许多其它的东西,如:在IoVC中,还有一种模型事件,View的动作可以触发模型事件,而Model可以监听自己感兴趣的事件;这样做的目的,其实也是为了降低View和Model的耦合度而已。


59 楼 令狐不冲 2008-03-27  
这帖子真够热闹的,学习中~~
58 楼 plutluo 2008-03-27  
pig345 写道
注意这里的多个view不是指多个包含相似html代码的页面,这应该是模板引用(include)解决的问题(view的代码重复问题)。
如果你是真的需要多个view,比如warp一套,xml一套,html一套...,你要的功能本身就复杂了(比正常多了2倍),与其他各种实现相比,把相同的业务逻辑放到model里,而不同的展现形式放到不同的view里面,再把 根据不同的客户端返回不同view的责任 让给controller,是最省心的架构。
这个场景就是最适合用mvc来解决的场景。

如果不考虑多view其实怎么折腾都差不多,无非是代码的分割问题,或者心理问题(觉得不爽),呵呵。

plutluo 写道
pig345 写道
sxsxsx3 写道
引用

这种在后台影响UI表现的能力,还是不要有的好!


为啥呢?


我想他的后台是指model。
由于view和model的不同职责所在,不能让model管理某个特定的view的展现逻辑,这样既会造成model的过分负担(如果有多种不同的view就更麻烦了),而又把view变成了白痴(连怎么展现自己都不能作主了)。


如果对应同一个model有不同的view展示,在表现层需要根据不同的要求来构造不同的view展现么?如果说在view中增加控制展现的逻辑,那么view的复杂度就增加了不少阿。


到楼主介绍的论坛看了一下,觉得Facelets的复合组件的使用在对多个view的展示好像能避免重复的代码出现。

57 楼 pig345 2008-03-27  
问题是在于,即使是最强调实用、敏捷、快速开发的ROR都严格遵循着MVC的老路子,而没有反行之,应该能说明点问题吧。(ROR倒是把3层结构给抛弃了,不像j2ee还很强调多层)

apusiczhang 写道

其实笔者一直想强调的是:应用系统的可扩展性及可维护性,是我们的焦点所在;而MVC只是我们的一种手段,一种模式。

如果非要用Model、View、Control这三个东西来往IoVC上套的话,那么,我感觉:ManagedBean,其实更像是Control,或者是Control与Model的混合体。

至于pig345兄所提到的:同一套应用逻辑(这里的逻辑二字,有些含糊,恕笔者口拙,无法详细阐述,但想必不少朋友应该可以理解),如果需要两种不同的面貌(html?xml?),其实这在OperaMasks中是再简单不过的问题:UI是基于组件的,我们更换一下组件的RenderKit即可。

56 楼 pig345 2008-03-27  
注意这里的多个view不是指多个包含相似html代码的页面,这应该是模板引用(include)解决的问题(view的代码重复问题)。
如果你是真的需要多个view,比如warp一套,xml一套,html一套...,你要的功能本身就复杂了(比正常多了2倍),与其他各种实现相比,把相同的业务逻辑放到model里,而不同的展现形式放到不同的view里面,再把 根据不同的客户端返回不同view的责任 让给controller,是最省心的架构。
这个场景就是最适合用mvc来解决的场景。

如果不考虑多view其实怎么折腾都差不多,无非是代码的分割问题,或者心理问题(觉得不爽),呵呵。

plutluo 写道
pig345 写道
sxsxsx3 写道
引用

这种在后台影响UI表现的能力,还是不要有的好!


为啥呢?


我想他的后台是指model。
由于view和model的不同职责所在,不能让model管理某个特定的view的展现逻辑,这样既会造成model的过分负担(如果有多种不同的view就更麻烦了),而又把view变成了白痴(连怎么展现自己都不能作主了)。


如果对应同一个model有不同的view展示,在表现层需要根据不同的要求来构造不同的view展现么?如果说在view中增加控制展现的逻辑,那么view的复杂度就增加了不少阿。

55 楼 plutluo 2008-03-27  
pig345 写道
sxsxsx3 写道
引用

这种在后台影响UI表现的能力,还是不要有的好!


为啥呢?


我想他的后台是指model。
由于view和model的不同职责所在,不能让model管理某个特定的view的展现逻辑,这样既会造成model的过分负担(如果有多种不同的view就更麻烦了),而又把view变成了白痴(连怎么展现自己都不能作主了)。


如果对应同一个model有不同的view展示,在表现层需要根据不同的要求来构造不同的view展现么?如果说在view中增加控制展现的逻辑,那么view的复杂度就增加了不少阿。
54 楼 apusiczhang 2008-03-27  
pig345 写道
apusiczhang 写道
让你拥有了一种能够在后台Bean中影响UI表现的能力。

还是忍不住再说两句。如你所说,这个是IoVC的本质上要提供的。
然而就是这个能力,其实是完全有悖于MVC的,(似乎是四人帮还是其他资料里有个例子说道这个问题),MVC原则是Model中作业务规则的判定(具体到这里就是给出某字段是否正确的boolean),而怎么表现是各个不同View自己决定的。
注意是view查询model,然后自己作决定展现成什么样子,这个正是view和model的不同职责所在。

想象一下,如果这时候要你提供一个供其他系统查询/修改的基于web的接口(典型的需要是返回xml),你怎么作?能让两个不同的view(一个html的,一个xml的)使用同一个model?

说道这里忍不住要提到ROR了,可以看看他的MVC是怎么分离的。


其实笔者一直想强调的是:应用系统的可扩展性及可维护性,是我们的焦点所在;而MVC只是我们的一种手段,一种模式。

如果非要用Model、View、Control这三个东西来往IoVC上套的话,那么,我感觉:ManagedBean,其实更像是Control,或者是Control与Model的混合体。

至于pig345兄所提到的:同一套应用逻辑(这里的逻辑二字,有些含糊,恕笔者口拙,无法详细阐述,但想必不少朋友应该可以理解),如果需要两种不同的面貌(html?xml?),其实这在OperaMasks中是再简单不过的问题:UI是基于组件的,我们更换一下组件的RenderKit即可。
53 楼 plutluo 2008-03-27  
allenBen 写道
感觉有点像WEB-work或者struts2,直接是页面从Action里边拉数据

好像不是吧,从贴的例子中看,页面上没有el表达式阿,页面通过啥方式从后台拉数据?
52 楼 pig345 2008-03-27  
sxsxsx3 写道
引用

这种在后台影响UI表现的能力,还是不要有的好!


为啥呢?


我想他的后台是指model。
由于view和model的不同职责所在,不能让model管理某个特定的view的展现逻辑,这样既会造成model的过分负担(如果有多种不同的view就更麻烦了),而又把view变成了白痴(连怎么展现自己都不能作主了)。
51 楼 sxsxsx3 2008-03-27  
引用

这种在后台影响UI表现的能力,还是不要有的好!


为啥呢?

50 楼 qinqin050 2008-03-27  
继续关注中。。。
49 楼 pig345 2008-03-27  
apusiczhang 写道
让你拥有了一种能够在后台Bean中影响UI表现的能力。

还是忍不住再说两句。如你所说,这个是IoVC的本质上要提供的。
然而就是这个能力,其实是完全有悖于MVC的,(似乎是四人帮还是其他资料里有个例子说道这个问题),MVC原则是Model中作业务规则的判定(具体到这里就是给出某字段是否正确的boolean),而怎么表现是各个不同View自己决定的。
注意是view查询model,然后自己作决定展现成什么样子,这个正是view和model的不同职责所在。

想象一下,如果这时候要你提供一个供其他系统查询/修改的基于web的接口(典型的需要是返回xml),你怎么作?能让两个不同的view(一个html的,一个xml的)使用同一个model?

说道这里忍不住要提到ROR了,可以看看他的MVC是怎么分离的。

相关推荐

    OperaMasks快速进阶

    OperaMasks是一个开箱即用的Web开发解决方案,它的关键特性包括IoVC的编程思想,使得页面设计与控制逻辑分离。此外,它还内置了Ajax支持和丰富的UI组件库,适合开发高交互性Web应用和轻量级、高并发的Web站点。...

    ### 2024年第一季度青岛房地产市场季度简报总结、市场综述

    2024年第一季度,青岛房地产市场经历了显著变化,总体呈现供需双降的趋势。一季度全市商品房新增10,721套,面积约152.04万平方米,同比下降29%;销量为14,936套,面积约200.85万平方米,同比下降38%,成交均价为14,204元/平方米,同比下降2%。土地市场方面,供应总量为39万平方米,同比减少7%,但成交面积为27万平方米,同比增长31%,楼面地价为6,625元/平方米,同比增长253%,土地出让金为17.61亿元,同比增长354%。二手房市场新增挂牌2.9万套,成交13,405套,132.21万平方米,累计挂牌51.70万套,挂牌均价17,800元/平方米。此外,青岛市出台多项政策支持房地产市场平稳健康发展,包括降低房贷利率、优化开发用地土地规划政策、支持房企融资等。这些政策旨在促进市场供需平衡,防止市场大起大落。

    Linux常用命令大全.markdown

    linux常用命令大全

    MATLAB代码,用于模拟具有无限半空间体积导体的电机单元电势(MUP),星号.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    空调销售网站策划案例.doc

    空调销售网站策划案例.doc

    全球6G技术大会2024年以用户为中心的6G接入网技术研究白皮书31页.pdf

    全球6G技术大会2024年以用户为中心的6G接入网技术研究白皮书31页.pdf

    简约专业风格毕业答辩模板47个

    简约专业风格毕业答辩模板是一系列专为追求简洁与高效表达的大学生设计的答辩文档模板,共47个。这些模板融合了经典的设计元素与现代审美,强调信息的清晰传递与视觉的整洁,旨在帮助学生在答辩中以最专业的面貌展示自己的研究成果。 每个模板都具备结构合理的布局,适用于各个学科和研究领域,从人文社科到自然科学,均能满足不同需求。简约风格的设计使得学生能够专注于内容本身,避免冗余信息的干扰,提升答辩的专业性和可信度。此外,模板中合理运用的色彩、字体和图表设计,不仅增强了视觉吸引力,也使信息更易于理解。 通过使用这些简约专业风格的毕业答辩模板,毕业生能够自信地呈现自己的学术成果,提升答辩的整体效果,为成功的学术交流打下坚实基础。这些模板是展示个人研究与风格的理想选择。

    【数据集和模型】ChatGPT文本二分类

    由 Epsilon Luoo 在 HC3-Chinese 的基础上进行了一些细微的修改和清洗

    数字人动作捕捉:MATLAB-Kinect骨骼数据实时插值算法.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    HI3519DV500 配置无线网依赖库以及编译脚本

    HI3519DV500 配置无线网依赖库以及编译脚本

    定制小米8-lineage22.1安卓15-fast功能项目线刷双版root 解锁bl后fast线刷

    资源说明; 1-----刷写前提是手机必须解锁bl先。而且会在fast模式刷写固件 2-----刷写方法与官方刷写步骤一样 3-----此固件为定制初始固件。可以在fast模式刷写 4-----属于适配固件。也许有个别bug。不接受请勿下载 5-----需要一定的刷机常识与动手能力的友友刷写。 6-----资源有可复制性。下载后不支持退。请知悉 7-----定制其他需求可以在csdn私信博主 博文参阅:https://csdn9.blog.csdn.net/article/details/143058308

    【机械臂路径规划】基于matlab快速探索随机树RRT和概率路网PRM串联机械臂路径规划【含Matlab源码 13167期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    世邦魏理仕:2021年西安房地产市场回顾与2022年展望.pdf

    世邦魏理仕:2021年西安房地产市场回顾与2022年展望

    Android Studio 2022.1.1和java编程语言yinyuebofangqi.zip

    Android Studio 2022.1.1和java编程语言yinyuebofangqi

    C知道对话分享图片下载

    C知道对话分享图片

    png-jpg-gif-webp-tiff等图片压缩工具基于nodejs的实现

    png-jpg-gif-webp-tiff等图片压缩工具基于nodejs的实现,绿色本地免安装,解压后运行exe文件,将图片文件或者包含图片的文件夹拖拽到软件界面即可压缩

    派对屋A1效果器电脑调音软件

    我们要了解什么是DSP(Digital Signal Processing)。DSP即数字信号处理,是一种利用数字计算方法对信号进行分析、变换和操作的技术。在汽车音响领域,DSP被广泛应用于改善音质,通过调整频率响应、延时、相位和增益等参数,使声音更加均衡、立体。 惠威是一款数字信号处理器,适用于那些希望升级原车音响系统但预算有限的用户。它通常拥有多个输入和输出接口,可以连接到汽车的音频源和扬声器,通过软件进行调音,使得声音能够适应不同的驾驶环境和听音偏好。 ,集成了先进的噪声抑制技术和强大的功率放大器,旨在为发烧友级别的车载音响系统提供卓越的性能。用户可以通过软件对整个系统的每一个细节进行优化,包括主动分频、时间校正等,以达到Hi-Fi级别的音乐享受。

    通信工程分包合同.docx

    通信工程分包合同.docx

    demo1(1).py

    demo1(1).py

Global site tag (gtag.js) - Google Analytics