2

Backbone.js フレームワーク (プロトタイプ ベース) を使用する Web アプリケーションがあります。ただし、Backbone.js コードではないオブジェクト指向のコードがあります。私の質問は、コードのすべてがオブジェクト指向ではない場合、UML を使用してアプリケーション モデリングを文書化するにはどうすればよいかということです。プロトタイプベースのスタイルをモデル化し、OO と組み合わせるにはどうすればよいですか? それは可能かつ/または正しいですか?誰かが私にいくつかのドキュメントを教えてもらえますか?

4

2 に答える 2

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'、アプリケーションの存続期間中、スーパークラスのプロトタイプは変更されません。

もちろん、プライベート/保護されたプロパティが欠けていますが、それ以外の点では、バックボーン クラス モデルは Java や C# と何ら変わりはないので、標準の UML クラス図で記述できない理由がわかりません。

于 2013-01-18T13:18:33.007 に答える
0

クラスレス言語のコードのクラス図を文字通り描くことはできません。

できることは、クラスの代わりにプロトタイプまたはオブジェクトを描画することです。

于 2013-01-18T03:06:06.897 に答える