Hoya Logo NTQ Logo

HOYA System Modernization
Assessment & Q&A

Comprehensive Analysis and Modernization Strategy

Hoya Logo NTQ Logo

Agenda

Phần 1: Đánh giá hiện tại (Current Assessment)

  • 1.1. Tổng quan hệ thống hiện tại
  • 1.2. Điểm mạnh
  • 1.3. Vấn đề hiện tại
  • 1.4. Định hướng kiến trúc hệ thống
  • 1.5. Lựa chọn công nghệ phát triển UI
  • 1.6. Cách xử lý Database Legacy
  • 1.7. CI/CD & Tự động cập nhật
  • 1.8. QCRTS linh hoạt
  • 1.9. Lộ trình triển khai modernization đề xuất

Phần 2: Trả lời Q&A (Questions EN, Answers VI)

  • 1) System Architecture & redesign by microservice
  • 2) Blazor Framework, C# — Blazor Hybrid (Web & Desktop)
  • 3) Legacy Database Compatibility
  • 4) Shared DLL Management via Azure DevOps Artifacts
  • 5) Security — Users / User management / SSO
  • 6) How to design CI/CD pipeline
  • 7) Using AI to convert code, business processes
  • 8) QCRTS Redesign
  • 9) Design consultation to accommodate future system upgrades
Hoya Logo NTQ Logo

Phần 1

Đánh giá hiện tại
(Current Assessment)

Hoya Logo NTQ Logo

1.1. Tổng quan hệ thống

Hệ thống quản lý của HOYA

HRM, Accounting, Purchasing & Warehouse, Manufacturing (GDIS/MES), Sales, Guidance Workflow, Legal Docs

  • Dữ liệu tập trung: Oracle 19c (QCRTS tạm thời dùng SQL Server trung gian)
  • BI Layer: GDIS BI tổng hợp qua stored procedures/triggers để phục vụ báo cáo
  • Data platform hiện tại:
    • Đã bắt đầu chuyển sang Microsoft Fabric (OneLake/Lakehouse)
    • Qua On-premises Data Gateway
    • Hiển thị bằng Power BI
Hoya Logo NTQ Logo

1.2. Điểm mạnh

  • Phân tách rõ ràng: Các module nghiệp vụ (PD, QC, DFA, Shipping) phân tách tương đối rõ
  • Kho dữ liệu tập trung: Có kho dữ liệu tập trung và pipeline BI tương đối hoàn thiện
  • Hướng đi đúng: Đã có hướng đi đúng - kết nối on-premises Oracle → Fabric Cloud → Power BI
  • Giảm rủi ro: Ý định giữ nguyên schema cũ giúp giảm rủi ro khi chuyển đổi
Hoya Logo NTQ Logo

1.3. Vấn đề hiện tại

  • Kiến trúc Monolithic cũ: VB.NET + .NET Framework, chia nhiều module nhưng vẫn chung core code/DLL, khó CI/CD, khó mở rộng
  • Tích hợp thiết bị ngoại vi: RS232, TCP/IP, COM port bị hardcode → không thể tái sử dụng / cấu hình linh hoạt
  • Shared database: Nhiều module dùng chung → coupling mạnh, thiếu isolation
  • Triển khai thủ công: Build thủ công, copy file qua shared folder → mất thời gian, dễ lệch phiên bản
  • Quản lý người dùng, phân quyền: Hệ thống riêng, chưa thống nhất với Microsoft Entra ID (Azure AD)
  • Thiếu observability: Chưa có trace ID xuyên suốt, chưa dùng OpenTelemetry / Application Insights
  • UI/UX lỗi thời: Khó maintain, không responsive, không tận dụng công nghệ web mới
Hoya Logo NTQ Logo

1.4. Định hướng kiến trúc hệ thống

Chiến lược chuyển đổi: Strangler Fig pattern — bao bọc hệ thống cũ, chuyển từng phần sang microservice .NET 8+
  • Tầng dịch vụ: Tách các service theo domain/capability: Auth, PD, QC (bao gồm QCRTS), DFA, Shipping, Web Service, DeviceIngest
  • Tầng API Gateway: Azure API Management quản lý authentication, throttling, observability, versioning
  • Messaging layer: Azure Service Bus / Event Hub hỗ trợ ingest dữ liệu thiết bị, batch asynchronous
  • CI/CD: Azure DevOps (Repos, Pipelines, Artifacts, Environments)
  • Container-ready: Hướng tới triển khai trên AKS hoặc Azure App Service, dễ scale và rollback
  • Observability: Chuẩn hóa theo W3C TraceContext, OpenTelemetry, log và metrics lưu qua Application Insights
