doc.dev1x.org

単一責務原則

1. 原則

クラスの責務は1つであること

2. 根拠

責務の拡大と共にコードが複雑化する

3. 指針

4. 注意事項

「単一責任 == 単一メソッド」ではない

参考資料

Appendix-1 NG事例

役割が複数種類ある事例

class DataLoader:
    def csv_load(file_path):
        # CSVファイルをロードして返却する

    def tsv_load(file_path):
        # TSVファイルをロードして返却する

    def json_load(file_path):
        # JSONファイルをロードして返却する
from abc import ABCMeta, abstractmethod

class DataLoader(metaclass=ABCMeta):
    @abstractmethod
    def load(file_path):
        pass

class CsvDataLoader(DataLoader):
    def load(file_path):
        # CSVファイルをロードして返却する
        ...

class TsvDataLoader(DataLoader):
    def load(file_path):
        # TSVファイルをロードして返却する
        ...

class JsonDataLoader(DataLoader):
    def load(file_path):
        # JSONファイルをロードして返却する
        ...

class Factory:
    @staticmethod
    def createCsvDataLoader():
        return CsvDataLoader()

    @staticmethod
    def createTsvDataLoader():
        return TsvDataLoader()

    @staticmethod
    def createJsonDataLoader():
        return JsonDataLoader()

if __name__=="__main__":
    loader1 = Factory.createCsvDataLoader()
    print(loader1.load())  # CSVが出力される

    loader2 = Factory.createTsvDataLoader()
    print(loader2.load())  # TSVが出力される

    loader3 = Factory.createJsonDataLoader()
    print(loader3.load())  # JSONが出力される