我有一个包含长代码的类,现在我想将代码组织到单独的文件中。
我有2个想法,使用Mixin并使用静态方法。
例如,
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)将生成子视图代码移动到静态类
### 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)使用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);
哪个更好主意?或任何其他更好的主意?请告诉我。
答案 0 :(得分:3)
Javascript和Typescript是原型语言,这意味着他们将更经典的OO模型拆分为嵌入,委托和创建。这允许您表达经典模型中不存在的某些强大概念。您的第一个示例更类似于经典OO中的变通方法,您更喜欢组合而不是继承。
在原型语言中,组合仍然优于继承,但您可以更直接地表达它,例如通过mixin(嵌入概念)。我认为你应该总是喜欢使用mixin而不是成员组合。
如果您想深入了解这些概念,请观看Eric Elliot's talk about the three types of prototypal inheritance,如果您想更深入,请查看Luca Cardelli's A Theory of Objects。