Hoya Logo NTQ Logo

1.5. Lựa chọn công nghệ phát triển UI & tương thích với thiết bị ngoại vi

Thách thức và trở ngại: Website truy cập thiết bị ngoại vi

Vấn đề lớn nhất: Trình duyệt web (Chrome, Edge, Firefox) bị sandbox - không cho phép truy cập trực tiếp:

  • COM Port / Serial Port (RS232, RS485)
  • TCP/IP sockets trực tiếp (chỉ WebSocket qua HTTP/HTTPS)
  • File system local (chỉ đọc file user chọn)
  • Native printing (chỉ in qua dialog)

Giải pháp: Không chỉ dùng Blazor - mà là Chiến lược kết hợp

  • Blazor Hybrid (MAUI) - Native App: Cần truy cập thiết bị → dùng native app có Razor UI, full quyền truy cập hệ thống
  • Blazor Server - Web App: Không cần thiết bị, cần realtime → web thuần nhưng logic chạy server-side
  • Local Agent + Web: Muốn web thuần nhưng vẫn đọc thiết bị → cài agent local đọc device, push data lên web qua SignalR/REST
  • Next.js/React - Modern Web: Website public, không thiết bị, cần SEO/performance cao

Kết luận: Blazor phù hợp nhưng phải kết hợp đúng cách

Blazor là lựa chọn tốt để tận dụng C# codebase cũ, nhưng phải phân tích từng use case để chọn Hybrid/Server/WebAssembly hay/hoặc kết hợp với Next.js cho website external.

Hoya Logo NTQ Logo

Phân loại & công nghệ phù hợp

Nhóm chức năng Mô tả Công nghệ đề xuất Giải thích
Màn hình có thiết bị ngoại vi COM/RS232/TCP, đọc file local, in ấn Blazor Hybrid (MAUI) Hỗ trợ native access (SerialPort, TCP/IP, FileSystem), vẫn dùng Razor component, hỗ trợ auto-update bằng MSIX
Màn hình hành chính, quản lý, dashboard nội bộ Không dùng thiết bị, cần realtime hoặc quản trị Blazor Server Web realtime (SignalR), dễ triển khai, bảo mật theo phiên server, code reuse cao
Trang public / portal / customer-facing website Web hiện đại, chỉ xem dữ liệu / biểu đồ Next.js / React 19 / Tailwind / Azure Static Web Apps SEO tốt, dễ mở rộng, dễ thuê dev web, thích hợp cho future-proof modernization
Trường hợp đặc biệt muốn web thuần vẫn truy cập thiết bị Giữ giao diện web, thiết bị đọc qua agent nội bộ Blazor Server + Local Agent (SignalR/REST) Agent đọc dữ liệu từ COM/file và push lên web, không cần native app, nhưng phải cài agent
Hoya Logo NTQ Logo

1.6. Cách xử lý Database Legacy

  • Giữ nguyên schema: Giai đoạn đầu giữ nguyên toàn bộ schema, SP, View
  • Encapsulation: Dịch vụ microservice gọi DB qua Repository/Facade riêng → tránh coupling UI–DB
  • Technology Stack:
    • EF Core hoặc Dapper đều phù hợp (EF cho mapping, Dapper cho SP hiệu suất cao)
    • Thực tế thường kết hợp cả hai
  • Versioning:
    • Dùng DbUp / EF Migration để quản lý version script
    • DTO versioning theo namespace (Hoya.Contracts.QC.v1/v2)
    • SP hậu tố _v2, tránh breaking changes
Hoya Logo NTQ Logo

1.7. CI/CD & Tự động cập nhật

Pipeline Strategy: Azure Pipelines + Self-hosted Agent để deploy tới internal server
  • Build Process: Mỗi service build → push NuGet / container → deploy AKS / VM / IIS
  • Client (Blazor Hybrid): MSIX + App Installer hỗ trợ auto-update
  • Rollback:
    • Tích hợp rollback bằng slot swap (App Service)
    • Hoặc artifact version rollback
  • Environment Management: Quản lý chính sách phát hành qua Azure DevOps Environments, tự động notify team
Hoya Logo NTQ Logo

1.8. QCRTS linh hoạt

