gpt4 book ai didi

Javascript : Interface and DTO

转载 作者:行者123 更新时间:2023-11-29 18:24:37 25 4
gpt4 key购买 nike

我正在寻找在 javascript 中模拟接口(interface)和 DTO 来解决这个问题。对象 dto、对象调用者和同一接口(interface) 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();
}
};

但这意味着我必须在 html 页面中添加所有工作人员定义(每个实现一个 js 脚本)。我只想动态添加脚本,实际上活跃的工作人员取决于很多业务逻辑,所以我将动态地包含它们以在页面中只包含活跃的工作人员。你建议我怎么做?在 caller.callworker 中执行所有条件吗? 或者有更优雅的方法。

最佳答案

i am looking to simulate interface

动态类型语言 JavaScript 中没有“接口(interface)”,也没有类。最近的模拟是检查给定对象是否具有特定方法集的函数;但它不能进行任何类型或功能测试。

and DTO

最接近 DTO 的是 JSON 序列化对象。这意味着它没有循环,不包含 Date 对象甚至宿主对象。

I want that in my code i have juste one instance of dto, and one instance of caller, so i will have juste to call caller.CallWorker() everytime the user make another choice

这是另一种设计模式:单例。它们可以很容易地用 JS 编码,因为对象可以动态创建,不需要需要防止多次实例化的类和构造函数。只需为它们使用对象字面量即可。

any implementation in javascript is welcome

这只是一个简单的例子,但是你可以在你需要的地方扩展它:

function makeDTO(id) {
// creates a basic data structure, with empty or default values or from parameters
return {
id: id,
userInput: [],
validate: false,

};
}
var caller = {
callWorker: function(obj) {
// do something
}
};

var dto = makeDTO(14);
caller.callWorker(dto);
var asString = JSON.stringify(dto);

or there is more elegant approach.

让 worker 成为一个数组或对象。例如

var workers = {
1: {/* std worker #1 */},

};
// then the caller will look like this:
var caller = {
callWorker: function(obj) {
var workerName = obj.id; // just the id? Or something more complex
if (workerName in workers)
workers[workerName].execute(obj);
else
dynamicallyLoadWorker(workerName, function callbackWhenLoaded(worker) {
workers[workerName] = worker;
worker.execute(obj);
});
}
};

关于Javascript : Interface and DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14781574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com