es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

patrones de diseño de bibliotecas: API genérica única vs APIs específicas

Trabajando en DailyStatsLib, una biblioteca para obtener estadísticas basadas en el día de la semana.

¿Es mejor para DailyStatsLib exponer

  • opción 1: una API genérica única
  • opción 2: exponer una API específica para cada día de la semana

Opción 1 (API genérica única)

  • ventajas: interfaz simple y toda la lógica es manejada por DailyStatsLib
  • desventajas: AllInfoStruct (mostrado a continuación) parece ser un contenedor de información para todos los días (y parte de esa información puede no estar disponible en un día dado)

main.cpp

// utilizando "std::optional" porque no toda la información puede estar disponible en un día dado
struct AllInfoStruct {
  std::optional<mondaystatsinfo> monday_info; // si el día es lunes, esta información estará disponible
  std::optional<tuesdaystatsinfo> tuesday_info; // si el día es martes, esta información estará disponible
  std::optional<wednesdaystatsinfo> wednesday_info; // si el día es miércoles, esta información estará disponible
  ...
} all_info_struct; // tiene toda la información necesaria para obtener estadísticas en cualquier día de la semana

Day today = dayUtil.getDay();
Stats my_stats = DailyStatsLib::Manager.getInstance().getStats(today, all_info_struct); // interfaz genérica única

Opción 2 (API específica por día)

  • ventajas: las APIs son más específicas y más fáciles de entender y probar. No se oculta mucho.
  • desventajas: ¿Está main.cpp haciendo parte del trabajo que realmente debería hacer DailyStatsLib?

main.cpp
Stats my_stats;
Day today = dayUtil.getDay();
if (today == e_day_Monday) {
MondayStatsInfo ms;
my_stats = DailyStatsLib::Monday.getInstance().getStats(ms);
} else if (today == e_day_Tuesday) {
TuesdayStatsInfo ts;
my_stats = DailyStatsLib::Tuesday.getInstance().getStats(ts);
} else if (today == e_day_Wednesday) {
WednesdayStatsInfo ws;
my_stats = DailyStatsLib::Wednesday.getInstance().getStats(ws);
}
...

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en c++ y patrones de diseño, ambas opciones tienen sus ventajas y desventajas. Sin embargo, en este caso, puede ser mejor seguir con la Opción 2, la API específica para cada día, ya que permite obtener APIs más enfocadas y más fáciles de entender, sin estar cargadas de información innecesaria. Además, al utilizar APIs específicas para cada día, podemos evitar crear un depósito de información para todos los días y mantener las APIs más organizadas. Sin embargo, debemos asegurarnos de que el archivo main.cpp no esté realizando ninguna parte del trabajo que DailyStatsLib debería hacer por sí mismo.

Comments are closed.