我有一个使用Backbone.js框架(基于原型)的Web应用程序。但是,面向对象的代码不是Backbone.js代码。我的问题是:如果不是所有的代码都是面向对象的,我如何使用UML记录应用程序建模? 如何基于原型建模并将其与OO结合?是否可能和/或正确?谁能指点我一些文件?
答案 0 :(得分:3)
你可以说,只要你只是在Backbone中使用*.extend({...})
样式类定义,那么你的Backbone类模型将是一个标准。面向对象的类模型。
考虑:
//a base class
var ViewBase = Backbone.View.extend({
//constructor
initialize: function() {
//instance field
this.someProp = "value";
},
//overrides a superclass method
remove: function() {
this.cleanup();
//call superclass method
Backbone.View.prototype.remove.apply(this, arguments);
},
//overrideable method
cleanup: function() { ... },
//an abstract method that must be implemented. It's not a compile
//time contract, but will crash in runtime if you don't implement it
getContext: function() { throw new Error("NotImplemented"); }
});
//derives a new class, doesn't affect the base class implementation
var ListItemView = ViewBase.extend({
//constructor
initialize: function() {
//instance field
this.someOtherProp = "value";
//constructor chaining
ViewBase.prototype.initialize.apply(this, arguments);
},
//add new method
filterUsers: function() { ... },
//hides a superclass method
cleanup: function() { ... },
//implement an abstract method
getContext: function() { ... }
}, {
//a static (class) method
create: function() { ... }
});
//instantiates a class
var view = new ListItemView();
//modifies the instance, but does not modify the prototype
//i.e. class definition
view.foo = 'bar';
虽然内部Backbone确实使用原型继承链接,但这里没有使用“原型特征”。 extend
函数不会修改现有对象的原型,除非您稍后使用类似ViewBase.prototype.something = 'foo'
之类的函数修改超类原型,否则超类原型将在整个应用程序的生命周期内保持不变。
当然缺少私有/受保护属性,但是Backbone类模型与Java或C#没什么区别,所以我不明白为什么标准的UML类图不能描述它?
答案 1 :(得分:0)
你无法用无类语言为代码绘制类图。
你可以做的是绘制原型或对象而不是类。