2012-07-16 24 views
8

Khi đăng nhập vào Google, trang chủ Google liên kết với nhiều dịch vụ khác (ví dụ: Gmail, Play, Drive).kiến ​​trúc soa của google - Tổng hợp nội dung cho giao diện người dùng web của google

Q1) Có mô hình SOA mô tả cách họ ghép nối các UI cho mỗi dịch vụ, nhưng đồng thời cũng cung cấp thanh menu chuẩn, giao diện chuẩn và dấu đơn trên các ứng dụng của chúng?

Q2) Có tài liệu nào có sẵn mô tả kiến ​​trúc của họ để liên kết nội dung giao diện người dùng không?

Sửa

Tôi đã lấy một cái nhìn với Firebug và nó có vẻ như có một mối quan hệ hai chiều giữa thanh menu và các ứng dụng. Thanh thực đơn có một liên kết đến mỗi ứng dụng, nhưng mỗi ứng dụng cũng có thanh menu bao gồm.

Tôi có thể liên kết giao diện này với giao diện người dùng eclipse, trong đó ứng dụng có thể đóng góp vào menu ứng dụng, nhưng mỗi menu sống trong ngữ cảnh của ứng dụng nhật thực tổng hợp tất cả các plugin UI riêng biệt.

Vậy Google làm như thế nào trong giao diện người dùng của họ? Dường như có một số thuật sĩ javascript đang diễn ra, với thanh trình đơn được tiêm vào từng ứng dụng.

+0

Không khá rõ ràng về những gì bạn đang yêu cầu ở đây, bạn có thể vui lòng làm rõ hoặc thu hẹp nó xuống? Câu hỏi của bạn dường như tập trung vào giao diện người dùng, nhưng đây thực sự là điều bạn muốn? Chỉ cần chạy Firebug và truy tìm những tập tin được tải xuống và thực hiện cho thấy rất nhiều về nơi mà các tài nguyên giao diện người dùng được nạp từ đó. Ngoài ra còn có một số giấy tờ được xuất bản (cả Google và những người khác) về giải pháp duy nhất của họ về giải pháp. –

+0

Tôi đồng ý với David, các câu hỏi là những ứng cử viên tốt để viết một cuốn sách chứ không phải để trả lời một câu trả lời. –

+0

Tôi đã chỉnh sửa câu hỏi, hy vọng nó bây giờ chính xác hơn một chút? –

Trả lời

1

Tôi không thể nói về Google, nhưng tôi đã làm việc trên các trang web thực hiện những việc tương tự. Trong một ví dụ, đó là trang web cho đại lý bất động sản lớn có văn phòng trên toàn thế giới, trang chủ (và các trang khác) bao gồm băng chuyền hiển thị nội dung cụ thể cho quốc gia, tất cả các văn phòng sử dụng các trường hợp khác nhau của cùng một CMS để quản lý nội dung của riêng họ.

Điều gì xảy ra là CMS (dựa trên .NET) đã sử dụng các tệp điều khiển tùy chỉnh và người dùng (.ascx) để hiển thị trang aspx cuối cùng. Các tệp ascx này (cho header, footer và carousel), tất cả các kiểu và javascript liên quan đến các tệp đó (đặt trong một thư mục không thể thao tác được gọi là _CSS và _JS theo quy ước của chúng ta) được duy trì tập trung và sau đó được sao chép tới tất cả các trang web cục bộ .

Ví dụ CMS - cụ thể cho một văn phòng quốc gia - sau đó sẽ tạo trang riêng nhưng tất cả đều sử dụng các đầu trang và chân trang chung do ứng dụng trung tâm cung cấp.

