[EDIT] tôi đã viết một bài báo trên blog của tôi để giải thích mọi thứ chi tiết hơn:
read it on sam-dev.net và bạn có thể bây giờ read part II, với mẫu mã.
Tôi sẽ trả lời câu hỏi của riêng mình. Không phải vì tôi nghĩ đó là cách tiếp cận tốt nhất, nhưng chỉ vì đó là một trong những tôi đã quyết định đi cùng.
Đây là cách tôi đã chia module doanh nghiệp của tôi vào các thư mục
- ứng dụng
- businessModule
- điều khiển
- index.js
- firstCtrl.js
- secondCtrl.js
- chỉ
- dịch vụ
- xem
- lọc
- anotherBusinessModule
- chia sẻ
- app.js
- index.html
Mỗi module có cấu trúc thư mục riêng của mình để điều khiển, chỉ thị, vv ...
Mỗi thư mục có một tập tin index.js và sau đó các file khác để tách từng bộ điều khiển, mỗi chỉ thị, vv ..
Tệp index.js chứa định nghĩa của mô-đun. Ví dụ: đối với bộ điều khiển của businessModule ở trên:
angular.module('myCompany.businessModule.controllers', []);
Không có phụ thuộc ở đây, nhưng có thể có bất kỳ phụ thuộc nào.
Sau đó, trong firstCtrl.js, tôi có thể tái sử dụng mô-đun đó và thêm bộ điều khiển để nó:
angular.module('myCompany.businessModule.controllers').controller('firstCtrl',
function(){
});
Sau đó app.js tập hợp tất cả các mô-đun mà tôi muốn cho các ứng dụng của mình bằng cách thêm chúng vào các phụ thuộc mảng.
angular.module('myApp', ['myCompany.businessModule', 'myCompany.anotherBusinessModule']);
Thư mục được chia sẻ chứa chỉ thị và những thứ khác không cụ thể cho mô-đun kinh doanh và có thể được sử dụng lại ở mọi nơi.
Một lần nữa, tôi không biết đó có phải là cách tiếp cận tốt nhất, nhưng nó chắc chắn có hiệu quả đối với tôi hay không. Có lẽ nó có thể truyền cảm hứng cho người khác.
EDIT
Như các tập tin index.js chứa module khai báo, họ phải được tham chiếu trong trang html trước khi bất kỳ kịch bản ứng dụng khác. Để làm như vậy, tôi đã sử dụng IBundleOrderer của ASP.NET MVC 4:
var bundle = new ScriptBundle("~/bundles/app") { Orderer = new AsIsBundleOrderer() };
bundles.Add(bundle.IncludeDirectory("~/app", "*.js", true));
public class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
files = files.OrderBy(x => x.Name == "index.js" ? 0 : 1);
return files;
}
}
bạn không cần phải tạo một ứng dụng lớn nếu bạn có nhiều ứng dụng không liên quan, chỉ cần tạo một ứng dụng cho mỗi doanh nghiệp. Ứng dụng có thể sử dụng lại các dịch vụ, bộ điều khiển và chỉ thị khác của ứng dụng. Hãy nhớ rằng một "ứng dụng web" vẫn là một trang web, không có vấn đề gì, nó không giống như một phần mềm máy tính để bàn. – mpm
Tôi có thể thể hiện bản thân mình không chính xác. Tôi chỉ có một ứng dụng, nhưng đó là BIG. Và tôi muốn chia nó thành nhiều mô-đun kinh doanh khác nhau. Mỗi mô-đun kinh doanh sẽ chứa tập hợp các chế độ xem, chỉ thị, bộ điều khiển riêng của nó, v.v. Nhưng cuối cùng, đó là cùng một ứng dụng web, chỉ với một điểm vào. Đó có phải là cách tiếp cận tốt hay không và tôi nên tổ chức mã của mình như thế nào? – Sam
không quan trọng, bạn có thể chia các tệp theo ý muốn. Một số người sử dụng 1 tập tin cho mỗi dịch vụ, bộ điều khiển hoặc chỉ thị, một số người chia nó cho mỗi 'tính năng', không thực sự quan trọng vì tiêm phụ thuộc. bạn có thể mở lại một mô-đun qua nhiều tệp, v.v ... thực sự nó là vấn đề về hương vị. Bạn chỉ cần tất cả các tập tin js của bạn trong html của bạn ở cuối. Cá nhân tôi có 1 tệp cho mỗi loại (1 tệp cho dịch vụ, 1 tệp cho chỉ thị, 1 cho bộ điều khiển) ngay cả đối với các ứng dụng lớn. – mpm