Ayrıca, uygulamalarımı iyi tasarlanmış bir mimari aracılığıyla geliştirmek ve ölçeklemek için en iyi uygulamaları arıyorum. Yukarıda belirtilen uygulamaların tümü küçük ve orta boy uygulamalar için çalışır, ancak daha büyük bir ekipte çalıştığınızda başarısız olur. Denediğim birkaç yol var:
1) Bu stratejiyi izledim: şablonları ölçeklemek ve yeniden kullanmak için https://github.com/aldeed/meteor-autoform . Yazarın bileşen ve saha tasarımı konusunda çok iyi bir fikri vardır. Şu anda uyguluyorum çünkü topluluk neredeyse her vakayı kapsayan 36 paket geliştirdi ve geliştirme aşamasında TypeScript'i güvenli bir şekilde kullanmak için kullanabilirim .
<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>
İşte nasıl yapılacağı hakkında iyi bir blog yazısı: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/ ve ayrıca burada: http: // meteorpedia .com / okuma / Blaze_Notes
2) Bu çok umut verici görünüyor, ancak son zamanlarda güncellenmedi. Kahve komut dosyasında yazılmış bir pakettir. Meteor için Blaze Bileşenleri ( https://github.com/peerlibrary/meteor-blaze-components ), Meteor uygulamanızın etrafında yeniden kullanılması gereken karmaşık UI öğelerini kolayca geliştirmek için bir sistemdir. Bunları CoffeeScript, vanilya JavaScript ve ES6'da kullanabilirsiniz. En iyi şey, bileşenler OOP. İşte örneklerinden biri:
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) Bir şeyin nerede ve ne zaman yanlış gideceğini söyleyen türleri ve transpiler'i seviyorum. Meteor ile çalışmak için TypeScript kullanıyorum ve aşağıdaki havuzu buldum: https://github.com/dataflows/meteor-typescript-utils , yaratıcısı bir MVC yaklaşımı gerçekleştirmeye çalışmış gibi görünüyor.
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>
Ne yazık ki, bu proje sürdürülmüyor veya aktif olarak geliştirilmiyor.
4) ve bence bu zaten belirtilmiş, paketleri kullanarak ölçeklendirebilirsiniz. Bunun için iyi bir soyut düşünme şekli gerekir. Teleskop için çalışıyor gibi görünüyor: https://github.com/TelescopeJS/Telescope
5) meteor-şablon-uzantısı - şablon yardımcıları, olay işleyicileri ve kancalar şablonlar arasında kopyalamanın çeşitli yollarını sağlar, kodun yeniden kullanılmasına izin verir; bir dezavantajı, tüm kopyalamanın bir geliştirici tarafından, tekrar tekrar, kod tabanı büyüdükçe sorunlu hale gelmesi gerektiğidir; ayrıca, açıkça tanımlanmış bir API topluluğu olmadan bileşenler oluşturamaz ve paylaşamaz
6) Akış Bileşenleri - Akış Bileşenleri API tasarımında React'e daha yakınken, Blaze Bileşenleri veri bağlamları ve şablon yardımcıları gibi tanıdık kavramları korur; Öte yandan Akış Bileşenleri yine de şablon tabanlı olay işleyicilerini kullanırken Blaze Bileşenleri bunları sınıf yöntemleri haline getirir, böylece miras yoluyla bunları genişletmeyi veya geçersiz kılmayı kolaylaştırır; genel olarak Blaze Components daha OOP odaklı görünmektedir; Akış Bileşenleri henüz resmi olarak piyasaya sürülmedi ( # 5 ve # 6 için metin kredileri https://github.com/peerlibrary/meteor-blaze-components#javascript-and-es6-support )
2 ve 3 numaralı numaraların da biraz kullanılması gerekiyor, ancak zamanla geliştirme hızı kazanacaksınız. Dört numara, kodunuzu daha kararlı hale getirmek için bileşenler oluşturmanıza ve test etmenize olanak tanır. Üçüncüsü, kötü belgelere sahip bir ekipte geliştiğinizde büyük bir artı olan, tam metin güvenliği olan TypeScript'in avantajı ile birlikte gelir. Bununla birlikte, şu anda TypeScript'e ikinci numarayı taşıyorum çünkü onunla çalışmak çok rahatım ve Gulp kullanmadığımda Meteor ile çalışmasını sağlamak için derleyici paketini tweeklemek zorunda değilim.
Meteor ile çalışmanın doğru yolunu bulmak hala zor. Bunu kendiniz anlamanız gerekir, aksi takdirde güzelce düzenlenmiş bir klasör yapısı elde edersiniz, ancak her şeyin nerede olduğu hakkında hiçbir fikriniz yoktur. Mutlu kodlama.