DeviceIngest.Agent

  • Chạy tại nhà máy, chứa adapter cho COM, TCP, file
  • Kiến trúc plugin để mở rộng

Mapping Engine (JSON DSL)

  • Mô tả cấu trúc Checksheet, source schema, rule transform
  • Version control cho mapping configurations

Pipeline

Staging → Standardize (đơn vị/precision) → Persist (Oracle/SQL Server) → Publish (Service Bus → Fabric)

  • Thêm thiết bị/mapping mới chỉ cần cấu hình JSON, không cần chỉnh code
  • Real-time data streaming tới Microsoft Fabric
Hoya Logo NTQ Logo

1.9. Lộ trình triển khai - Các giai đoạn Modernization

Giai đoạn 0: Assessment & Planning (RẤT QUAN TRỌNG)

Mục tiêu: Hiểu rõ hệ thống hiện tại, xác định chiến lược modernization hiệu quả

  • Deep Dive Analysis: Phân tích chi tiết codebase, dependencies, data flow, integration points
  • Risk Assessment: Đánh giá rủi ro kỹ thuật, nghiệp vụ, timeline
  • Architecture Design: Thiết kế kiến trúc mục tiêu, phân tách domain boundaries
  • Migration Strategy: Lập kế hoạch Strangler Fig - xác định service nào migrate trước, phụ thuộc ra sao
  • Success Metrics: Định nghĩa KPIs, acceptance criteria cho từng giai đoạn

Giai đoạn 1: Foundation & Proof of Concept

  • Infrastructure Setup: Azure resources, DevOps, CI/CD pipelines, environments
  • Authentication POC: Microsoft Entra ID integration, SSO, role mapping
  • Observability Foundation: Application Insights, logging, tracing, monitoring dashboards
  • API Gateway: Azure APIM setup với policies, throttling, versioning
  • Data Ingest POC: Pilot với 1 service (VD: QC) để validate approach

Giai đoạn 2: Core Services MVP

  • First Microservice: Triển khai service đầu tiên (QC/QCRTS) end-to-end
  • Hybrid UI Development: Blazor Hybrid app với device integration
  • Mapping Engine: Flexible config cho Checksheet, device adapters
  • Legacy Integration: Repository pattern, SP facade, data sync
  • Testing & Validation: So sánh kết quả với hệ thống cũ, user acceptance testing

Giai đoạn 3: Domain Expansion

  • Additional Services: Mở rộng sang PD, DFA, Shipping theo thứ tự ưu tiên
  • Schema Ownership: Refactor database, tách schema theo bounded context
  • Event-Driven Integration: Service Bus/Event Hub cho inter-service communication
  • Microsoft Fabric Pipeline: Hoàn thiện data pipeline tới OneLake/Lakehouse
  • Performance Optimization: Caching, query optimization, load testing

Giai đoạn 4: Optimization & Continuous Improvement

  • Automated Testing: Unit tests, integration tests, E2E tests trong CI/CD
  • Advanced Monitoring: Alerting, anomaly detection, performance baselines
  • AI-Assisted Refactoring: Sử dụng NxTransform/NxKMS để convert VB.NET → C#
  • Legacy Decommission: Tắt dần các module cũ khi đã migrate xong
  • Knowledge Transfer: Training, documentation, handover tới team nội bộ
Hoya Logo NTQ Logo

Phần 2

Trả lời Q&A
(Questions EN, Answers VI)

Hoya Logo NTQ Logo

Q&A: 1) System Architecture & redesign by microservice

Q1. Is the proposed microservice separation based on business domains appropriate?

Trả lời: Hoàn toàn hợp lý. Nên nhóm theo business capability (PD, QC/QCRTS, DFA, Shipping, Auth), triển khai dần theo Strangler Fig. Bắt đầu từ 2–3 service chính để dễ maintain.

Q2. Is it acceptable to use shared libraries (e.g., Business Share, DTO Models) across microservices, or should each service be fully isolated?

Trả lời: Có thể dùng shared NuGet packages trong giai đoạn chuyển đổi (Azure Artifacts). Về lâu dài, chỉ giữ common utilities / contracts, tránh chia sẻ logic domain.

Q3. What are the best practices for managing shared DTOs and business logic in a microservice architecture?

Trả lời: Dùng Semantic Versioning (SemVer), tách package theo domain, có consumer-driven contract tests (Pact), thay đổi chỉ mang tính additive, không breaking.

Hoya Logo NTQ Logo

Q&A: 2) Blazor Framework, C# — Blazor Hybrid (Web & Desktop)

