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;
}