Sapui5 在多个js文件中拆分控制器

Sapui5 在多个js文件中拆分控制器,sapui5,Sapui5,我想知道如何在多个JavaScript文件中拆分控制器。我目前有一个控制器,它有大约5000多行,这是相当令人沮丧的导航通过它。有没有关于如何开始的建议?您可以从以下几种方法开始: 使用“Mixin”模式 将您的逻辑划分为几个“类”,并将它们放在单独的AMD模块中,然后“需要”它们并在控制器中使用 Mixin可以实现为一个AMD模块,它只返回带有所有所需函数的JSON对象。为了将它注入控制器,只需使用jQuery.extend方法,通过mixin增强控制器的对象。另一种方法是在控制器之间设置一些

我想知道如何在多个JavaScript文件中拆分控制器。我目前有一个控制器,它有大约5000多行,这是相当令人沮丧的导航通过它。有没有关于如何开始的建议?

您可以从以下几种方法开始:

  • 使用“Mixin”模式
  • 将您的逻辑划分为几个“类”,并将它们放在单独的AMD模块中,然后“需要”它们并在控制器中使用

  • Mixin可以实现为一个AMD模块,它只返回带有所有所需函数的JSON对象。为了将它注入控制器,只需使用jQuery.extend方法,通过mixin增强控制器的对象。

    另一种方法是在控制器之间设置一些层次结构,并在控制器之间使用继承。将多个控制器使用的逻辑移到一个
    BaseController.js

    例如,您可以设置一个
    BaseController.js
    ,它扩展自
    sap/ui/core/mvc/Controller

    sap.ui.define([“sap/ui/core/mvc/Controller”],函数(Controller){
    “严格使用”;
    返回Controller.extend(“BaseController”{
    someBaseFunction:function(){
    //做点什么
    },
    });
    });
    
    而另一个控制器中的,例如,
    App.controller.js
    从您的
    BaseController.js
    扩展:

    sap.ui.define([%PATH\u TO\u YOUR\u BASE\u CONTROLLER%/BaseController],
    ],功能(基本控制器){
    “严格使用”;
    返回BaseController。扩展(“%PATH\u TO\u您的应用程序”{
    onInit:function(){
    //从BaseController.js调用函数
    this.someFunction();
    }
    });
    });
    
    这个问题可能会导致一些固执己见的答案,但一般来说,你可以从以下几点开始:

    • 问问自己是否有可能先降低5k+LOC。例如。:
      • 确保你没有重新发明UI5已经具备的功能 支持开箱即用,如解析和验证模型数据
      • 考虑采用UI5提供的更多声明性方法,例如,简单、双向、将视图拆分为小视图/在合理的情况下拥有自己的控制器(),等等
    • 分析您的代码以接受()

    我还鼓励您在开始之前编写一些回归。

    我有4个控制器用于1个视图,目前我正在使用以下解决方案。我的主控制器是扩展Subcroller3,Subcroller3是扩展Subcroller2,然后Subcroller2是扩展Subcroller1。这是可行的,但似乎不是一个合适的解决方案。我是否可以将主控制器扩展到所有3个分包商?不,我认为这是不可能的。一个ui5控件始终只能扩展另一个控件。因此,您选择的方法是正确的解决方案。您可以尝试将控制器原型扩展到所有分包商。无论如何,继承不一定是组织代码的最佳方式。。。我发现,特别是在继承链很深的情况下,它会使事情变得过于复杂。使用mixin方法可能会更好。@cschuff没错,但是Ui5框架没有提供分割代码的好方法。将代码拆分为几个类,然后要求代码内联也会造成陷阱,因为您永远不知道哪个类/控制器需要您的代码。在大型项目中,这也会导致问题。@FrancescoIannazzo JS本身确实提供了拆分代码的可能性。查看这篇关于mixin的文章,例如: