Tengo una abstracción de un adaptador. A través de una variable de entorno, controlo qué implementación se utiliza. No estoy satisfecho con este enfoque, ya que la variante simulada se importa en el código de producción. Me gustaría tener algo como en Symfony, donde la implementación de abstracciones se puede definir en configuraciones de servicios ambientales.
Actualmente tengo la siguiente abstracción:
import HttpERPAdapter from "./HttpERPAdapter"; import MockERPAdapter from "./MockERPAdapter"; // todo, find an abstraction solution to not deploy this in production import httpClient from "common/HttpClient"; const create = () => { if (process.env.REACT_APP_ERP_API_URL === 'mock') { return new MockERPAdapter(); } return new HttpERPAdapter(httpClient); } const erpAdapter = create(); export default erpAdapter;
Estoy seguro de que una compilación en una compilación de producción contendrá la clase simulada, esto también es lo que quiero evitar.
En general, quiero que el código productivo no sepa nada sobre simulacros/servicios falsos.
¿Alguna idea sobre cómo separar la implementación simulada del código productivo?