Saltar al contenido principal

Repositorios

Clases​

Nombrado de repositorios​

Los repositorios deben reflejar el módulo o el conjunto de datos que gestiona, debe tener I como prefijo y terminar con el sufijo Repository. Como los siguientes ejemplos:

  • IReportsRepository
  • IUserRepository
  • IPortfolioRepository

Tipo abstracta​

Los repositorios deben ser abstractos para evitar la dependencia de implementaciones externas.

abstract class IReportsRepository {}

abstract class IUserRepository {}

abstract class IPortfolioRepository {}

Atributos​

Cuando declarar atributos en la interfaz de repositorio​

A. Atributos privados​

Los atributos de uso interno de la clase, como dependencias y variables auxiliares, deben ser atributos privados.

B. Atributos públicos​

Los atributos públicos que sean parte de la firma de la interfaz del repositorio deben declararse como getters de atributos privados.

abstract class IUserRepository {
List<Country> countries;
}

Streams​

Los Streams deben declararse como getters del atributo stream de un StreamController que controle el flujo de información en el repositorio.

Cuándo y cómo declarar streams en la interfaz de repositorio​

Los streams deben ser declarados cuando sea el caso de necesitarlo y de la siguiente manera:

abstract class IUserRepository extends IRepository {
IUserRepository();

Stream<bool> get currentUserStream;
Stream<String> get followStream;
}

Métodos​

Documentación de métodos​

Los repositorios deben llevar una amplia documentación al momento de estructurarlos:

A. Documentación de métodos​

Los métodos deben estar documentados colocando lo que hace, los atributos que recibe, la entidad que retorna y tambien colocar el tipo de retorno en caso de fallar.

abstract class IReportsRepository extends IRepository {
IReportsRepository();

/// Create a report
/// ***Parameters***
/// [report] information of the report with the entity
/// ***Returns**
/// A Future void which means the report was created successfully
Future<void> createReport({
required Report report,
required String locale,
});
}

B. Documentación de streams​

Los streams creados deben estar documentados sobre su funcionalidad.

abstract class IUserRepository extends IRepository {
IUserRepository();
//Stream controller for the
//home when the icon is pressed for refreshed it
Stream<bool> get homeIconPressedStream;

//If I want the profile of the talent when I am logged as a business
Profile? get talentProfile;
}