KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

Python基礎 オブジェクト指向SOLID(単一責任の原則)

登録日 :2025/09/16 04:46
カテゴリ :Python基礎

S:Single Responsibility(単一責任の原則)

単一責任の原則

  • クラスは、たったひとつのアクターに対して責任を負うべきである(アクター:そのクラスを使用するユーザやステークホルダー

原則に違反した場合

  • あるアクターのために行った変更の影響が別のアクターにも及び、バグが生まれる可能性がある
  • どのアクターに影響があるのか、変更前に調査する工数がかかる
  • 変更後に全てのアクターに対してバグが発生していないかのテストを行う工数がかかる
  • コードの共通部分を同時に変更してしまいコンフリクトする可能性がある

Sampleプログラム

class EmployeeData(object):
    def __init__(self, name: str, department: str):
        self.name = name
        self.department = department


class PayCalculator(object):
    @staticmethod
    def __get_regular_hours():
        print("給与計算専用の労働時間計算ロジック")

    def calculate_pay(self, _employee_data: EmployeeData):
        self.__get_regular_hours()
        print(f"{_employee_data.name}の給与を計算しました")


class HourReporter(object):
    @staticmethod
    def __get_regular_hours():
        print("労働時間レポート専用の労働時間計算ロジック")

    def calculate_pay(self, _employee_data: EmployeeData):
        self.__get_regular_hours()
        print(f"{_employee_data.name}の労働時間をレポートしましたV2")


class EmployeeRepository(object):
    def save(self):
        pass


if __name__ == '__main__':
    employee_data = EmployeeData("Suzuki", "develop")
    pay_calculator = PayCalculator()
    hour_reporter = HourReporter()

    print("経理部門")
    pay_calculator.calculate_pay(employee_data)

    print("")
    print("人事部門")
    hour_reporter.calculate_pay(employee_data)