2016-08-31 8 views
2

私はロングコードを含むクラスを持っていますが、コードを別々のファイルに整理したいと思います。長いコードを整理するためにmixinや静的メソッドを使うのが良いです

私はMixinを使用し、静的メソッドを使用して2つのアイデアを持っています。例えば

class myController { 
    routeSubView(type: SubViewType, params: any) { 
     swtich(type) { 
      case SubViewType.A: 
       this._showA(params); 
       break; 
      case SubViewType.B: 
       this._showB(params); 
       break; 
      case SubViewType.C: 
       this._showC(params); 
       break; 
      case SubViewType.D: 
       this._showD(params); 
       break; 
      // ... a lot more 
     } 
    } 

    private _showA() { 
     // initialize view and render 
    } 

    private _showB() { 
     // initialize view and render 
    } 

    private _showC() { 
     // initialize view and render 
    } 

    private _showD() { 
     // initialize view and render 
    } 

    // ... a lot more 
} 

#idea1)#idea2)MIXIN

### mixin.ts 
export interface ISubviews { 
    _showA(params: any): any; 
    _showB(params: any): any; 
    _showC(params: any): any; 
    _showD(params: any): any; 
} 

export function _showA(param: any){ 
    // initialize view and render 
} 
export function _showB(param: any){ 
    // initialize view and render 
} 
export function _showC(param: any){ 
    // initialize view and render 
} 
export function _showD(param: any){ 
    // initialize view and render 
} 

### my_controller.ts 

import * as { Mixin } from './mixin'; 

class myController implement Mixin.ISubviews { 
    _showA(params: any): any; 
    _showB(params: any): any; 
    _showC(params: any): any; 
    _showD(params: any): any; 

    /// ... 
} 

Cocktail.mixin(myController, Mixin); 

使用静的クラスにサブビュー・コードを生成

### sub_views.ts 
class SubViews { 
    static showA(params: any) { 
     // initialize view and render 
    } 
    static showB(params: any) { 
     // initialize view and render 
    } 
} 

### my_controller.ts 
import { SubViews } from './sub_views'; 
class myController { 
    routeSubView(type: SubViewType, params: any) { 
     swtich(type) { 
      case SubViewType.A: 
       SubViews::showA(); 
       break; 
      case SubViewType.B: 
       SubViews::showB(); 
       break; 
      case SubViewType.C: 
       SubViews::showC(); 
       break; 
      case SubViewType.D: 
       SubViews::showD(); 
       break; 
      // ... a lot more 
     } 
    } 
} 

を移動良いアイデアですか?または他の良いアイデアですか?アドバイスをお願いします。

答えて

3

JavascriptとTypescriptはプロトタイプ言語であり、より古典的なOOモデルを埋め込み、委任、および作成に分割します。これにより、古典的なモデルには存在しない強力な概念を表現することができます。あなたの最初の例は、古典的なOOの回避策に似ています。

プロトタイプの言語では、継承よりも構図は良いですが、mixin(埋め込み概念)などを使ってより直接的に表現できます。おそらく、あなたはいつもメンバー構成よりもミックスインを好むべきだと思います。

これらのコンセプトについて詳しく知りたい場合は、Eric Elliot's talk about the three types of prototypal inheritanceをご覧ください。さらに深く移動したい場合は、Luca Cardelli's A Theory of Objectsをご覧ください。

+0

私はmixinを使いました。私も参照を参照してください、ありがとう! –

関連する問題