2013-02-08 2 views
1

Я ищу для имитации интерфейса и DTO в javascript для этой проблемы. объект dto, вызывающий объект и другая реализация для того же интерфейса IWorker.Javascript: Интерфейс и DTO

caller получит dto для создания экземпляра, будет подавать его с помощью пользовательских входов, а затем вызывать правильную реализацию Iworker (метод execute).

Я хочу, чтобы в моем коде я есть Juste один экземпляр DTO, и один экземпляр вызывающего абонента, так что я буду иметь Juste называть caller.CallWorker() каждый раз, когда пользователь делает другой выбор

Пожалуйста, скажите мне, если идея хороша или нет, и любая реализация в JavaScript приветствуется

спасибо

Edit: Спасибо за помощь, будет принимать решение Берги, но мне нужно еще одну вещь Так моя реализация будет как является:

var caller = { 
    callWorker: function(obj) { 
     if(obj.id == 1) Worker1.execute(); 
     if(obj.id == 2) Worker2.execute(); 
     if(obj.id == 2) Worker3.execute(); 
    } 
}; 

, но это означает, что я должен добавить все рабочие ОПРЕДЕЛЕНИЯХ (один JS скрипт на реализацию) на странице HTML. Я хочу просто добавить динамически сценарии, ведь активный рабочий зависит от многих бизнес-логик, поэтому я буду включать их динамически, чтобы на странице были только активные работники. Как вы меня порекомендовали? Выполнять все условия в caller.callworker? или есть более элегантный подход.

ответ

2

я ищу, чтобы симулировать интерфейс

Там нет «интерфейсов» в динамичном языке типизированного JavaScript, а также нет классов. Ближайшее моделирование - это функция, которая проверяет, имеет ли данный объект определенный набор методов; однако он не может выполнять никаких тестов типа или функциональности.

и DTO

Ближе всего к DTO является JSON-serialisable объект. Это означает, что он не имеет циклов, не содержит объектов Date или даже объектов хоста.

Я хочу, чтобы в моем коде я есть Juste один экземпляр DTO, и один экземпляр вызывающего абонента, так что я буду иметь Juste называть caller.CallWorker() каждый раз, когда пользователь делает другой выбор

Это еще один шаблон дизайна: Singletons. Они могут быть легко закодированы в JS, поскольку объекты могут создаваться «на лету» и не нуждаются в классе и конструкторе, которые должны предотвращать множественные экземпляры.Просто используйте объектные литералы для них.

любая реализация в JavaScript приветствуется

Это простой пример, но вы можете продлить его там, где вам нужно:

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); 

или есть более элегантный подход.

Сделать работников массивом или объектом. Например

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); 
      }); 
    } 
}; 
+0

Я отредактировал вопрос, мне нужен еще один совет. Спасибо за помощь. –

+0

Мне не нужна динамическая загрузка. я включу все файлы js активного рабочего пользователя в первую загрузку страницы и также сгенерирую серверную сторону сервера рабочего сервера Спасибо за решение –

+0

А, я вижу, вы хотели * предварительно * загрузить их динамически. Тем не менее, вы можете видеть возможности использования коллекции ... – Bergi

1

Поскольку JavaScript динамически типизирован, нет необходимости в конструкции interface. Вы можете вызывать свой метод для каждой из ваших реализаций, не наследуя от интерфейса. Что касается DTO, то тот же самый ответ действительно применим. Вы можете использовать JSON для создания объекта, но хотите его и передать его по кабелю без необходимости каких-либо статически типизированных конструкций, которые вы упомянули.

+0

Мне нужно сделать поиск по динамически типизированным языкам. Итак, если я понимаю вас, я могу сделать вот так: function doSomething (obj) { if obj.id == 1 obj.execute(); if obj.id == 2 obj.doExecute(); }; , поэтому нет необходимости в реализации интерфейса, просто, возможно, только для элегантной цели. –

1

JS.Class позволяет создавать interfaces.

+0

Существует много js-фреймворков, поэтому я не знаю с чего начать. Microsoft с машинописными текстами, google ... Какой из них вам больше нравится? или просто JS OOP достаточно –

Смежные вопросы