Я также ищу лучшие практики для улучшения и масштабирования моих приложений с помощью хорошо продуманной архитектуры. Все вышеперечисленные методы работают для приложений малого и среднего размера, но потерпят неудачу, когда вы работаете в большой команде. Есть несколько способов, которые я попробовал:
1) Я придерживался этой стратегии: https://github.com/aldeed/meteor-autoform для масштабирования и повторного использования шаблонов. У автора есть очень хорошая идея по проектированию компонентов и полей. В настоящее время я внедряю его, потому что сообщество разработало 36 пакетов, которые охватывают почти каждый случай, и я могу использовать TypeScript для обеспечения безопасности типов на этапе разработки.
<template name="autoForm">
{{#unless afDestroyUpdateForm this.id}}
{{! afDestroyUpdateForm is a workaround for sticky input attributes}}
{{! See https://github.com/meteor/meteor/issues/2431 }}
<form {{atts}}>
{{> Template.contentBlock ..}}
</form>
{{/unless}}
</template>
Вот хороший пост в блоге о том, как это сделать: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/, а также здесь: http: // meteorpedia .com / чтения / Blaze_Notes
2) Это выглядит так многообещающе, но в последнее время не обновлялось. Это пакет, написанный на кофейной надписи. Компоненты Blaze ( https://github.com/peerlibrary/meteor-blaze-components ) для Meteor представляют собой систему для простой разработки сложных элементов пользовательского интерфейса, которые необходимо повторно использовать в приложении Meteor. Вы можете использовать их в CoffeeScript, ванильном JavaScript и ES6. Лучше всего, компоненты ООП. Вот один из их примеров:
class ExampleComponent extends BlazeComponent {
onCreated() {
this.counter = new ReactiveVar(0);
}
events() {
return [{
'click .increment': this.onClick
}];
}
onClick(event) {
this.counter.set(this.counter.get() + 1);
}
customHelper() {
if (this.counter.get() > 10) {
return "Too many times";
}
else if (this.counter.get() === 10) {
return "Just enough";
}
else {
return "Click more";
}
}
}
ExampleComponent.register('ExampleComponent');
{{> ExampleComponent }}
3) Мне нравятся типы и транспортер, которые говорят мне, где и когда что-то пойдет не так. Я использую TypeScript для работы с Meteor и нашел следующий репозиторий: https://github.com/dataflows/meteor-typescript-utils кажется, что создатель пытался реализовать подход MVC.
class MainTemplateContext extends MainTemplateData {
@MeteorTemplate.event("click #heybutton")
buttonClick(event: Meteor.Event, template: Blaze.Template): void {
// ...
}
@MeteorTemplate.helper
clicksCount(): number {
// ...
}
}
class MainTemplate extends MeteorTemplate.Base<MainTemplateData> {
constructor() {
super("MainTemplate", new MainTemplateContext());
}
rendered(): void {
// ...
}
}
MeteorTemplate.register(new MainTemplate());
<template name="MainTemplate">
<p>
<input type="text" placeholder="Say your name..." id="name">
<input type="button" value="Hey!" id="heybutton">
</p>
<p>
Clicks count: {{ clicksCount }}
</p>
<p>
<ul>
{{#each clicks }}
<li> {{ name }} at <a href="{{pathFor 'SingleClick' clickId=_id}}">{{ time }}</a></li>
{{/each}}
</ul>
</p>
</template>
К сожалению, этот проект не поддерживается или активно развивается.
4) и я думаю, что уже упоминалось, вы можете масштабировать с помощью пакетов. Это требует хорошего абстрактного мышления. Кажется, работает для телескопа: https://github.com/TelescopeJS/Telescope
5) расширение-метеор-шаблон - предоставляет различные способы копирования помощников шаблонов, обработчиков событий и перехватов между шаблонами, что позволяет повторно использовать код; недостатком является то, что все копирование должно осуществляться разработчиком, часто снова и снова, что становится проблематичным по мере роста кодовой базы; Более того, без четко определенного API-сообщества сообщество не может создавать и совместно использовать компоненты.
6) Компоненты потока - Компоненты потока ближе к React в дизайне API, в то время как компоненты Blaze хранят знакомые понятия, такие как контексты данных и помощники шаблонов; Компоненты Flow, с другой стороны, все еще используют обработчики событий на основе шаблонов, в то время как Компоненты Blaze делают их методами классов, чтобы их было проще расширять или переопределять с помощью наследования; в общем, компоненты Blaze более ориентированы на ООП; Компоненты потока еще не выпущены официально ( текстовые сообщения для № 5 и № 6 https://github.com/peerlibrary/meteor-blaze-components#javascript-and-es6-support )
К номерам 2 и 3 тоже нужно привыкнуть, но со временем вы получите скорость разработки. Номер четыре позволяет вам создавать и тестировать компоненты, чтобы сделать ваш код более стабильным. Номер три обладает преимуществом полной безопасности типов Typescript, что является огромным плюсом, когда вы разрабатываете в команде с плохой документацией. Однако в настоящее время я переношу номер два на TypeScript, потому что мне очень удобно с ним работать, и мне не нужно настраивать пакет компилятора, чтобы он работал с Meteor, когда я не использую Gulp.
Все еще трудно найти правильный способ работы с Метеором. Вы должны понять это сами, в противном случае вы получите хорошо организованную структуру папок, но у вас нет понятия, где все находится. Удачного кодирования.