小编Rob*_*Foo的帖子

函数式编程中的依赖注入

用一个例子可以更好地说明这个问题.我将使用Javascript(实际上是Coffeescript的语法),但仅仅因为Javascript只是另一个LISP,对吧?

所以,假设我正在编写一个(显然)执行ajax请求的Web应用程序.我实现了一个函数来处理:

ajaxRequest = (url, params, callback) ->
    # implementation goes here
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个从服务器获取数据的网格.我的代码中的某处我必须做这样的事情:

userGrid.onMustFetch = ->
    ajaxRequest '/fetch/users', { surname: 'MacGyver' }, (data) ->
        # fill grid with data
Run Code Online (Sandbox Code Playgroud)

究竟是什么问题?如果我想测试onMustFetch的实现,我将无法这样做,因为在onMustFetch中,正在调用依赖项,并且测试环境无法控制依赖项.

为了解决这个问题,我将依赖项注入到我想要测试的函数中.这意味着将onMustFetch更改为:

userGrid.onMustFetch = (ajaxRequest) ->
    ajaxRequest '/fetch/users', { surname: 'MacGyver' }, (data) ->
        # fill grid with data
Run Code Online (Sandbox Code Playgroud)

现在测试代码可以将ajaxRequest的模拟传递onMustFetch并成功测试行为.

Wunderbar,对吧?错误!现在我有一个第二个问题,不必权实例绑定的问题ajaxRequest到正确的实例onMustFetch.

在像Java这样的语言中,我可以使用依赖注入框架为我做这个,我的代码看起来像这样:

class UserGrid {

    private AjaxService ajaxService;

    @Inject
    public UserGrid(AjaxService ajaxService) { …
Run Code Online (Sandbox Code Playgroud)

javascript dependency-injection

13
推荐指数
2
解决办法
2989
查看次数

了解如何使用类似Lisp的语言设计和实现大型和复杂的应用程序

而不是传统的教程和书籍,主要解释语法,数据结构,函数,高阶函数,宏等,而不是传统的项目欧拉像练习,什么是学习如何设计大型应用程序的良好综合资源Lisp语言,涵盖客户端以及服务器端设计和实现?

是否有任何指南,从步骤1到步骤42解释,如何逐步实现一个有趣的应用程序?

lisp architecture scheme clojure

11
推荐指数
3
解决办法
573
查看次数

哪个是组织i18n资源键的最佳方法?

哪个最好,按组件组织i18n资源键?

FILE_TAB_TITLE:    'Files'
FILE_FIELD_TITLE:  'File'
GROUP_TAB_TITLE:   'Group'
GROUP_FIELD_TITLE: 'Group'
SAVE_MENU_ITEM:    'Save'
SAVE_AS_MENU_ITEM: 'Save as...'
SAVE_BUTTON:       'Save'
Run Code Online (Sandbox Code Playgroud)

或者他们的意思是什么?

FILE:    'File'
FILES:   'Files'
GROUP:   'Group'
SAVE:    'Save'
SAVE_AS: 'Save as...'
Run Code Online (Sandbox Code Playgroud)

internationalization

5
推荐指数
0
解决办法
558
查看次数