11

Sản phẩm của chúng tôi là một ứng dụng web ASP.Net. Hiện tại, chúng tôi sử dụng các dự án trang web trong Visual Studio, nhưng đã xem xét việc sử dụng các dự án ứng dụng web trong một thời gian dài. Tôi hiện đang nghiên cứu chúng để chúng tôi hy vọng có thể cải thiện quy trình triển khai của mình.Cấu trúc và triển khai ứng dụng web

Chúng tôi có một trang web cơ sở được chia sẻ và phổ biến giữa các khách hàng khác nhau, và sau đó chúng tôi mở rộng với chức năng dành riêng cho khách hàng trong các dự án trang web của khách hàng. Các dự án khách hàng mở rộng cơ sở, và do đó dựa vào nội dung của nó. Để xây dựng sản phẩm đầy đủ, trước tiên chúng tôi triển khai trang web cơ sở và sau đó phủ nó với nội dung từ dự án khách hàng.

Khi xem xét chuyển đổi sang Dự án ứng dụng web trong Visual Studio, chúng tôi hy vọng có thể tạo dự án cơ sở, sau đó tạo dự án khách hàng và thiết lập tham chiếu đến cơ sở. Cấu trúc này dường như làm việc OK, nhưng khi chúng tôi đang cố gắng triển khai ứng dụng từ dự án khách hàng bằng cách sử dụng MSDeploy, chỉ có dll từ trang web cơ sở đang được xuất bản. Điều này là tốt cho một số điều, tham khảo các mã biên dịch là hữu ích, nhưng có các mặt hàng khác như hình ảnh, js trang, htm, vv mà vẫn là nguồn đó là cần thiết cho các ứng dụng khách hàng hoạt động. Chúng tôi cần nhiều hơn mã được biên dịch từ trang web cơ sở của chúng tôi.

Đó là tất cả đang được nói, tôi có thể nghĩ ra một vài lựa chọn ở đây:

  1. Tiếp tục triển khai trong 2 bước. Đầu tiên là trang web cơ bản, sau đó là trang web của khách hàng để xây dựng sản phẩm đầy đủ.
  2. Sửa đổi quy trình triển khai để sao chép các tệp nguồn được yêu cầu từ dự án cơ sở
  3. Kiến trúc sư lại mô hình của chúng tôi để hỗ trợ mối quan hệ cơ sở khách hàng này theo cách khác. Không hoàn toàn chắc chắn như thế nào điều này sẽ làm việc, và sẽ là lựa chọn ít nhất khả thi.
  4. ??

Có tùy chọn khác mà tôi bị thiếu không? Tôi có làm gì sai với cách tôi đang thiết lập dự án của mình không? Có nhiều hơn để làm cho một ứng dụng Web tham chiếu một ứng dụng web khác ngoài việc chia sẻ mã được biên dịch không? Nếu đó là trường hợp, tại sao bạn sẽ không chỉ sử dụng một thư viện lớp học chia sẻ? Hoặc có lẽ tôi đang thiếu một cái gì đó với quá trình MS Deploy?

Tôi mở cửa cho các đề xuất ở đây vì tôi cảm thấy như tôi đang thiếu điều gì đó. Tôi không nghĩ rằng mô hình của chúng tôi cho các ứng dụng web của chúng tôi là quá độc đáo.

Cập nhật: Quy trình triển khai kép không hoạt động nhưng cảm thấy một chút kludgey. Bất kỳ đầu vào nào khác?

+6

BTW, vâng, mô hình của bạn không bình thường. Nhưng chạy trốn khỏi trang web "dự án" trong mọi trường hợp. Họ là duy nhất, và không phải là một cách tốt. –

+0

Ya chúng tôi đã biết một thời gian rằng các dự án trang web là .. umm, "đặc biệt" theo một số cách. Nó chỉ khó khăn vào những thời điểm để sửa chữa một cái gì đó mà không bị hỏng. Điều gì làm cho cấu trúc của chúng tôi trở nên độc đáo? Một tùy chọn khác có thể hiểu là để mọi dự án chứa toàn bộ nguồn của ứng dụng và thiết lập một số loại phân nhánh nguồn. Tuy nhiên, chúng tôi đã thực hiện điều đó và rất khó để duy trì các thay đổi. – yourbuddypal

+1

