javascript - 构建现有 JS 代码的框架

标签 javascript oop frameworks refactoring

我有一些为开源应用程序编写的过程 javascript 代码,我想将其重构为 OOP,但由于我对 javascript 框架的经验很少,所以很难找到适合我需要的框架,虽然我还没有尝试过任何东西,但我只是阅读了有关 AngularJS、Backbone.js 和 Knockout 的内容。

我想构建代码,因为此刻,到处都是乱七八糟的全局变量和函数。

我不得不提的是,所有业务逻辑都在服务器级别处理,因此客户端代码仅使用它从服务器接收或请求的数据处理 UI。

代码可以在这里找到: https://github.com/paullik/webchat/blob/asp.net/webchat/Static/Js/chat.js

你有什么建议吗?

最佳答案

Object-Oriented JavaScript is not necessarily the answer to all your problems.

我的建议是谨慎选择关于该主题的选择。

在实践中,为了更像传统的面向对象语言,OO-JS 可以为您的代码增加更多的复杂性。您可能知道,JS 是独一无二的。

重要的是要知道有一些设计模式可以构建您的代码并保持实现轻便灵活。

It is Design Patterns that I see structuring advanced JS implementations, not OO. To paraphrase Axel Rauchmeyer - "Object Oriented methodology does not fit into basic JavaScript syntax, it is a twisted and contorted implementation, and JS is far more expressive with out it."

这种分析的根源归结为 JS 没有类这一事实。本质上,因为一切都是对象,所以你已经有了面向对象的变量和函数。因此,该问题与在编译语言 (C/Java) 中发现的问题略有不同。

What Design Patterns are there for JavaScript?

Addy O' Somani 和 Essential Design Patterns 是一个很好的引用资源。 He wrote this book on Design Patterns in JavaScript.

但还有更多……更多。

一个。 require.js - 有一种以非常令人印象深刻的方式加载 JS 代码模块的方法。 这些通常被称为模块加载器,并且被广泛认为是加载 js 文件的 future ,因为它们在运行时优化了性能。是的,还有其他人存在。如果要加载多个 js 文件,请记住这一点。 (应要求移至顶部)。

B. MVC - 有许多 Model View Controller 框架可帮助您构建代码。 它是一种模式,但对于您的目的而言可能不合理。你提到了 backbone、knockout 和 angular……是的。这些可以为您解决问题,但我担心它们可能 1) 学习曲线高,以及 2) 对您的环境杀伤力过大。

C.命名空间或模块模式。 可能对您的需求最重要。 要解决全局变量,只需将它们包装在一个命名空间中并引用它。 这些是产生模块加载器的非常好的模式。

D.关闭 - 你提到了 OO JS。其中有用的部分是闭包的概念,可以为您提供……私有(private)成员。起初这是一个神秘的想法,但当你认清其中的规律后,这就是微不足道的练习。

E.自定义事件——不在对象之间使用硬引用变得非常重要。示例:AnotherObject.member; 这是因为它将两个对象紧密耦合在一起并使它们都无法灵活更改。为了解决这个问题,触发并监听事件。在传统的设计模式中,这是观察者。在 JS 中它被称为 PubSub。

F.回调 - 回调模式使 AJAX 成为可能,它正在彻底改变 Window 8、Firefox OS 和 Node.js 的开发 - 因为有一种叫做 non-blocking-io 的东西。非常重要。

不要害怕。这是长期和高级 JavaScript 实现的方向。

一旦你认出了这些模式,它就从那里走下坡路了。

希望这对您有所帮助。

关于javascript - 构建现有 JS 代码的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12394178/

相关文章:

javascript - 检查函数调用是否为变量定义

C++使用来自不同类的公共(public)变量

javascript - 我应该熟悉哪些 JavaScript 框架?

php - Zend Framework 2 RESTful Controller 操作

Javascript 或和赋值运算符

javascript - 范围问题? Javascript 计时器不接受新的倒计时值

javascript - 如何使用正则表达式从textarea获取IP值

java - 是 M :N a bad style in OOP? 有没有更好的办法来管理 m :n relationships?

python - 在同一类的不同实例之间实现逻辑

xcode - 将 header 添加到框架以进行发布