我正在寻找在 javascript 中模拟接口和 DTO 来解决这个问题。一个对象 dto、一个对象调用者以及同一接口 IWorker 的不同实现。
调用者将接收一个 dto 进行实例化,将向其提供用户输入,然后调用 Iworker 的正确实现(方法执行)。
我希望在我的代码中只有一个 dto 实例和一个调用者实例,这样每次用户做出另一种选择时我就可以调用 caller.CallWorker()
请告诉我这个想法是否好,欢迎使用 javascript 实现
多谢
编辑:感谢您的帮助,将采取 Bergi 解决方案,但我还需要一件事 所以我的实现将是这样的:
var caller = {
callWorker: function(obj) {
if(obj.id == 1) Worker1.execute();
if(obj.id == 2) Worker2.execute();
if(obj.id == 2) Worker3.execute();
}
};
Run Code Online (Sandbox Code Playgroud)
但这意味着我必须在 html 页面中添加所有工作定义(每个实现一个 js 脚本)。我只想动态添加脚本,实际上活动工作人员依赖于很多业务逻辑,因此我将动态包含它们以在页面中仅包含活动工作人员。你建议我怎么做?caller.callworker 中的所有条件都满足吗?或者有更优雅的方法。
\n\n\n我正在寻找模拟界面
\n
动态类型语言 JavaScript 中没有“接口”,也没有类。最近的模拟是一个检查给定对象是否具有一组特定方法的函数;但它无法进行任何类型或功能测试。
\n\n\n\n\n和DTO
\n
最接近 DTO 的是 JSON 可序列化对象。这意味着它没有循环,不包含Date对象,甚至不包含宿主对象。
\n\n\n我希望在我的代码中只有一个 dto 实例和一个调用者实例,这样每次用户做出另一种选择时我就可以调用 caller.CallWorker()
\n
这是另一种设计模式:单例模式。它们可以轻松地用 JS 进行编码,因为对象可以动态创建,并且不需要需要防止多次实例化的类和构造函数。只需对它们使用对象文字即可。
\n\n\n\n\n欢迎任何 JavaScript 实现
\n
这只是一个简单的示例,但您可以在需要的地方扩展它:
\n\nfunction makeDTO(id) {\n // creates a basic data structure, with empty or default values or from parameters\n return {\n id: id,\n userInput: [],\n validate: false,\n \xe2\x80\xa6\n };\n}\nvar caller = {\n callWorker: function(obj) {\n // do something\n }\n};\n\nvar dto = makeDTO(14);\ncaller.callWorker(dto);\nvar asString = JSON.stringify(dto);\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n或者有更优雅的方法。
\n
让工人成为数组或对象。例如
\n\nvar workers = {\n 1: {/* std worker #1 */},\n \xe2\x80\xa6\n};\n// then the caller will look like this:\nvar caller = {\n callWorker: function(obj) {\n var workerName = obj.id; // just the id? Or something more complex\n if (workerName in workers)\n workers[workerName].execute(obj);\n else\n dynamicallyLoadWorker(workerName, function callbackWhenLoaded(worker) {\n workers[workerName] = worker;\n worker.execute(obj);\n });\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
27879 次 |
| 最近记录: |