💡 개요
- 프로그래밍 하다보면 이름 짓는게 여간 어려운게 아님.
- 이름을 잘 지어야 기능별 분리도 잘되고 나중에 유지보수 하기도 쉬움
- 가독성도 높아짐
그래서 정리함
1. Helper
사용 시점 :
- Utility 기능: 주로 작은 단위의 유틸리티 함수들을 모아놓은 클래스.
- 독립적 기능: 다른 클래스와 독립적으로 동작하며 특정 기능을 보조.
특징 :
- Stateless: 상태를 가지지 않으며 메서드가 독립적으로 동작.
- Static Methods: 보통 정적 메서드로 구성되어 객체 인스턴스 생성 없이 사용 가능.
예제 :
public static class TimeHelper
{
public static string ToString(DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-dd HH:mm:ss");
}
}
2. Provider
사용 시점:
- 데이터 제공: 데이터를 제공하거나 특정 리소스에 접근할 때 사용.
- 외부 서비스 연동: 외부 API나 데이터베이스와의 연동을 담당.
특징:
- 인터페이스 구현: 보통 특정 인터페이스를 구현하여 의존성 주입과 함께 사용.
- 데이터 접근: 데이터 접근 레이어에서 많이 사용.
예시:
public interface ITokenProvider
{
string GenerateToken(string userId);
}
public class JwtTokenProvider : ITokenProvider
{
public string GenerateToken(string userId)
{
// JWT 토큰 생성 로직
}
}
3. Service
사용 시점:
- 비즈니스 로직: 비즈니스 로직을 처리하는 클래스를 만들 때.
- 트랜잭션 관리: 여러 리포지토리 간의 트랜잭션을 관리할 때.
특징:
- 상태 관리 가능: 필요에 따라 상태를 가질 수 있음.
- 비즈니스 규칙: 애플리케이션의 비즈니스 규칙을 구현.
예시:
public class OrderService
{
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public void CreateOrder(Order order)
{
// 주문 생성 비즈니스 로직
_orderRepository.Add(order);
}
}
4. Manager
사용 시점:
- 자원 관리: 특정 자원의 생명주기를 관리할 때.
- 복잡한 작업 관리: 복잡한 작업이나 여러 단계를 거치는 프로세스를 관리할 때.
특징:
- 상태 관리: 보통 상태를 가지며 자원의 상태를 관리.
- 자원 관리: 객체 풀링, 연결 관리 등의 기능을 수행.
예시:
public class ConnectionManager
{
private readonly List<Connection> _connections;
public ConnectionManager()
{
_connections = new List<Connection>();
}
public void AddConnection(Connection connection)
{
_connections.Add(connection);
}
public void RemoveConnection(Connection connection)
{
_connections.Remove(connection);
}
}
📖 요약
- Helper: 독립적인 유틸리티 기능을 제공, 주로 정적 메서드로 구성.
- Provider: 데이터를 제공하거나 외부 서비스와의 연동을 담당.
- Service: 비즈니스 로직을 처리, 상태를 가질 수 있음.
- Manager: 특정 자원의 생명주기를 관리하거나 복잡한 작업을 관리.
반응형
'프로그래밍 > C#' 카테고리의 다른 글
AddDbContextPool 과 AddPooledDbContextFactory (0) | 2024.07.01 |
---|---|
[EntityFramework] DbContext 풀링 (0) | 2024.07.01 |
싱글톤을 구현하는 2가지 방법 - Lazy Initialization (지연 초기화), Static Initialization (정적 초기화) (0) | 2024.06.21 |
-1을 uint에 넣어서 형변환을 하면 어떻게 될까? (0) | 2024.05.07 |
[디자인패턴]- State 패턴 (0) | 2023.03.14 |
댓글