Saya juga mencari praktik terbaik untuk meningkatkan dan skala aplikasi saya melalui arsitektur yang dipahami dengan baik. Semua praktik yang disebutkan di atas berfungsi untuk aplikasi berukuran kecil hingga sedang, tetapi akan gagal saat Anda bekerja di tim yang lebih besar. Ada beberapa cara yang saya coba:
1) Saya mengikuti strategi ini: https://github.com/aldeed/meteor-autoform untuk membuat skala dan menggunakan kembali template. Penulis memiliki ide yang sangat bagus tentang desain komponen dan bidang. Saat ini saya mengimplementasikannya karena komunitas mengembangkan 36 paket yang mencakup hampir setiap kasus dan saya dapat menggunakan TypeScript untuk mengetikkan aman selama fase pengembangan.
<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>
Berikut ini adalah posting blog yang bagus tentang cara melakukannya: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/ juga di sini: http: // meteorpedia .com / baca / Blaze_Notes
2) Yang ini terlihat sangat menjanjikan tetapi belum diperbarui akhir-akhir ini. Ini adalah paket yang ditulis dalam skrip kopi yang disebut. Komponen Blaze ( https://github.com/peerlibrary/meteor-blaze-components ) untuk Meteor adalah sistem untuk mengembangkan elemen UI kompleks yang perlu digunakan kembali di sekitar aplikasi Meteor Anda. Anda dapat menggunakannya dalam CoffeeScript, JavaScript vanilla, dan ES6. Yang terbaik adalah, komponennya adalah OOP. Ini adalah salah satu contoh mereka:
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) Saya suka jenis dan transpiler yang memberi tahu saya di mana dan kapan ada sesuatu yang salah. Saya menggunakan TypeScript untuk bekerja dengan Meteor dan menemukan repositori berikut: https://github.com/dataflows/meteor-typescript-utils sepertinya pencipta mencoba menyelesaikan pendekatan 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>
Sayangnya, proyek ini tidak dikelola atau dikembangkan secara aktif.
4) dan saya pikir itu sudah disebutkan, Anda dapat skala menggunakan paket. Itu membutuhkan cara berpikir abstrak yang baik. Tampaknya berfungsi untuk Teleskop: https://github.com/TelescopeJS/Telescope
5) meteor-template-extension - menyediakan berbagai cara menyalin pembantu templat, penangan peristiwa dan kait di antara templat, memungkinkan penggunaan kembali kode; Kelemahannya adalah bahwa semua penyalinan harus diperhatikan oleh pengembang, seringkali berulang kali, yang menjadi masalah ketika basis kode bertambah; selain itu, tanpa komunitas API yang jelas tidak dapat membangun dan berbagi komponen
6) Komponen Aliran - Komponen Aliran lebih dekat untuk Bereaksi dalam desain API sementara Komponen Blaze menyimpan konsep yang sudah dikenal seperti konteks data dan bantuan templat; Komponen Flow di sisi lain masih menggunakan event handler berbasis template sementara Blaze Components membuatnya menjadi metode kelas sehingga lebih mudah untuk memperluas atau menimpanya melalui warisan; secara umum Komponen Blaze tampaknya lebih berorientasi OOP; Komponen Arus belum dirilis secara resmi ( kredit teks untuk # 5 dan # 6 https://github.com/peerlibrary/meteor-blaze-components#javascript-and-es6-support )
Nomor 2 dan 3 perlu dibiasakan juga, tetapi Anda akan mendapatkan kecepatan pengembangan seiring waktu. Nomor empat memungkinkan Anda membuat dan menguji komponen untuk membuat kode Anda lebih stabil. Nomor tiga hadir dengan keuntungan dari keamanan tipe penuh dari ScriptScript, yang merupakan nilai tambah besar ketika Anda berkembang dalam tim dengan dokumentasi yang buruk. Namun, saya saat ini porting nomor dua ke TypeScript karena saya merasa sangat nyaman untuk bekerja dengannya dan saya tidak perlu tweek paket kompiler untuk membuatnya bekerja dengan Meteor ketika saya tidak menggunakan Gulp.
Masih sulit menemukan cara yang tepat untuk bekerja dengan Meteor. Anda harus mengetahuinya sendiri, jika tidak, Anda akan berakhir dengan struktur folder yang tertata dengan baik, tetapi Anda tidak tahu di mana semuanya berada. Selamat coding.