csharp-code-review
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseC# 코드 리뷰 스킬
C#代码评审技能
OOP 원칙, SOLID 원칙, GoF 디자인 패턴, 최신 C# 기능, 성능 관점에서 C# 코드를 체계적으로 리뷰합니다.
중요: 모든 리뷰 결과는 반드시 한국어로 작성합니다. 코드 식별자, 기술 용어, 패턴 이름 등은 원문 그대로 유지하되, 설명·문제점·개선안 등 서술 부분은 한국어를 사용합니다.
从OOP原则、SOLID原则、GoF设计模式、现代C#特性及性能角度,对C#代码进行系统化评审。
重要提示:所有评审结果必须使用韩语撰写。 代码标识符、技术术语、模式名称等保留原文,说明、问题点、改进方案等描述部分使用韩语。
인자
参数
- : 대상 파일 또는 디렉토리 경로 (선택, 미지정 시 최근 수정된 .cs 파일을 탐색)
$ARGUMENTS[0]
- : 目标文件或目录路径(可选,未指定时将搜索最近修改的.cs文件)
$ARGUMENTS[0]
실행 단계
执行步骤
1단계: 리뷰 대상 식별
步骤1:确定评审目标
사용자가 파일을 지정하지 않은 경우:
- 최근 수정된 파일 확인
.cs - 또는 사용자에게 리뷰할 파일/디렉토리 지정 요청
若用户未指定文件:
- 检查最近修改的文件
.cs - 或请求用户指定待评审的文件/目录
2단계: 코드 분석
步骤2:代码分析
대상 코드를 읽고 아래 관점에서 분석합니다.
读取目标代码,从以下角度进行分析。
리뷰 체크리스트
评审检查清单
OOP 4대 원칙
OOP四大原则
| 원칙 | 리뷰 항목 |
|---|---|
| 캡슐화 | private 필드, 프로퍼티 접근, 구현 세부사항 은닉 |
| 상속 | 적절한 상속 계층, 상속보다 합성 우선 |
| 다형성 | 인터페이스/추상 클래스 활용, virtual 메서드 적절성 |
| 추상화 | 적절한 추상화 수준, 불필요한 세부사항 노출 |
| 原则 | 评审项 |
|---|---|
| 封装 | 私有字段、属性访问、隐藏实现细节 |
| 继承 | 合理的继承层级、优先使用组合而非继承 |
| 多态 | 接口/抽象类的使用、虚方法的合理性 |
| 抽象 | 合理的抽象级别、避免暴露不必要的细节 |
SOLID 원칙
SOLID原则
| 원칙 | 리뷰 항목 | 위반 징후 |
|---|---|---|
| SRP | 클래스가 단일 책임을 갖는가? | 여러 이유로 클래스가 변경됨, 메서드 과다 |
| OCP | 확장에 열려있고 수정에 닫혀있는가? | 새 기능 추가 시 기존 코드 수정 필요, switch/if-else 체인 |
| LSP | 하위 타입이 상위 타입을 대체할 수 있는가? | 하위 클래스에서 예외 발생, 빈 메서드 오버라이드 |
| ISP | 클라이언트별로 인터페이스가 분리되어 있는가? | NotImplementedException, 미사용 메서드 |
| DIP | 추상화에 의존하는가? | new 직접 인스턴스화, 구체 클래스 타입 의존 |
| 原则 | 评审项 | 违规迹象 |
|---|---|---|
| SRP | 类是否具备单一职责? | 类因多种原因被修改、方法过多 |
| OCP | 是否对扩展开放、对修改关闭? | 添加新功能时需要修改现有代码、存在switch/if-else链 |
| LSP | 子类是否可以替换父类? | 子类抛出异常、空方法重写 |
| ISP | 是否按客户端拆分接口? | NotImplementedException、未使用的方法 |
| DIP | 是否依赖抽象? | 直接使用new实例化、依赖具体类类型 |
GoF 디자인 패턴 적용 기회
GoF设计模式应用机会
코드에서 다음 패턴을 적용할 수 있는 부분을 식별합니다:
생성 패턴
- 복잡한 객체 생성 → Builder
- 객체 생성 로직 분리 → Factory Method / Abstract Factory
- 전역 단일 인스턴스 → Singleton (주의: 남용 금지)
구조 패턴
- 호환되지 않는 인터페이스 연결 → Adapter
- 동적 기능 추가 → Decorator
- 복잡한 하위 시스템 단순화 → Facade
- 객체 트리 구조 → Composite
행동 패턴
- 교체 가능한 알고리즘 → Strategy
- 상태에 따른 행동 변경 → State
- 객체 간 통신 → Observer / Mediator
- 요청 처리 체인 → Chain of Responsibility
- 실행 취소/재실행 → Command + Memento
识别代码中可应用以下模式的部分:
创建型模式
- 复杂对象创建 → Builder
- 对象创建逻辑分离 → Factory Method / Abstract Factory
- 全局单例实例 → Singleton(注意:禁止滥用)
结构型模式
- 连接不兼容接口 → Adapter
- 动态添加功能 → Decorator
- 简化复杂子系统 → Facade
- 对象树结构 → Composite
行为型模式
- 可替换算法 → Strategy
- 根据状态改变行为 → State
- 对象间通信 → Observer / Mediator
- 请求处理链 → Chain of Responsibility
- 撤销/重做 → Command + Memento
최신 C# 기능 (C# 12/13)
现代C#特性(C# 12/13)
| 기능 | 권장 시점 |
|---|---|
| Primary constructors | 간단한 초기화를 가진 클래스 |
| Collection expressions | 배열/리스트 초기화 |
| required properties | 생성자 없이 필수 초기화 보장 |
| init-only setters | 불변 객체 |
| record types | 값 기반 동등성, DTO |
| Pattern matching | 복잡한 조건문, 타입 검사 |
| File-scoped namespaces | 들여쓰기 축소 |
| Raw string literals | 여러 줄 문자열, JSON, SQL |
| 特性 | 推荐场景 |
|---|---|
| Primary constructors | 具有简单初始化逻辑的类 |
| Collection expressions | 数组/列表初始化 |
| required properties | 无需构造函数即可保证必填初始化 |
| init-only setters | 不可变对象 |
| record types | 基于值的相等性、DTO |
| Pattern matching | 复杂条件语句、类型检查 |
| File-scoped namespaces | 减少缩进 |
| Raw string literals | 多行字符串、JSON、SQL |
성능 리뷰
性能评审
| 카테고리 | 리뷰 항목 |
|---|---|
| 메모리 할당 | 핫 경로에서 불필요한 할당, Large Object Heap (>= 85KB) |
| Async/Await | 차단 호출 (.Result, .Wait()), ConfigureAwait 누락 |
| 컬렉션 | 잘못된 컬렉션 타입, LINQ 다중 열거 |
| 문자열 | 루프 내 문자열 결합, StringBuilder 미사용 |
| 박싱 | 불필요한 값 타입 박싱 |
| Span/Memory | Span<T>, Memory<T> 없는 버퍼 연산 |
| 类别 | 评审项 |
|---|---|
| 内存分配 | 热点路径中的不必要分配、大对象堆(>=85KB) |
| Async/Await | 阻塞调用(.Result、.Wait())、缺少ConfigureAwait |
| 集合 | 错误的集合类型、LINQ多次枚举 |
| 字符串 | 循环内字符串拼接、未使用StringBuilder |
| 装箱 | 不必要的值类型装箱 |
| Span/Memory | 未使用Span<T>、Memory<T>的缓冲区操作 |
비동기 코드 리뷰
异步代码评审
- 또는
.Result호출 없음 (데드락 위험).Wait() - 라이브러리 코드에서 사용
ConfigureAwait(false) - 적절한 CancellationToken 전파
- 캐시된 결과가 있는 핫 경로에 사용
ValueTask - 스트리밍 데이터에 사용
IAsyncEnumerable - 이벤트 핸들러 외 async void 없음
- 无或
.Result调用(存在死锁风险).Wait() - 库代码中使用
ConfigureAwait(false) - 合理传递CancellationToken
- 在有缓存结果的热点路径中使用
ValueTask - 对流式数据使用
IAsyncEnumerable - 除事件处理程序外无async void
코드 품질 리뷰
代码质量评审
- 명명 규칙 (PascalCase, camelCase, _privateField, Async 접미사)
- null 안전성 (nullable reference types, ,
?.,??)??= - 예외 처리 (구체적 예외, 필터, 적절한 로깅)
when - IDisposable 패턴 준수 (using 문, Dispose 구현)
- 컬렉션 사용 (적절한 타입 선택, 효율적인 LINQ)
- 매직 넘버/문자열은 상수로 선언
- 중복 코드 제거
- 상속 불필요 클래스에 적절히 사용
sealed
- 命名规范(PascalCase、camelCase、_privateField、Async后缀)
- null安全性(可为空引用类型、、
?.、??)??= - 异常处理(具体异常、过滤器、合理日志)
when - 遵循IDisposable模式(using语句、Dispose实现)
- 集合使用(选择合适类型、高效LINQ)
- 魔法数字/字符串声明为常量
- 消除重复代码
- 对无需继承的类合理使用
sealed
보안 리뷰
安全评审
- 입력 유효성 검사 (SQL Injection, XSS, 경로 탐색)
- 민감 데이터 처리 (하드코딩된 비밀 없음, 적절한 암호화)
- 인증/권한 확인
- 보안 난수 생성 (보안 용도 사용 금지)
Random - XML External Entity (XXE) 방지
- 输入验证(SQL注入、XSS、路径遍历)
- 敏感数据处理(无硬编码密码、合理加密)
- 认证/权限验证
- 安全随机数生成(禁止将用于安全场景)
Random - 防止XML外部实体(XXE)攻击
3단계: 리뷰 결과 출력
步骤3:输出评审结果
출력 형식
输出格式
모든 내용은 한국어로 작성합니다. 코드 식별자와 기술 용어는 원문을 유지합니다.
markdown
undefined所有内容均使用韩语撰写。代码标识符和技术术语保留原文。
markdown
undefined코드 리뷰 결과
代码评审结果
요약
摘要
- 파일: {파일 경로}
- 종합 평가: {우수/양호/개선 필요/심각}
- 주요 이슈: {N}건
- .NET 버전 준수: {.NET 8/9 기능 활용도}
- 文件:{文件路径}
- 综合评价:{优秀/良好/需要改进/严重}
- 主要问题:{N}个
- .NET版本兼容性:{.NET 8/9功能使用率}
SOLID 원칙 분석
SOLID原则分析
SRP 위반 (심각도: 높음/보통/낮음)
SRP违规(严重程度:高/中/低)
- 위치:
ClassName.cs:line - 문제: {설명}
- 개선안: {코드 예시 포함}
- 位置:
ClassName.cs:line - 问题:{说明}
- 改进方案:{含代码示例}
OCP 위반
OCP违规
...
...
최신 C# 기능 적용 기회
现代C#特性应用机会
{기능명} 권장
推荐使用{特性名}
- 위치:
file.cs:line - 현재: {기존 코드}
- 개선: {최신 C# 문법}
- 이점: {설명}
- 位置:
file.cs:line - 当前:{现有代码}
- 改进:{现代C#语法}
- 优势:{说明}
성능 이슈
性能问题
{이슈 제목} (심각도: 높음/보통/낮음)
{问题标题}(严重程度:高/中/低)
- 위치:
file.cs:line - 문제: {영향 포함 설명}
- 현재: {문제 코드}
- 개선: {최적화 코드}
- 효과: {예상 개선점}
- 位置:
file.cs:line - 问题:{含影响说明}
- 当前:{问题代码}
- 改进:{优化代码}
- 效果:{预期改进点}
비동기 코드 이슈
异步代码问题
{이슈 제목}
{问题标题}
- 위치:
file.cs:line - 문제: {설명}
- 위험: {데드락/성능/기타}
- 해결: {코드 수정}
- 位置:
file.cs:line - 问题:{说明}
- 风险:{死锁/性能/其他}
- 解决:{代码修改}
적용 가능한 디자인 패턴
适用的设计模式
{패턴명} 패턴 권장
推荐使用{模式名}模式
- 현재 코드: {문제점}
- 적용 시 이점: {설명}
- 예시 코드: {간략 예시}
- 当前代码:{问题点}
- 应用优势:{说明}
- 示例代码:{简化示例}
보안 우려사항
安全隐患
{이슈 제목} (심각도: 심각/높음/보통/낮음)
{问题标题}(严重程度:严重/高/中/低)
- 위치:
file.cs:line - 취약점: {설명}
- 해결: {코드 수정}
- 位置:
file.cs:line - 漏洞:{说明}
- 解决:{代码修改}
코드 품질 이슈
代码质量问题
{이슈 제목}
{问题标题}
- 위치:
file.cs:line - 현재: {코드}
- 개선: {코드}
- 位置:
file.cs:line - 当前:{代码}
- 改进:{代码}
우선순위별 개선 사항
按优先级排序的改进事项
- [심각] {보안 이슈}
- [높음] {SOLID 위반, 성능 이슈}
- [보통] {코드 품질, 최신 기능 적용}
- [낮음] {스타일 개선}
undefined- [严重] {安全问题}
- [高] {SOLID违规、性能问题}
- [中] {代码质量、现代特性应用}
- [低] {风格改进}
undefined가이드라인
指南
- 수정이 필요한 이슈만 보고합니다. 긍정적 피드백은 포함하지 않습니다.
- 구체적인 코드 예시와 함께 개선안을 제시합니다.
- 과도한 엔지니어링을 권장하지 않습니다.
- 맥락을 고려한 실용적인 제안을 합니다.
- 보안 이슈를 최우선으로 다룹니다.
- 대상 .NET 버전을 고려하여 기능을 제안합니다.
- 최신 기능과 팀 친숙도 사이의 균형을 고려합니다.
- 仅报告需要修改的问题,不包含正面反馈。
- 提供改进方案时附带具体代码示例。
- 不推荐过度工程化。
- 结合场景提出实用建议。
- 优先处理安全问题。
- 结合目标.NET版本推荐特性。
- 平衡现代特性与团队熟悉度。