Python で文字列をスマートにする
Jan 10 2023
ドメイン駆動設計の適用
優れたアーキテクチャのアイデアは、大規模で複雑なプロジェクトだけのものではありません。ドメイン駆動設計について聞いたことがあるかどうかに関係なく、これまで渡してきた文字列に基本原則を適用することで、大小を問わずプロジェクトを改善する方法を説明します。
優れたアーキテクチャのアイデアは、大規模で複雑なプロジェクトだけのものではありません。ドメイン駆動設計について聞いたことがあるかどうかに関係なく、これまで渡してきた文字列に基本原則を適用することで、大小を問わずプロジェクトを改善する方法を説明します。あちこちに散らばった検証コードや解析コードを収集し、再利用可能な優れたユニットにまとめます。
ここではドメイン駆動設計の表面をなぞるだけにします。この記事を読み終えるまでに、エリック・エヴァンスの同名の本を入手しておくとよいでしょう。中心となる概念は、オブジェクト モデルはビジネス ドメインの言語を使用して最適に開発されるということです。ビジネス ルールはモデルにエンコードされます。これは、アプリケーションやインフラストラクチャのコードとは別に保管されます。このアイデアをコード内の文字列に適用する方法の簡単な例にこだわっていきます。
文字列は最初は簡単なターゲットであり、それだけで十分であればメリットを享受できることがわかりました。現在、 のような便名を指定して、フライトのターミナル位置を取得するメソッドが用意されています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))
次に、この考え方の微妙な利点をすべて探っていきます。
- 私たちの新しいクラスは、ファイル システムやネットワークなど、モックする必要があるものには触れないため、単体テストが非常に簡単です。
- ドキュメントを追加する場所は 1 か所だけです。
- これに、必要なすべてのルールと解析を詰め込むことができます。
- プロジェクトに初めて携わる人は誰でも、便名とは何か、非常に具体的に簡単に学ぶことができます。
- これらのオブジェクトはすべてドメイン フォルダーに入れて、再利用および検出可能にすることができます。
- 呼び出しコードが読みやすくなり、プル リクエストがシンプルになります。
- エラーはスタック内でより早く検出されます
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)



































