Back To Home

Name: Ngày 9: Phân biệt Feature và Foundation trong Helix

Phân biệt Feature và Foundation trong Helix Architecture (Sitecore)


🧭 1. Tóm tắt về Helix Architecture

Helix là kiến trúc hướng module (modular architecture) được Sitecore đề xuất để tổ chức và quản lý các dự án theo cách tách biệt, dễ bảo trì và dễ mở rộng.
Cấu trúc Helix gồm 3 tầng chính:

  1. Project Layer — nơi tập hợp tất cả các thành phần để tạo thành website cụ thể.

  2. Feature Layer — chứa các chức năng cụ thể mà người dùng có thể tương tác.

  3. Foundation Layer — chứa các thành phần nền tảng, dùng chung cho toàn bộ dự án.

Trong đó, FeatureFoundation là hai tầng quan trọng nhất, thường dễ bị nhầm lẫn. Bài viết này sẽ giúp bạn phân biệt rõ ràng.


🧩 2. Feature Layer là gì?

🔹 Định nghĩa

Feature layer là nơi chứa các tính năng nghiệp vụ (business features) của website — những gì người dùng cuối có thể nhìn thấy hoặc tương tác được.

🔹 Đặc điểm

  • Mỗi feature là một module độc lập (ví dụ: Navigation, Banner, Search).

  • Có thể được tái sử dụng giữa nhiều site khác nhau.

  • Chỉ phụ thuộc vào Foundation, không phụ thuộc lẫn nhau giữa các feature.

🔹 Ví dụ thư mục

 
/src/Feature/Navigation /src/Feature/News /src/Feature/Search /src/Feature/ContactForm

🔹 Ví dụ thực tế

Feature Chức năng Người dùng thấy không?
Navigation Thanh menu chính
Search Tìm kiếm nội dung
Hero Banner Ảnh đầu trang
Newsletter Đăng ký nhận tin

➡️ Tất cả đều là chức năng hiển thị hoặc tương tác trên trang web.


⚙️ 3. Foundation Layer là gì?

🔹 Định nghĩa

Foundation layer là lớp nền tảng, chứa các logic hoặc tiện ích chung phục vụ cho nhiều feature khác nhau.

không có giao diện người dùng, mà chỉ cung cấp dịch vụ, helper, hoặc cấu hình để các layer khác sử dụng.

🔹 Đặc điểm

  • tầng thấp nhất trong Helix.

  • Chứa code dùng chung: dữ liệu, cấu hình, DI container, logging, index…

  • Có thể được sử dụng bởi tất cả các feature và project.

  • Không phụ thuộc vào Feature hoặc Project layer.

🔹 Ví dụ thư mục

 
/src/Foundation/Serialization /src/Foundation/Indexing /src/Foundation/DependencyInjection /src/Foundation/Multisite /src/Foundation/Extensions

🔹 Ví dụ thực tế

Foundation Vai trò Người dùng thấy không?
Indexing Xử lý tìm kiếm, Lucene/Solr
Multisite Quản lý nhiều site trong cùng instance
DependencyInjection Đăng ký service vào container
Serialization Đồng bộ item giữa môi trường

➡️ Foundation giống như “hạ tầng kỹ thuật” mà các Feature có thể xây dựng dựa vào.


🧱 4. So sánh Feature vs Foundation

Tiêu chí Feature Foundation
Mục đích Cung cấp chức năng hiển thị, nghiệp vụ cụ thể Cung cấp hạ tầng, tiện ích, code dùng chung
Người dùng cuối thấy được không? ✅ Có ❌ Không
Phụ thuộc vào layer khác Có thể phụ thuộc Foundation Không phụ thuộc layer nào
Ví dụ module Navigation, Search, Carousel, News Indexing, Serialization, Multisite
Tái sử dụng Giữa các site có cùng chức năng Cho toàn bộ hệ thống
Phạm vi sử dụng Từng site cụ thể Toàn bộ solution
Code chứa Controllers, Views, Templates, Rendering Services, Interfaces, Helper, Pipelines

🔄 5. Mối quan hệ giữa hai layer

📌 Feature sử dụng Foundation
Ví dụ:

  • Feature.Search sử dụng Foundation.Indexing để truy vấn dữ liệu.

  • Feature.Navigation dùng Foundation.Multisite để xác định site hiện tại.

  • Feature.ContactForm dùng Foundation.DependencyInjection để inject service gửi email.

⚠️ Feature chỉ được phép phụ thuộc vào Foundation, không được gọi Feature khác (để tránh vòng phụ thuộc).


🧠 6. Ví dụ minh họa đơn giản

Giả sử bạn có website khách sạn cần tính năng “Đặt phòng trực tuyến”:

  • Feature.Booking
    → Xử lý form đặt phòng, hiển thị thông tin phòng, xác nhận booking.
    → Hiển thị ra website.
    → Phụ thuộc vào Foundation.

  • Foundation.DataAccess
    → Cung cấp các service truy cập dữ liệu phòng, khách hàng.
    → Không hiển thị gì ra giao diện.


🧩 7. Tóm tắt mô hình phụ thuộc

 
[Project] ↓ [Feature] ↓ [Foundation]

Cụ thể:

  • Feature dùng các service từ Foundation.

  • Project kết hợp nhiều Feature để tạo thành site hoàn chỉnh.

  • Foundation độc lập, không phụ thuộc ai.


🧰 8. Kết luận

Điểm chính Ghi nhớ
Feature = “Chức năng hiển thị cho người dùng” Navigation, Search, Banner...
Foundation = “Hệ thống nền tảng dùng chung” Indexing, Serialization, DI...
Giữ cho Feature độc lập, chỉ phụ thuộc vào Foundation Tránh rối code và vòng phụ thuộc
Áp dụng đúng giúp code dễ test, dễ mở rộng, dễ bảo trì

👉 Gợi ý bài viết tiếp theo:
🔸 “Sitecore Project Structure trong Visual Studio”

Donald Trump

Để trở thành người chiến thắng, bạn cần biết khi nào là đủ. Đôi khi trong cuộc sống, bạn phải từ bỏ cuộc chiến và chuyển sang mục tiêu mới mang lại hiệu quả hơn

Related Post