Q. Could you consultant for us to select method is suitable with our system?

Trả lời - Xem chi tiết phần 1.5. Lựa chọn công nghệ phát triển UI (slide 7-8):

  • Blazor Hybrid (MAUI) cho màn hình nhập QC/QCRTS có thiết bị ngoại vi
  • Blazor Server cho các form quản trị / dashboard nội bộ
  • Next.js / React cho web public (portal hoặc website không cần thiết bị)
  • Local Agent option nếu muốn web thuần truy cập thiết bị (SignalR/REST)

Tư vấn chiến lược

  • ✅ Blazor phù hợp để tái sử dụng logic cũ: Tận dụng được C# codebase hiện tại, DTO, validation, dễ migration từ VB.NET, an toàn và đảm bảo tính nhất quán
  • ⚠️ Không nên lệ thuộc hoàn toàn vào Blazor: Blazor có thể gây nặng nề, đặc biệt Blazor Server với SignalR overhead. Nên kết hợp nhiều công nghệ tùy use case
  • 💡 Chiến lược lai ghép: Dùng Blazor cho internal apps (factory, QC), Next.js cho public-facing, và có thể mix Blazor WebAssembly cho các màn hình cần offline

📝 Note về MAUI (Multi-platform App UI)

MAUI là framework của Microsoft để xây dựng native cross-platform apps (Windows, macOS, iOS, Android) bằng C# và .NET. Blazor Hybrid chạy trên MAUI, cho phép dùng Razor components trong native app container với full native API access.

Reference: Microsoft .NET MAUI Documentation

Hoya Logo NTQ Logo

Q&A: 3) Legacy Database Compatibility

Q. Is it feasible to maintain legacy database access patterns (e.g., stored procedure calls) within a microservice architecture?

Trả lời: Có thể. Dùng Repository pattern để encapsulate SP/View, đảm bảo UI không truy cập DB trực tiếp.

Q. What is the recommended approach to encapsulate legacy database logic in microservices while ensuring scalability and maintainability?

Trả lời: Dùng Repository + Stored-proc Facade cho mỗi service. Service giao tiếp với nhau qua API / event bus, không share DB connection.

Q. Can Entity Framework or Dapper be used effectively with legacy stored procedures and views in Blazor-based services?

Trả lời: Có. EF Core hỗ trợ SP (FromSqlRaw), Dapper cho hiệu suất cao. Thực tế thường kết hợp cả hai.

Q. How should we manage versioning and backward compatibility of DTOs when legacy tables evolve?

Trả lời: Dùng namespace versioning (Hoya.Contracts.QC.v1/v2) + hậu tố _v2 cho SP. Thay đổi theo hướng additive, quản lý migration script qua CI.

Hoya Logo NTQ Logo

Q&A: 4) Shared DLL Management via Azure DevOps Artifacts

Q1. Is this approach suitable for managing shared DLLs in a microservice architecture?

Trả lời: Phù hợp và nên triển khai; giúp version control tập trung, rollback dễ.

Q2. Are there any limitations when using Azure Artifacts with Blazor or .NET 8?

Trả lời: Không đáng kể. Artifacts hoạt động tốt với .NET 8, cả Blazor Server lẫn Hybrid.

Q3. What is the best way to handle versioning and backward compatibility of shared packages?

Trả lời: Dùng SemVer, pin major version ở consumer, feed views (@local/@prerelease/@release) + retention policy.

Q4. Should we use Universal Packages instead of NuGet for non-.NET DLLs?

Trả lời: Có, khi cần publish non-.NET artifacts (tool, native libs, model data). Code .NET nên dùng NuGet.

Hoya Logo NTQ Logo

Q&A: 5) Security — Users / User management / Single Sign-on (SSO)

Trả lời:

  • Dùng Microsoft Entra ID (Azure AD) theo chuẩn OpenID Connect / OAuth2
  • Login bằng Hoya email
  • API đặt sau Azure API Management
  • Bật MFA, Conditional Access
  • Sử dụng claims để map quyền màn hình
Hoya Logo NTQ Logo

Q&A: 6) How to design CI/CD pipeline

Q1. Can Azure Pipelines be configured to deploy directly to our internal server (Windows-based)?

Trả lời: Có. Cài Self-hosted Agent trong mạng nội bộ; quản lý môi trường qua Environments.

Q2. What is the best method to notify or trigger client machines to update automatically?

