• 田常发
    2019-07-23
    许老师,我想问一下,学go的话要不要去学一下,设计模式,有的话,您有没有什么资料可以推荐一下?

    作者回复: 学什么语言都要设计模式。不过设计最重要的不是模式,而是关于解耦的思考

    
     15
  • xiaobang
    2019-07-24
    这一章看的有点卡,主要是因为对前端知识不熟悉。我看到js代码里面出现class关键字一度怀疑用的是什么语言。另外提一个建议,老师讲的时候能不能按照软件设计的过程来展开。比如开始做需求分析,这个画图程序要提供哪些功能,支持哪些图形等。然后列出平台对画图的支持,再描述在平台上直接硬写会写成什么样的程序,最后按mvc模式重构。我感觉这样能更好的表现设计的思路。

    作者回复: 多谢建议

    
     11
  • Linuxer
    2019-07-19
    由Controller来创建具体Shape这样会不会,model和controller又耦合了呢

    作者回复: controller本来就会耦合model和view。重点是controller之间不要耦合

    
     6
  • Smallfly
    2019-08-17
    下载源码并切换到 v26 分支,用浏览器打开 index.html 文件,可使用开发者工具进行断点调试。

    绘制矩形的过程:

     1.    点击 `Creat Rect` 按钮,激活 react.js(Controller);
     2.    view.js(View) 接收到 drawing 的 onmousedown 事件,传递给事件的实现者 react.js;
     3.    react.js 接收到 onmousedown 事件,记录起始点 p1;
     4.    同理,react.js 接收到 onmousemove 事件,记录 p2, 并调用全局函数 invalidate 绘制;
     5.    invalidate 交给 qview.invalidateRect 处理(为什么不直接调用 qview.invalidateRect?);
     6.    qview.invalidateRect 调用 qview.onpaint,在 onpaint 中调用当前激活的 rect.js 的 onpaint 方法;
     7.    rect.js 中 onpaint 调用 buildShape() 创建 QRect(Model) 实例,然后调用该实例的 onpaint 方法绘制;
     8.    绘制结束时 react.js 接收到 onmouseup 事件,把当前 model 实例存入 doc(Model),保证重绘时能够再次绘制原来的图形;

    MVC 角色的通信过程:

    V -> C -> V -> C -> M
    展开

    作者回复: react.js => rect.js

     1
     5
  • Smallfly
    2019-08-17
    五讲画图程序已经讲完了,第一次只是泛泛而读,这次打算精读,并整理一下自己的理解。

    第一讲的重点架构思想包括:

     1.    为了避免 Model 知道 View 的实现细节,可以让 Model 耦合 GDI 接口。模块间通信如果避免不了耦合,就耦合稳定的模块,这个模块最好是系统的,因为系统模块相对于业务模块通常更加稳定;

     2.    ViewModel 持有 Model,并由 Controller 来更新 Model/ViewModel;

     3.    ViewModel 定义 Controller 的行为规则,但并不关心 Controller 的具体行为。Controller 可以选择性的接管 ViewModel 的事件;

     4.    ViewModel 协调 Model 和 Controller,启到承上启下的作用,所以 ViewModel 职责的划分对程序的结构有比较大的影响;

     5.    Model 的结构稳定,容易做到平台无关,ViewModel 会跟平台强关联;

     6.    避免 Controller 之间的耦合,可以使用 ViewModel 作为通信中介者;

     7.    相同的 Model 可能在 Controller 层有不同的展现方法;

    本讲中 View 应该理解为 ViewModel,View 是不应该持有 Model 数据的,文中老师也说了网页的 View 是由浏览器实现的,个人觉得从严格意义上将,这不算是 MVC 模式,也不像 MVVM,应该叫 MVMC?

    下载源码并切换到 v26 分支,用浏览器打开 index.html 文件,可使用开发者工具进行断点调试。
    展开

    作者回复: 👍

    
     4
  • 八哥
    2019-07-19
    CEO,js写的还这么好。厉害
    
     4
  • Geek_88604f
    2019-08-06
    看了几遍捋一下思路:view接收到用户事件,把事件处理委托给controller,由controller来操作model。是这样的吗,老师?

    作者回复: 是的

    
     2
  • kyle
    2019-07-19
    掉队了
    
     2
  • Geek_88604f
    2019-08-04
    view.js中"let ctx = this.drawing.getContext("2d")",这段代码是什么意思?

    作者回复: 取得二维(2D)的 Canvas 上下文,用于绘制。详细参阅: https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/getContext

    
     1
  • Luke
    2019-07-19
    保持跟进,目前只能说好像有点懂了,还是得在自己项目上多思考下,不是真的懂了
    
     1
  • Aaron Cheung
    2019-07-19
    大前端 还是非常有价值 打卡
    
     1
  • Geek_gooy
    2020-01-15
    听完画图的课,问题真的是一大堆。
    不清楚这个画图程序最终是长什么样的,没有提前给出ui设计。

    不知道程序的流程图。

    不知道程序最终怎么发布,用户怎么使用。

    知道用HTML.js.go语言,但不知道go语言扮演的是什么角色,对于一个没接触过go语言的人来说。

    不理解所谓离线画图还要用地址加端口访问,这不是远程了吗。

    ……
    展开

    作者回复: 多谢反馈

    
    
  • Lukia
    2019-09-18
    许老师好,文中有很多地方都用Selection概念用来做类比。那么具体应该怎么去理解Selection这个概念呢?

    作者回复: selection 最直白的理解是被选中的对象。

    
    
  • Halohoop
    2019-08-16
    划重点:“依赖选择是考虑耦合的一个关键因素。在依赖选择上,我们会更倾向于依赖接口更为稳定的组件,因为这意味着我们的接口也更稳定。”
    
    
  • Tesla
    2019-08-12
    老师好,请问一下Controller之间不要知道彼此的意思,是不要知道彼此实现的细节吗?有很多时候,我会在一个controller方法里调用另一个方法,将功能组合再传到客户端,这样的做法好不好呢?

    作者回复: 能够举一个实际的例子吗

     1
    
  • Geek_88604f
    2019-08-10
    浏览器打开index.htm,首先创建canvas画布对象,后面的画图操作都是在画布对象上进行的。
            接着加载dom对象,注意这里并没有实例化dom对象。
            然后加载view对象,并且实例化view对象和dom对象。view对象中定义了事件处理规则,接管画布的事件处理,将onpaint委托给了doc和contraller,注意doc的onpaint和contraller的onpaint绘制的是不同的内容,还有就是定义了contraller的操作规则。
            接下来就是加载contraller,调用view的方法注册自己,并将事件处理委托给contraller。
            最后加载和显示菜单,定义contraller的鼠标点击事件,在点击事件中指定当前contraller。这样当鼠标在画布上移动时,通过层层委托(画布——view——contraller)最终触发contraller的invalidate,invalidate触发onpaint,onpaint触发doc.onpaint。
    展开

    作者回复: 👍

    
    
  • halweg
    2019-08-07
    华龙点睛
    
    
  • humor
    2019-08-07
    为什么controller层和model层都有onpaint方法,这样controller层的onpaint方法不就多余了么

    作者回复: 不一样,画的东西是不同的东西。你可以注释掉这块的onpaint代码看下。

    
    
  • Geek_88604f
    2019-08-05
    不太明白是谁来触发invalidateRect的?

    作者回复: controller

    
    
  • Jian
    2019-08-01
    最大的收获还是解耦。首先将应用程序进行抽象/分层,然后通过中间的view层将model层和controller层串联在一起。
    controller的使用,就像java中的interface,其有多重实现方式。
    这是第二次读这篇文章了,因为没有接触过前端,不知道前端的实习方式。后面看懂了代码,但是如果能有个流程图样的粗略解释可能会更有利于理解吧。

    作者回复: 多谢建议

    
    
我们在线,来聊聊吧