首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于组织长代码的更好的使用、混合或静态方法。

用于组织长代码的更好的使用、混合或静态方法。
EN

Stack Overflow用户
提问于 2016-08-31 06:56:09
回答 1查看 481关注 0票数 2

我有一个包含长代码的类,现在我想将代码组织成单独的文件。

我有两个想法,使用Mixin和使用静态方法。

例如,

代码语言:javascript
复制
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 1)将生成子视图代码移动到静态类

代码语言:javascript
复制
### 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
        }
    }
}

#idea2 2)使用Mixin

代码语言:javascript
复制
### 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);

哪个更好?或者其他更好的主意?请给我建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 07:16:51

Javascript和类型记录是原型语言,这意味着它们将更经典的OO模型分为嵌入、委托和创建。这允许您表达某些在经典模型中不存在的强大概念。您的第一个示例更类似于经典OO中的解决方案,在这种情况下,您更喜欢组合而不是继承。

在原型语言中,组合仍然比继承更好,但是您可以更直接地表达它,例如通过混合(嵌入概念)。我认为你应该总是喜欢混合而不是成员组成。

如果您想深入研究这些概念,请查看艾略特谈三种类型的原型继承,如果您想深入研究,请查看卢卡·卡德利的物象理论

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39242725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档