Trả lời: Dùng MSIX + App Installer (Blazor Hybrid) hoặc Squirrel/ClickOnce. Nếu dùng Agent → Agent tự kiểm tra version và auto-update.

Q3. Should we use Deployment Groups or Self-hosted Agents for better control?

Trả lời: Dùng Self-hosted Agents + Environments/VM Resources (thay cho Deployment Groups).

Q4. How can we integrate rollback or version control for deployed binaries?

Trả lời: Dùng artifact versioning, blue-green / slot swap, hoặc rollback MSIX qua feed version.

Hoya Logo NTQ Logo

Q&A: 7) Using AI to convert code, business processes

Q: HOYA hasn't yet change source to MVC/ASP.Net => How to convert source code to Blazor faster?

Trả lời:

Dùng .NET Upgrade Assistant + AI tools (GitHub Copilot / Azure AI) để convert VB.NET → C#, refactor dần theo Strangler. Có thể sinh unit test tự động để kiểm thử song song.

Công cụ NTQ - Tối ưu hóa quá trình chuyển đổi

Sử dụng hệ sinh thái sản phẩm như NxTransform và NxKMS của NTQ có thể giúp việc convert được hiệu quả, chính xác hơn rất nhiều so với các công cụ thông thường (có thể demo và chia sẻ riêng):

  • NxTransform: Platform tái sử dụng context và có tính học hỏi (learning) từ các lần convert trước đó, giúp tăng độ chính xác và hiệu quả
  • NxKMS (Knowledge Management System): Hệ thống quản lý tri thức với RAG (Retrieval-Augmented Generation) hỗ trợ convert chính xác business logic và domain knowledge
  • Context Reuse: Tận dụng các pattern, best practices đã học từ dự án trước để áp dụng cho code mới
  • Incremental Learning: Hệ thống học hỏi và cải thiện độ chính xác theo thời gian thông qua feedback loops
Hoya Logo NTQ Logo

Q&A: 8) QCRTS Redesign

Q. Hardcode method read data (COM PORT) – how to flexible?

Trả lời: Dùng DeviceIngest.Agent với adapter cấu hình được (SerialAdapter, TcpAdapter, FileAdapter).

Q. Hardcode method read data (Log file) – how to flexible?

Trả lời: Dùng FileWatcherAdapter đọc TXT/CSV/Excel; mapping qua config JSON.

Q. Mapping check sheet with log file – how to flexible?

Trả lời: Mapping Engine (JSON DSL) định nghĩa Checksheet + rule; versioning mapping theo thời gian hiệu lực; pipeline:

Staging → Standardize → Persist

Hoya Logo NTQ Logo

Q&A: 9) Design consultation to accommodate future system upgrades

Q a) AI Agent Integration

Trả lời: Xây Agent Abstraction Layer (IAgentProvider) + Agent Service độc lập; quản lý API key qua APIM; lưu log & metrics để audit.

Q b) Design Principles for Upgradeability

Trả lời: Duy trì API-first, event-driven, có feature flag, configuration-as-code, observability built-in, dễ cắm thêm module (AI agent, analytics, IoT).

  • API-first: Mọi thứ được expose thông qua well-defined APIs
  • Event-driven: Loose coupling thông qua messaging
  • Configuration-as-code: Infrastructure và settings được version
  • Feature flags: Bật/tắt features mà không cần deployment
  • Observability embedded: Built-in monitoring và tracing
Hoya Logo NTQ Logo

Tổng kết & Bước tiếp theo

Điểm chính (Key Takeaways)

  • Kiến trúc hiện đại: Microservices với Azure cloud infrastructure
  • Chiến lược UI linh hoạt: Blazor Hybrid cho device integration, nhiều lựa chọn cho web
  • Migration từng bước: Strangler Fig pattern giảm thiểu rủi ro
  • DevOps nâng cao: CI/CD với auto-update và khả năng rollback
  • Sẵn sàng tương lai: AI integration và thiết kế mở rộng được

Bước tiếp theo (Next Steps)

Mong các anh/chị dành thời gian review và phản hồi bất cứ thông tin nào mà HOYA cần NTQ làm rõ hơn.

NTQ rất sẵn lòng được giải đáp và hỗ trợ HOYA trong suốt quá trình đánh giá, lập kế hoạch và triển khai hệ thống.

Hoya Logo NTQ Logo

Thank You

Questions & Discussion

HOYA Corporation | NTQ Solution

System Modernization Assessment 2025

1 / 25