본문으로 건너뛰기

검증 — 시트로 나타낼 수 없는 규칙을 C#으로

문서 목록으로 · 설계 근거는 검증 파이프라인에 있습니다

시트에 적을 수 있는 제약은 빌드할 때 이미 검사합니다.

필수 여부, 숫자 범위, 허용값 목록, 참조가 실재하는지, 인덱스가 유니크한지입니다.

이 문서는 그것으로 표현할 수 없는 규칙을 적는 방법을 설명합니다. 세 가지가 있습니다.

  • 여러 컬럼과 여러 테이블에 걸치는 규칙. 「type이 36인 아이템의 buffId가 가리키는 WorldBuff는 대상이 선단이나 함대여야 한다」
  • 모든 테이블에 일률적으로 적용되는 규약.*ItemId로 끝나는 컬럼은 전부 Item을 가리켜야 한다」
  • 시트 밖까지 봐야 하는 확인. 「판매 중으로 표시된 상품이 운영 DB에 실재하는지」

1. 개요

무엇어디에 적나누가 검사하나
타입 · 필수 · 범위 · 허용값 · 참조 · 인덱스 유니크시트변환기가 내장으로. 컬럼 제약
그 밖의 모든 규칙.cs 규칙 파일이 문서가 설명하는 검증 파이프라인

규칙 파일은 프로젝트의 폴더에 있고, 도구가 실행할 때 컴파일해서 돌립니다.

이 저장소는 그 규칙이 무엇인지 알지 못합니다. recipe가 폴더를 가리키고, 그 안에 무엇이 있든 코어는 알지 못합니다.

보고에 셀 위치가 나옵니다. 산출물을 나중에 훑는 방식과 이것이 갈리는 지점입니다.

[rules/tables/ItemRules.cs] 의뢰서 아이템의 maxStack은 1이어야 합니다.
at 테이블.xlsb : Item : AF12

구글 시트라면 그 셀로 가는 링크가 나옵니다.

2. 파이프라인에서의 위치

recipe 로드

├─ ① rules/pre/ 시트를 읽기 전 — 파일 이름 · 설정 · 환경

임포트 → 쿠킹 → Model

├─ ② 정적 검증 타입 · 인덱스 · 컬럼 제약 · 참조 (코어 내장)

├─ ③ rules/tables/ 테이블별
│ rules/global/ 테이블 사이 · 규약
│ rules/runtime/ 데이터베이스 · 캐시 교차 확인

타깃 실행 → 커밋

rules/shared/ 단계가 아닙니다. 위의 모든 규칙과 함께 컴파일되고, 그 자체로는 실행되지 않습니다

폴더는 다섯이고 단계는 넷입니다.

rules/shared/에 둔 것은 어느 시점에도 스스로 돌지 않습니다. pre, tables, global, runtime의 규칙이 그것을 쓸 수 있을 뿐입니다.

그래서 하위 폴더를 가져도 되는 유일한 폴더이기도 합니다(§4).

③이 타깃 실행보다 앞입니다.

파일 타깃은 스테이징에 모았다가 마지막에 옮기지만 데이터베이스 타깃은 실행 중에 섀도를 교체합니다. 타깃 뒤에서 검증하면 실패 시점에 이미 데이터가 바뀌어 있습니다.

모든 산출물은 Model의 결정적 사영이므로 Model을 검증하는 것이 곧 산출물을 검증하는 것입니다. 그래서 실패한 실행은 파일에도 데이터베이스에도 흔적을 남기지 않습니다.

이 문서의 나머지

무엇어디
시작하기와 폴더 규약첫 규칙을 만들기까지, 폴더가 뜻하는 것, 규칙 파일의 뼈대
규칙 쓰기데이터를 읽는 두 루트 · 심각도 · recipe 설정 · 시트 밖의 파일 · 공용 코드
돌리기와 사례실행 방법, 실제 사례, 자주 만나는 메시지, 그리고 지금의 한계
편집기와 이식자동 완성 설정, 다른 도구에서 옮겨올 때, 규칙 자체의 테스트