KeiStory

728x90
반응형

C# Liquid Template 사용한 동적 쿼리 만들기 - Fluid

 

Liquid Template이란? (펌)

Liquid Template 은 텍스트 기반 템플릿 언어로, 동적인 콘텐츠를 생성하고 가공하는 데 사용됩니다.

이 언어는 주로 웹 애플리케이션에서 템플릿을 구성하고 사용하는 데 활용되며,

Shopify와 같은 전자 상거래 플랫폼에서 주로 사용됩니다.

Liquid는 사용하기 쉬운 문법을 제공합니다.

 

. NET에서 사용하기 위해서는 여러 가지 패키지들이 나와있는데

여기서는 Fluid 로 사용하는 방법을 설명합니다.

 

Fluid는 Liquid 템플릿 언어를 기반으로 하는 오픈 소스 .NET 템플릿 엔진입니다.

https://github.com/sebastienros/fluid

 

GitHub - sebastienros/fluid: Fluid is an open-source .NET template engine based on the Liquid template language.

Fluid is an open-source .NET template engine based on the Liquid template language. - GitHub - sebastienros/fluid: Fluid is an open-source .NET template engine based on the Liquid template language.

github.com

 

 

1. 'Fluid.Core' Nuget 패키지 설치

 

2. 사용법

Template 에 사용될 모델을 정의하고 Model 의 속성값에 따라 쿼리문을 동적으로 구성할 수 있습니다.

using Fluid;

namespace LiquidTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var parser = new FluidParser();

            var model = new { Firstname = "Bill", Lastname = "Gates", Age = 30, Address = "USA" };

            var source = @"
SELECT * 
FROM Customer
WHERE 1=1
AND Name = '{{Firstname}} {{Lastname}}'
{% if Age > 18 %}
AND AgeType ='adult'
{% elsif Age > 12 %}
AND AgeType ='teenager'
{% else %}
AND AgeType ='child'
{% endif %}
{% if Address != ''%}
AND Address = '{{Address}}'
{% endif %}
";

            if (parser.TryParse(source, out var template, out var error))
            {
                var context = new TemplateContext(model);

                string result = template.Render(context);

                Console.WriteLine(result);
            }
            else
            {
                Console.WriteLine($"Error: {error}");
            }

            Console.Read();
        }
    }
}

위 코드를 보면 알 수 있듯이 Model 에 정의된 Firstname, Lastname 값을 합쳐 쿼리문 조건값으로 사용할 수 있으며

Age 에 따라서 AND 조건에 들어갈 값을 동적으로 구성할 수 있습니다.

또한 값의 유무에 따라서 추가 쿼리를 넣을지 말지도 if 문을 통해 처리할 수 있습니다.

 

결과

 

그런데 결과를 보면 알 수 있듯이 if 문 사용한 부분이 빈 줄로 처리가 되어 보기 좋지 않습니다.

아래처럼 빈줄제거 코드를 추가해서 빈 줄을 제거합니다.

using System.Text.RegularExpressions;

using Fluid;

namespace LiquidTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var parser = new FluidParser();

            var model = new { Firstname = "Bill", Lastname = "Gates", Age = 30, Address = "USA" };

            var source = @"
SELECT * 
FROM Customer
WHERE 1=1
AND Name = '{{Firstname}} {{Lastname}}'
{% if Age > 18 %}
AND AgeType ='adult'
{% elsif Age > 12 %}
AND AgeType ='teenager'
{% else %}
AND AgeType ='child'
{% endif %}
{% if Address != ''%}
AND Address = '{{Address}}'
{% endif %}
";

            if (parser.TryParse(source, out var template, out var error))
            {
                var context = new TemplateContext(model);

                string result = template.Render(context);

                // 빈줄 제거
                result = Regex.Replace(result, @"^\s*$\n", string.Empty, RegexOptions.Multiline);

                Console.WriteLine(result);
            }
            else
            {
                Console.WriteLine($"Error: {error}");
            }

            Console.Read();
        }
    }
}

 

결과

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band