Principio de inversión de dependencias#
Última modificación: Mayo 14, 2022
Se debe depender de abstracciones y no de concreciones
Implementación que viola el principio#
[ ]:
class ScikitLearnModel:
def fit(self):
pass
class TensorFlowModel:
def fit(self):
pass
class PyTorchModel:
def fit(self):
pass
class ModelTrainer:
#
# Este modelo es una abstracción pero depende de la implementación concreta
#
def __init__(self, model_type):
if model_type == 'scikitlearnmodel':
self.model = ScikitLearModel()
elif model_type == 'pytorchmodel':
self.model = PyTorchModel()
else:
self.model == TensorFlowModel()
def fit(self):
self.model.fit()
Solución#
[ ]:
from abc import ABC, abstractmethod
class Model(ABC):
@abstractmethod
def train(self):
raise NotImplementedError
class ModelTrainer:
def __init__(self, model: Model):
self.model = model
def fit(self):
self.model.train()
class ScikitLearnModel(Model):
def fit(self):
pass
class TensorFlowModel(Model):
def fit(self):
pass
class PytorchModel(Model):
def fit(self):
pass
model_of_the_day = PytorchModel()
model_trainer_of_day = ModelTrainer(model_of_the_day)
Generalización de la solución#
[ ]:
import os
def main():
model_type = os.environ["MODEL_TYPE"]
if model_type == "scikitlearnmodel":
self.model = ScikitLearModel()
elif model_type == "pytorchmodel":
self.model = PyTorchModel()
elif model_type == "tensorflowmodel":
self.model == TensorFlowModel()
else:
raise Exception