2011-07-30 25 views
10

Tôi hiện đang phải đối mặt với một vấn đề khá khó khăn liên quan đến việc mã hóa GWT và hy vọng sẽ được trợ giúp. Tôi hiện đang làm việc trên một ứng dụng GWT kế thừa lớn (pre-MVP days) và tôi đang tìm cách chia mã ứng dụng này dựa trên các mô-đun mà "portlet" (cái mà chúng tôi gọi là các tiện ích tổng hợp khác nhau mà chúng tôi tạo trang của chúng tôi). với) là một phần của.Thiết kế mã GWT tốt nhất để đóng gói "mô-đun"

Hiện tại các mô-đun của chúng tôi chỉ được xác định bởi gói mà portlet rơi vào nhưng tôi đang mở để thay đổi điều này để phù hợp hơn với thiết kế mã vạch chung chung.

Bất kỳ ý tưởng nào về cách tôi có thể thiết kế mã này để chỉ ra rằng portlet/composite thuộc về một "mô-đun" cụ thể và sau đó chia mã sao cho lần đầu tiên bất kỳ portlet/composite nào trong mô-đun X được tải, toàn bộ module X được tải?

Cảm ơn

+0

Bạn vẫn gặp sự cố?1 cho động lực :) –

+0

haha ​​không có thời gian để nhìn vào nó kể từ khi bạn rời @Nico nhưng nó đang đến sớm vì vậy nghĩ rằng tôi sẽ hỏi câu hỏi quá lâu :) – brent777

Trả lời

1

Hmm ... bình thường, nó khá đơn giản nhưng tôi đoán đó không phải là vấn đề thực sự của bạn ...

Đơn giản chỉ cần sử dụng này:

GWT.runAsync(new RunAsyncCallback() { 
    public void onFailure(Throwable reason) { 
     ... 
    } 
    public void onSuccess() { 
     ... 
    } 
}); 

Tất cả mọi thứ bên trong phương thức onSuccess sẽ sau đó được chia nhỏ trong một tệp javascript khác mà sau đó sẽ được tải theo yêu cầu.

Trong trường hợp bạn muốn tách các vật liệu tổng hợp ra khỏi phần còn lại của mã, chỉ cần tạo bản tổng hợp của bạn bên trong phương thức onSuccess này.

Bạn cũng có thể lồng các phương thức GWT.runAsync, vì vậy bạn có thể chia nhỏ lại phần này ở các phần khác nhau, ví dụ: GWT.runAsync đầu tiên tải mô-đun X, trong hàm tạo của mô-đun X, bạn có thể thực hiện một runAsync khác, sau đó tải composize của bạn.

Của couse, có thể có một số phụ thuộc giữa phần làm cho trình biên dịch khó phân chia nhưng tôi đã thử nghiệm nó với một trong các dự án của tôi (khoảng 40k dòng mã) và nó hoạt động như một nét duyên dáng.

+1

cảm ơn cho phản ứng nhưng tôi biết làm thế nào để sử dụng chia nhỏ mã, tôi đã tìm kiếm thêm một mẫu thiết kế để sử dụng để tách toàn bộ mô-đun mà không cần thêm hàm gọi lại async cho mỗi kết hợp (về cơ bản là biến thể trên các mẫu mà nhóm GWT đã xuất bản) – brent777

0

Việc đóng gói có ít liên quan đến việc tách mã, yếu tố chính làm cho việc chia tách mã là ít sự vướng víu giữa các lớp. Nếu một lớp đòi hỏi một lớp khác và vân vân mà cuối cùng đạt được và nắm lấy tất cả các lớp thì việc chia nhỏ mã không thể phá vỡ mọi thứ thành nhiều, bởi vì hành động đòi hỏi đầu tiên có nghĩa là mọi thứ đều được yêu cầu. Nếu bạn tách mối quan tâm của bạn hay còn gọi là khớp nối lỏng lẻo thì bạn sẽ có thể có thứ gì đó rất phù hợp để có thể chia nhỏ.

+1

cảm ơn phản hồi nhưng tôi đã biết của tất cả mọi thứ mà bạn đã đề cập. Như tôi đã nói trong câu hỏi của tôi, hiện tại các mô-đun của chúng tôi được phân chia hoàn toàn bằng gói nhưng tôi mở để thay đổi điều đó (vì tôi biết nó không liên quan gì đến việc viết mã). Những gì tôi yêu cầu là một cách để nhóm nhiều vật liệu tổng hợp thành một "mô-đun" phía máy khách và nhận được một loại lớp "quản lý" đủ thông minh để tải toàn bộ mô-đun khi bất kỳ kết hợp nào từ mô-đun đó được sử dụng. Tôi muốn tránh viết các callbacks async này cho mỗi và mọi thành phần. – brent777

0

Cách sử dụng GWTP - đó là một khung MVP tốt và chúng cung cấp cho bạn khả năng tách mã tự động. Bạn sẽ phải tổ chức lại cơ sở mã của mình để sử dụng trình bày/chế độ xem cho từng mô-đun mà bạn muốn tách. Sau đó thêm codesplitting là đơn giản như thêm các dòng sau vào người dẫn chương trình của bạn:

@ProxyCodeSplit 
@NameToken("firstpage") 
public interface MyProxy extends ProxyPlace<FirstPagePresenter> {} 

GWTP cũng có một plugin Eclipse mà tạo ra hầu hết các mã soạn sẵn.

+0

Tôi ước chúng ta có thể làm điều đó, tiếc là hệ thống của chúng ta khá "dài trong răng" và khá gắn bó với một khung công tác nguồn mở mà một trong những kiến ​​trúc sư cũ của chúng tôi viết là gwt-portlets. Đó là một hệ thống khổng lồ sẽ mất nhiều thời gian hơn chúng ta hiện tại để cấu trúc lại thành một thiết kế kiểu MVP. Tôi sẽ có một cái nhìn vào điều này mặc dù và nếu nó quay ra là khả thi cho chúng tôi thì tôi sẽ chấp nhận câu trả lời của bạn. – brent777

+0

Bạn không phải cấu trúc lại tất cả cơ sở mã của bạn thành MVP, chỉ là các vùng chứa cấp cao nhất của bạn. Giả sử ứng dụng của bạn được chia thành năm phần khác nhau, bạn sẽ có trình xem/chế độ xem cấp cao nhất chứa 5 phần được cấu trúc lại làm người trình bày/chế độ xem. Mỗi phần vẫn có thể chứa các portlet gwt, bạn không cần phải cấu trúc lại các portlet cũng như được hưởng lợi từ việc tách mã. –

+0

mmmm .... có thể làm việc cho chúng tôi, tôi sẽ dành thời gian làm một bằng chứng về khái niệm dựa trên thiết kế đó và nếu nó hoạt động tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn rất nhiều vì gợi ý. – brent777

Các vấn đề liên quan