Al escribir una biblioteca o la API pública de un módulo que será utilizado por muchos otros códigos en una variedad de casos de uso, ¿cuál es la mejor manera de equilibrar la flexibilidad con la facilidad de uso? Creo que los dos a menudo entran en conflicto en eso, cuanto más flexible sea usted para hacer algo, más difícil será lograr que haga bien una cosa en particular.Diseño de API: Flexibilidad vs. Facilidad de uso
Por ejemplo, STL el C++ utiliza iteradores, que en mi humilde opinión son terriblemente bajo nivel y molesto para trabajar con, pero a cambio de que son extremadamente flexible en permitir que el mismo código para operar en todo tipo de contenedores STL. Otro ejemplo es la filosofía de diseño de la biblioteca estándar de Java, con sus clases pequeñas y muy específicas diseñadas para una modularidad y flexibilidad máximas frente a la biblioteca estándar de Python, con su preferencia por una jerarquía de clases más plana que simplifica el manejo de los casos de uso común. . ¿Cómo deberían ser equilibradas cosas como estas?
Esto sin duda es algo subjetivo: las API de .NET son horribles. Prefiero una API de estilo funcional con tipos principalmente inmutables y funciones gratuitas (o estáticas) que operan en ellas. Menos estado = acoplamiento reducido, menos problemas de enhebrado, código más fácil de leer. Pero esta es una cuestión de opinión. –