Tôi cũng đang tìm kiếm các thực tiễn tốt nhất để nâng cao và mở rộng các ứng dụng của mình thông qua một kiến trúc được hình thành tốt. Tất cả các thực tiễn được đề cập ở trên hoạt động cho các ứng dụng cỡ nhỏ đến trung bình nhưng sẽ thất bại khi bạn làm việc trong một nhóm lớn hơn. Có một số cách tôi đã thử:
1) Tôi đã theo chiến lược này: https://github.com/aldeed/meteor-autoform để mở rộng và sử dụng lại các mẫu. Tác giả có một ý tưởng rất tốt về thiết kế thành phần và lĩnh vực. Tôi hiện đang triển khai nó vì cộng đồng đã phát triển 36 gói bao gồm hầu hết mọi trường hợp và tôi có thể sử dụng TypeScript để được an toàn trong giai đoạn phát triển.
<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>
Đây là một bài đăng blog tốt về cách thực hiện: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/ cũng như tại đây: http: // metsengpedia .com / đọc / Blaze_Note
2) Cái này có vẻ rất hứa hẹn nhưng gần đây không được cập nhật. Nó là một gói được viết bằng kịch bản cà phê được gọi là. Các thành phần Blaze ( https://github.com/peerl Library / moror-blaze-components ) cho Meteor là một hệ thống để dễ dàng phát triển các thành phần UI phức tạp cần được sử dụng lại xung quanh ứng dụng Meteor của bạn. Bạn có thể sử dụng chúng trong CoffeeScript, vanilla JavaScript và ES6. Điều tốt nhất là, các thành phần là OOP. Đây là một trong những ví dụ của họ:
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) Tôi thích các loại và bộ chuyển mã cho tôi biết nơi nào và khi nào sẽ xảy ra lỗi. Tôi đang sử dụng TypeScript để làm việc với Meteor và tìm thấy kho lưu trữ sau: https://github.com/dataflows/meteor-typescript-utils Có vẻ như người tạo đã cố gắng thực hiện một cách tiếp cận 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>
Thật không may, dự án này không được duy trì hoặc phát triển tích cực.
4) và tôi nghĩ rằng đã được đề cập, bạn có thể mở rộng quy mô bằng cách sử dụng các gói. Điều đó đòi hỏi một cách suy nghĩ trừu tượng tốt. Nó dường như hoạt động cho Kính thiên văn: https://github.com/TelecopeJS/Telecope
5) mở rộng thiên thạch-mẫu - cung cấp nhiều cách khác nhau để sao chép trình trợ giúp mẫu, trình xử lý sự kiện và móc nối giữa các mẫu, cho phép tái sử dụng mã; một nhược điểm là tất cả việc sao chép phải được nhà phát triển quan tâm, thường xuyên hết lần này đến lần khác, điều này trở nên có vấn đề khi codebase phát triển; hơn nữa, nếu không có cộng đồng API được xác định rõ ràng thì không thể xây dựng và chia sẻ các thành phần
6) Các thành phần dòng chảy - Các thành phần dòng chảy gần với React hơn trong thiết kế API trong khi Blaze Các thành phần đang giữ các khái niệm quen thuộc như bối cảnh dữ liệu và trình trợ giúp mẫu; Mặt khác, các Thành phần Dòng chảy vẫn sử dụng các trình xử lý sự kiện dựa trên mẫu trong khi Các thành phần Blaze tạo cho chúng các phương thức lớp để dễ dàng mở rộng hoặc ghi đè chúng thông qua kế thừa; nói chung, các thành phần Blaze dường như được định hướng OOP nhiều hơn; Các thành phần dòng chảy chưa được phát hành chính thức ( tín dụng văn bản cho # 5 và # 6 https://github.com/peerl Library / moror-blaze-components #javascript-and- es6-support )
Số 2 và 3 cũng cần một số sử dụng, nhưng bạn sẽ đạt được tốc độ phát triển theo thời gian. Số bốn cho phép bạn xây dựng và kiểm tra các thành phần để làm cho mã của bạn ổn định hơn. Số ba đi kèm với lợi thế về sự an toàn của Typecript, đây là một điểm cộng rất lớn khi bạn phát triển trong một nhóm có tài liệu kém. Tuy nhiên, tôi hiện đang chuyển số hai sang TypeScript vì tôi cảm thấy rất thoải mái khi làm việc với nó và tôi không phải gấp đôi gói trình biên dịch để làm cho nó hoạt động với Meteor khi tôi không sử dụng Gulp.
Vẫn còn khó để tìm đúng cách để làm việc với Meteor. Bạn cần phải tự mình tìm ra nó, nếu không, bạn sẽ có một cấu trúc thư mục được sắp xếp độc đáo, nhưng bạn không biết nơi nào có mọi thứ. Chúc mừng mã hóa.