Когда использовать классы против модулей в TypeScript?
Я нахожусь в процессе переноса большой кодовой базы в Typescript, но хотел получить хорошее представление о том, когда и где я должен использовать определенные вещи.
Прямо сейчас у меня есть несколько больших пространств имен в модулях:
(function (nameSpace) {
var privateVariables = '';
function privateFunctions () { }
// Public methods
nameSpace.someMethodHere = function () { };
}(window.nameSpace = window.nameSpace || {}));
Мой вопрос в TypeScript, есть ли какая-то разница/преимущество во мне, просто превращая их в просто классы? Или это должен быть один большой Модуль с классами (каждым методом) внутри?
module nameSpace {
export class someMethodHere {
// etc
}
// more classes (my methods) here ??
}
-ИЛИ ЖЕ-
class nameSpace {
someMethodHere () {
// code
}
// more prototyped methods here
}
Или я должен настроить их так же, как сейчас? Я пытался, и он просто продолжал давать мне ошибки, не уверен, как я делаю nameSpace.someMethodHere
внутри модуля без класса!
Ответы
Ответ 1
Это зависит. Модуль должен быть дискретным набором "вещей", а не просто смешанной коллекцией разрозненных классов, поэтому, если все кажется, что они принадлежат друг другу, используйте модуль для их группировки.
Я считаю, что команда TypeScript ждет, чтобы увидеть, как люди используют этот язык до публикации руководства, но я думаю, что люди опубликуют модуль, в котором они в настоящее время публикуют script, поэтому jQuery будет модулем, каждый jQuery Плагин будет модулем, основой для тестирования будет модуль, а структура AOP будет модулем - например.
Ответ 2
- Рассмотрите возможность использования модуля в качестве хорошего варианта для Singleton (один статический объект доступен везде), где обычное использование для библиотек.
- Рассмотрите возможность использования класса, когда вам нужно создать несколько экземпляров этого класса или если вы планируете продлить этот класс.
В основном модули хороши для упаковки всего вашего кода в один удобный глобальный объект, а класс - умный, чтобы структурировать ваш код и представление данных.