Phần cuối cùng của bức ảnh là để đồng bộ hóa tất cả điều này, bạn cần một loại tác nhân hoặc dịch vụ để truyền các thành phần phổ biến này cho tất cả các máy chủ và phiên bản CMS để đảm bảo tất cả chúng đều giống nhau điều khiển, kiểu và javascript (kiểu và javascript có thể được tham chiếu tập trung nhưng người dùng tùy chỉnh cần phải sống trong miền ứng dụng của CMS cụ thể ít nhất cho .NET). Chúng tôi đã sử dụng Repliweb cho các nhiệm vụ như vậy nhưng tôi không quen thuộc với các chi tiết của nó.

Từ quan điểm kiến ​​trúc, tôi thấy nó như một loại kiến ​​trúc plugin cho giao diện người dùng, vì vậy bạn có quyền liên kết nó với kiến ​​trúc Eclipse. CMS trung tâm là một kiểu trừu tượng cung cấp một Giao diện mà các cá thể trang web cụ thể phải tuân thủ và triển khai nó.

abstract class GoogleSite 
{ 
    Control Header { get; set; } 
    Control Footer { get; set; } 

    public string Title { get { return "Default title"; } } 

    public abstract void ProvideContents(); 
} 

class Gmail: GoogleSite 
{ 
    //still using same header and footer but Title is different 
    override public string Title { get { return "Gmail"; } } 

    public override void ProvideContents() 
    { 

    } 
} 


class GPlus: CentralCMS 
{ 
    //Another CMS not overriding the title but Providing different contents 
    public override void ProvideContents() 
    { 

    } 
} 
+0

Điều này thật tuyệt. Bạn có một ý tưởng về những gì các mô hình được gọi là, hoặc có thể được gọi là? Có thể là "Mẫu đóng góp giao diện người dùng"? Khi mẫu này có tên, sẽ dễ dàng hơn để hiển thị các phương pháp tiếp cận từ các khu vực khác, ví dụ: [virgo snaps] (http://www.eclipse.org/virgo/documentation/virgo-documentation-3.5.0.RELEASE/ docs/snaps-guide/htmlsingle/virgo-snaps-guide.html) hoặc [lớp phủ chiến tranh maven] (http://maven.apache.org/plugins/maven-war-plugin/overlays.html) –

+1

Tôi xem xét nó một mẫu Plugin. Từ MSDN: Mô hình trình cắm thêm là một mẫu mở rộng hành vi của một lớp bằng cách cho phép các phần mở rộng để cắm vào một lớp trừu tượng, đến lượt nó, cắm vào một lớp lõi. Điều này tạo ra một lớp con mới chỉ bao gồm các khả năng cần thiết trong ngữ cảnh cụ thể. – kabaros

+0

Nó sẽ có thể đạt được kết quả cuối cùng cùng với các ngôn ngữ không dựa trên lớp, vì vậy tôi sẽ không muốn loại bỏ những cách tiếp cận đó khỏi cuộc thảo luận. Làm thế nào về "UI Plug-in pattern"? –

3

Google sử dụng riêng Closure Library cho phần giao diện người dùng:

Library Đóng cửa là bao nhiêu?

Thư viện đóng cửa là thư viện JavaScript rộng, được thử nghiệm, mô-đun và thư viện JavaScript đa trình duyệt. Bạn có thể lấy những gì bạn cần từ một tập hợp lớn các tiện ích và điều khiển giao diện người dùng có thể sử dụng lại và từ các tiện ích cấp thấp hơn cho thao tác DOM, giao tiếp máy chủ, hoạt ảnh, dữ liệu cấu trúc, kiểm tra đơn vị, chỉnh sửa văn bản đa dạng và hơn thế nữa.

[...]

Ai sử dụng Thư viện đóng cửa?

Search, Gmail, Maps, Documents, Sites, Sách, Reader, Blogger, Lịch, Google+, Ảnh

https://developers.google.com/closure/library/?hl=en

3

Dự án hawt.io có một cách tiếp cận thú vị:

hawtio có tính mô-đun cao, để nó có thể khám phá chính xác dịch vụ nào nằm trong JVM và tự động cập nhật bảng điều khiển để cung cấp giao diện cho chúng.

Liên kết là here

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