Tôi đã không nghĩ đến việc sử dụng phân nhánh trong kịch bản này trước đây, nhưng FYI, việc phân nhánh trong TFS 2010 dễ sử dụng hơn rất nhiều so với trước đây. Nó đáng xem. Tôi cũng khuyên bạn nên tách riêng và tách riêng các phần ứng dụng cụ thể của ứng dụng khỏi các phần phổ biến. Tạo điểm mở rộng và tùy chỉnh cụ thể trong ứng dụng. Điều đó sẽ làm cho nó dễ dàng hơn để xem cách tốt nhất để triển khai này. Ngoài ra còn có các thủ thuật thú vị mà bạn có thể chơi với MSDEPLOY. Xem http: //www.amazon.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248 –

Trả lời

0

Trang web "được chia sẻ" giữa các khách hàng như thế nào? Liệu mỗi khách hàng cuối cùng có được một trang web khác nhau (địa chỉ ip, vv) hoặc họ đang đăng nhập vào cùng một trang web nhưng nhận được chức năng khác nhau? Bạn có thể muốn xem xét thêm TẤT CẢ các chức năng vào một dự án duy nhất và sau đó bật/tắt tính năng thông qua cài đặt.

0

Nếu tôi đã hiểu chính xác câu hỏi của bạn, bạn cũng muốn xuất bản các mục không được biên soạn (htm, JS, hình ảnh, v.v.). Vì vậy, mỗi tệp trong tab Solution Explorer của bạn có các thuộc tính riêng (truy cập bằng phím F4) cho phép bạn chọn hành động xây dựng (ví dụ: biên dịch -> sẽ chèn mục đó vào DLL nếu có, nội dung -> sẽ sao chép tệp "as is" vào thư mục đầu ra).

Tôi nghĩ hành động xây dựng "nội dung", với tùy chọn "sao chép vào thư mục đầu ra" được đặt thành "sao chép nếu mới hơn", có thể là giải pháp bạn đang tìm kiếm.

0

Tôi sẽ phân tích kỹ những gì bạn đang chia sẻ giữa các dự án và cách bạn chia sẻ chúng.

Nếu mã được biên dịch, cách chính xác là trích xuất các lớp đó vào không gian tên và lắp ráp riêng của chúng và chia sẻ DLL qua các dự án. Đảm bảo bạn tuân theo nguyên tắc OO và SOLID trong khi tái cấu trúc.

Nếu nội dung (js, htm, hình ảnh, css) mà bạn chia sẻ, bạn có một vài tùy chọn tại đây. Bạn có thể tạo một thư mục ảo riêng cho nội dung và tham chiếu nội dung của bạn bằng một URL tuyệt đối. Điều này giúp vì sau này xuống dòng nếu bạn muốn tách riêng một dự án thành trang web riêng của mình trong IIS, bạn không phải thay đổi URL nội dung. Bạn cũng có thể có tất cả nội dung trong trang web cơ bản của bạn và sau đó tham chiếu nội dung trong các dự án khác bằng cách sử dụng đường dẫn tương đối so với trang web cơ sở.

Mặt khác, nếu đó là điều khiển người dùng ASP.NET hoặc chế độ xem ASP.NET MVC mà bạn muốn chia sẻ, cách tốt nhất là tạo một mục riêng lẻ trong mỗi dự án. Điều này không nhất thiết có nghĩa là có một tệp vật lý riêng biệt trong đường dẫn đó - bạn cũng có thể thêm các mục trong dự án .NET trong Visual Studio chỉ là các liên kết tham chiếu.

Về quy trình triển khai, tôi không nghĩ có bất kỳ điều gì sai trái với dự án trang web. Các dự án trang web có một mục đích khác với các dự án ứng dụng Web, chính là bạn không phải biên dịch các lớp của bạn mỗi khi bạn triển khai mã (miễn là chúng nằm trong các thư mục ứng dụng chính xác). Tôi khuyên bạn nên gắn bó với quy trình triển khai 2 bước với các dự án trang web.

Tôi cũng sẽ xem xét các trang web (thư mục ảo) được tạo trong IIS và cân nhắc lồng ghép chúng nếu có ý nghĩa. Và việc xem xét các hồ bơi ứng dụng (dù tách biệt hay chia sẻ) cũng không gây hại hay không.

Cuối cùng, đây là một câu hỏi cũ. Hãy chia sẻ nếu bạn đã thực hiện một chiến lược thành công.

1

Bằng cách sử dụng WebResource lắp ráp, bạn có thể thêm CSS/JS/Một số tệp khác làm tham chiếu cùng với mã i.e, DLL dự án cơ sở của bạn.

Nếu đúng, bạn có thể Thêm WebResource này vào dự án cơ sở của bạn rồi đi qua liên kết bên dưới.

http://support.microsoft.com/kb/910442

Giống như cách này, hầu hết các công cụ của bên thứ ba sẽ truy cập vào CSS của họ và các tập tin JS.

Hãy thử điều này. Hy vọng nó sẽ giúp.