我可以在JavaScript中使用Laravel的“服务容器模式”吗?

时间:2016-06-02 20:57:45

标签: javascript laravel polymorphism repository-pattern

所以,假设我正在使用JavaScript构建单页应用程序。目前我的应用程序中没有持久层,但我仍然需要编写代码。

class App {
  handleClick(event) {
    User.saveToFile(event.target.value);
  }

  render() {
    return 'Some template...';
  }
}

所以,我创建了具体的用户类。但是现在只需将其保存到本地存储。

class User {
  constructor(localStorageHelper) {
    this.localStorageHelper = localStorageHelper;
  }

  save(name) {
    this.localStorageHelper.users.save({
      name
    });
  }
}

数据库准备就绪后,我需要切换到数据库。如果我使用的是面向对象的语言,我可以简单地创建一个接口并使用多态或存储库模式来解决这个问题。

我想知道如果我创建一个包含所有具体实现的app容器会怎么样。例如,我可以创建一个bindings.js文件,如下所示:

import UserPersister from './Repos/Db/User'
import PostPersister from './Repos/File/Post'

const Bindings = {

  'UserPersister': UserPersister,

  'PostPersister': PostPersister

};

现在在我的App.js文件中。我可以这样做:

let User = Container.make('UserPersister');

class App {
  handleClick(event) {
    User.saveToFile(event.target.value);
  }

  render() {
    return 'Some template...';
  }
}

现在,只需在bindings.js中更改它们,我就可以轻松地在不同的实现之间切换。如果你和Laravel一起工作过,那么这似乎很熟悉(当然除了服务提供商)。

这对我来说听起来不错,但我不确定在JavaScript中执行此类操作是否实际可行。根据您使用JavaScript的经验,您会给出什么建议?

1 个答案:

答案 0 :(得分:0)

如果你想重现laravel的模式 - 那可能很难 - 但我可以建议你两种可以帮助你的技术。当你梳理它们时,你可以很容易地实现非常相似的代码概念。

1 TypeScript

实际上你在上面的代码中使用它。它是一种JavaScript包装器,您可以在其中编写类似于Java解决方案的代码。您可以在此处访问polymorphisminheritanceencapsulation,就像典型的PHP OOP一样。这可以加快你的工作速度,它是纯粹的,它使用ECMAScript 2015

2 AngularJS

大型JS框架,非常强大,拥有庞大的社区。这个例外为您提供注入服务(如Laravel的IoC),它将自动解析您的所有依赖项。您可以使用$resources轻松创建存储库,TypeScript是REST API请求的ajax包装器。有些服务提供商可以在应用程序负载上运行。最好的是 - 你可以使用Angular构建一个页面的应用程序。它还有许多其他优点。稳定的version 1unstable verison 2var grid = $('#divBillGrid').data('kendoGrid'); var content = $(".k-grid-content"); content.scrollTop(grid.tbody.height()); 中开发的。

使用这两个工具,您可以为前端(客户端)构建出色的东西。如果你想要更多的工具,那就是:

  • PuppetJS - 服务器端生成客户端JS脚本(双方都有一个实现!)。
  • React - 基于组件的优秀图书馆