用一个例子可以更好地说明这个问题.我将使用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) 而不是传统的教程和书籍,主要解释语法,数据结构,函数,高阶函数,宏等,而不是传统的项目欧拉像练习,什么是学习如何设计大型应用程序的良好综合资源Lisp语言,涵盖客户端以及服务器端设计和实现?
是否有任何指南,从步骤1到步骤42解释,如何逐步实现一个有趣的应用程序?
哪个最好,按组件组织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)