Python에서 문자열을 스마트하게 만들기
Jan 10 2023
도메인 기반 디자인 적용
좋은 건축 아이디어는 크고 복잡한 프로젝트에만 해당되는 것이 아닙니다. Domain-driven Design에 대해 들어본 적이 있든 없든, 나는 당신이 전달해 온 문자열에 기본 원칙을 적용하여 크든 작든 프로젝트를 개선하는 방법을 보여줄 것입니다.
좋은 건축 아이디어는 크고 복잡한 프로젝트에만 해당되는 것이 아닙니다. Domain-driven Design에 대해 들어본 적이 있든 없든, 나는 당신이 전달해 온 문자열에 기본 원칙을 적용하여 크든 작든 프로젝트를 개선하는 방법을 보여줄 것입니다. 여기저기 흩어져 있는 유효성 검사 및 구문 분석 코드의 흩어진 비트를 수집하여 멋진 재사용 가능한 단위로 가져올 시간입니다.
우리는 여기서 Domain-driven Design의 겉핥기만 할 것입니다. 이 기사가 끝날 때까지 같은 이름의 Eric Evans의 책을 구하고 싶을 것입니다. 핵심 개념은 개체 모델이 비즈니스 도메인의 언어를 사용하여 가장 잘 개발된다는 것입니다. 비즈니스 규칙은 모델에 인코딩됩니다. 이는 애플리케이션 및 인프라 코드와 별도로 유지됩니다. 이 아이디어를 코드의 문자열에 적용할 수 있는 방법에 대한 간단한 예에 충실할 것입니다.
문자열이 시작하기에 간단한 대상이라는 것을 알았고 그것이 전부라면 이점을 누릴 수 있습니다. 오늘날 우리는 항공편 번호가 주어진 항공편의 터미널 위치를 얻는 방법을 가지고 있습니다 LA8165. 항공편 번호를 문자열로 처리할 수 있습니다.
def getTerminal(flight_number):
return db.getTerminal(flight_number)
def getTerminal(flight_number):
# Normalize input to a clean string
flight_number = str(flight_number).upper().strip()
if not flight_number:
raise ValueError(“Flight Number can not be empty.”)
return db.getTerminal(flight_number)
class FlightNumber(object):
def __init__(self, flight_number):
# Normalize input to a clean string
flight_number = str(flight_number).upper().strip()
if not flight_number:
raise ValueError(“Flight Number can not be empty.”)
self.flight_number = flight_number
# The value when this is cast to a string or used in a formatted string
def __str__(self):
return self.flight_number
def getTerminal(flight_number):
flight_number = FlightNumber(flight_number)
return db.getTerminal(str(flight_number))
이제 이러한 사고 방식의 모든 미묘한 이점을 살펴보겠습니다.
- 우리의 새 클래스는 파일 시스템이나 네트워크 또는 우리가 조롱해야 할 어떤 것도 건드리지 않기 때문에 단위 테스트가 매우 쉽습니다.
- 문서를 추가할 수 있는 단일 위치가 있습니다.
- 우리는 이것을 완전하게 만들고자 하는 모든 규칙과 구문 분석으로 가득 채울 수 있습니다.
- 프로젝트를 처음 접하는 사람은 항공편 번호가 매우 구체적으로 무엇인지 쉽게 알 수 있습니다.
- 이러한 개체는 모두 도메인 폴더에 저장되어 재사용 및 검색이 가능합니다.
- 호출 코드는 읽기 쉽고 풀 요청은 더 간단합니다.
- 오류는 스택에서 더 빨리 포착됩니다.
class FlightNumber(object):
"""
Represents an International Air Transport Association flight number. Ex — LA8165
The format is two uppercase letters for the airline followed by up to four digits.
"""
def __init__(self, flight_number):
# Normalize input to a clean string
flight_number = str(flight_number).upper().strip()
if not flight_number:
raise ValueError("Flight Number can not be empty.")
self.airline_code = flight_number[0:2].strip()
if not self.airline_code.isalpha():
raise ValueError(f"Airline Code {self.airline_code} must be two letters.")
# Throws ValueError already if not a valid int
self.numeric_part = int(flight_number[2:])
if self.numeric_part < 1 or self.numeric_part > 9999:
raise ValueError(f”Flight Number {self.numeric_part} must be from 1 to 9999.”)
if self.numeric_part == 666:
raise ValueError(f"Seriously, airlines don’t use this flight number.")
def __str__(self):
return f"{self.airline_code}{self.numeric_part}"
참조
- 도메인 기반 디자인

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































