382 Views
February 11, 25
スライド概要
2024/12/14 に開催された Kawaii♡LT で発表した資料です。
RustLadiesの中の人 / PyLadies メンバー
2024-12-14 Kawaii♡LT 推測しやすいコードを書こう 自己流でコードを分けないための考え方 2024-12-14 Kawaii♡LT ふみふみ(2323-code) X: @2323_code (c) @2323-code All Rights Reserved. 1
2024-12-14 Kawaii♡LT 目次 対象者 結論 なぜ自己流でコードを分けてはいけないのか 分ける基準が分からない、どうすれば? まとめ (c) @2323-code All Rights Reserved. 2
2024-12-14 Kawaii♡LT この LT の対象者 自分だけで実装を書いたはずなのに、どこにどの実装があるかわからなくなった 覚えのある人 修正の影響範囲が分からず、不安になったことがある人 設計とか考えてはじめからコード書けるようになりたい人 (c) @2323-code All Rights Reserved. 3
2024-12-14 Kawaii♡LT つまり 推測しづらいコードを書いた覚えがある人 を、対象者としています。 (c) @2323-code All Rights Reserved. 4
2024-12-14 Kawaii♡LT 結論:推測しやすいコードを書くためには? 自己流でコードを分けないために何ができる? 既存の概念から考えよう 三層アーキテクチャ どの層にどのようなコードを書くかを考えて書こう 既存の概念を使うことで、自分も他人も推測しやすいコードを書くことができる (c) @2323-code All Rights Reserved. 5
2024-12-14 Kawaii♡LT Q. なぜ自己流でコードを分けてはいけないのか A. 推測しづらいコードになるから。 変更の影響範囲が分かりづらい 役割がはっきりしない → どこに何があるかが分かりづらい (c) @2323-code All Rights Reserved. 6
2024-12-14 Kawaii♡LT 自己流でコードを分けるとは? 過去の自分のやらかし (c) @2323-code All Rights Reserved. 7
2024-12-14 Kawaii♡LT ① 実質 main 関数に全てのロジックを書いている < 分けてる 「つもり」 # main.py def main(): main_logic() def main_logic(): # ロジック1 # ロジック2 # ロジック3... (c) @2323-code All Rights Reserved. 8
2024-12-14 Kawaii♡LT ② ロジックの一部を分ける基準が曖昧 < 重複は避けたい!でも内容が若干違うので結局ベタがき... def ロジックA(): # ロジック1 def ロジックB(): # ロジック1' # ほぼ重複 (c) @2323-code All Rights Reserved. 9
2024-12-14 Kawaii♡LT Q. 分ける基準が分からない、どうすれば? A. 既存の概念から考えよう 三層アーキテクチャ 層に分けると、コードを分ける基準が見えてくる (c) @2323-code All Rights Reserved. 10
2024-12-14 Kawaii♡LT 三層アーキテクチャとは (c) @2323-code All Rights Reserved. 11
2024-12-14 Kawaii♡LT (c) @2323-code All Rights Reserved. 12
2024-12-14 Kawaii♡LT
① ロジックを main 関数に全て書かない
< メソッドの入出力はインターフェイスで定義、詳細はアプリケーション層で記
述!
# main.py
main()
# presentation.py
def main():
main_logic()
# application.py
def main_logic(id: int) -> str:
return f"ID: {id}"
# domain.py
def main_logic(id: int) -> str:
return NotImplementedError
(c) @2323-code All Rights Reserved.
13
② ロジックの一部を分ける基準を明確にする
2024-12-14 Kawaii♡LT
< 内容が若干違くても、同じメソッドを呼べば済むように書く!
# main.py
main()
# presentation.py
def main(greeter: Greeter):
print(greeter.greet())
if user == "A":
greeter = GreetA()
else:
greeter = GreetB()
# application.py
class GreetA(Greeter):
def greet(self) -> str:
return "Hello A!"
class GreetB(Greeter):
def greet(self) -> str:
return "こんにちは B!"
# domain.py
class Greeter:
def greet(self) -> str:
return NotImplementedError
(c) @2323-code All Rights Reserved.
14
2024-12-14 Kawaii♡LT 結論:推測しやすいコードを書くためには? 自己流でコードを分けないために何ができる? 既存の概念から考えよう 三層アーキテクチャ どの層にどのようなコードを書くかを考えて書こう 既存の概念を使うことで、自分も他人も推測しやすいコードを書くことができる (c) @2323-code All Rights Reserved. 15
2024-12-14 Kawaii♡LT 参考文献 現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実 践技法 増田亨 著 技術評論社 MVC、3 層アーキテクチャから設計を学び始めるための基礎知識 #初心者 - Qiita 2024/12/13 最終閲覧 やさしいクリーンアーキテクチャ 2024/12/13 最終閲覧 (c) @2323-code All Rights Reserved. 16
2024-12-14 Kawaii♡LT ご清聴ありがとうござい ました! で感想をお待ちしております! X: @2323_code #KawaiiLT (c) @2323-code All Rights Reserved. 17