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:
Project Layer — nơi tập hợp tất cả các thành phần để tạo thành website cụ thể.
Feature Layer — chứa các chức năng cụ thể mà người dùng có thể tương tác.
Foundation Layer — chứa các thành phần nền tảng, dùng chung cho toàn bộ dự án.
Trong đó, Feature và Foundation 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.
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.
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.
| 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.
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.
Nó 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.
Là 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.
| 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.
| 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 |
📌 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).
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.
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.
| Đ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”