El requeteframework

Comenta Julio en el post Maldivas Arquitectura 1 – El sentido común del amigo Juan Irigoyen, «me ha sorprendido ver a gente de Plain Concepts «sonreirse» cuando le comentas algo del framework, no te dicen nada pero no están muy en su favor»

Me voy a permitir hablar en nombre de Plain Concepts, ya que en mi tarjeta pone Software Architect y estamos hablando de arquitectura… conste que esto en sí es un atrevimiento gordo, pues hay muchas visiones sobre el tema de los framework en Plain Concepts y gente que, aun teniendo otra visión, es tan arquitecto como yo o más. Además, no hay balas de plata.

Podría resumir el sentimiento general sobre el tema en lo siguiente…

No somos amigos de los frameworks generalistas que quieren solucionar todos los problemas y que añaden una capa de abstracción adicional, a veces demasiado compleja y pesada, sobre el framework de .Net. Ya tenemos un framework generalista que funciona muy bien: el .Net Framwork. Lease: generalmente no nos gusta Enterprise Library para proyectos ‘in house’. Cuando tienes un solo proyecto, la curva de aprendizaje de Enterprise Library es muy significativa y rara vez se ve compensada por la reutilización y la flexibilidad que aporta.

Pongamos un ejemplo: Enterprise Library permite posponer la decisión sobre donde tiras tus logs a tiempo de despliegue de la aplicación. Evidentemente esto es algo que en si mismo, si no se cuenta el precio que hay que pagar es una excelente idea. Es algo que si no se valoran los costes adicionales todos ‘compramos’. Es fácil ver solo reutilización y flexibilidad y obviar otras cuestiones relevantes: coste de aprendizaje, complejidad, perdida de control, fugas de abstracción etc… Por no decir que obligas a quien despliega ha realizar una configuración adicional que es propensa a errores. No todo tiene que ser configurable. Configurar tiene costes y riesgos asociados que una buena arquitectura centrada en el problema nos puede evitar.

Además parece que la flexibilidad y la reutilización son valores en si mismos, y no es cierto. La flexibilidad y la reutilización solo son importantes si es algo que necesitas. No son un valor en si mismas, y sobre todo ¡no son gratis!.

La simplicidad si que es un valor por si misma. Tal y como yo entiendo mi trabajo de arquitecto del software, y en gran parte como lo entendemos en Plain Concepts, este consiste en lograr la arquitectura más simple posible que cumple los requisitos marcados. Generalmente cuando utilizas un framework generalista arrastras mucha funcionalidad que nunca jamás vas a utilizar y que sin embargo vas a ‘sufrir’. Yo no quiero que mi sistema de traceo sea capaz de salir a 27 fuentes diferentes. Yo quiero saber que necesidades de traceo tengo y buscar la arquitectura más simple que cubre esas necesidades.

Yo creo en los framework de dominio especifico que surgen de la continua refactorización y de necesidades reales. Creo en la arquitectura emergente. Creo en el enfoque de Juan, que ve su necesidad concreta y automatiza y simplifica todo lo que puede el trabajo repetitivo que aparece en su proyecto. Que crea abstracciones concretas para sus necesidades concretas. No creo que los ‘frameworks’ que se venden con lemas del estilo de ‘genera 10000 líneas de código con un solo click de ratón’… no creo en esto hasta que el lema sea ‘mantén 10000 líneas de código con un solo click de ratón’. Escribir código es la parte más barata del proceso de desarrollo de software. Los costes están en mantenerlo, evolucionarlo, probarlo, ponerlo en producción… esto se obvia a menudo. Estos costes son directamente proporcionales a la complejidad de tu base de código. No quiero 10000 líneas de código que no necisito solo por que Enterprise Library o un generador me las de gratis, es una complejidad que no quiero pagar.

Cuando usas un framework generalista esta cediendo control a una abstracción. Lo problemas empiezan cuando esa abstracción fuga detalles y tu no entiendes que pasa o no puedes recuperar un control que necesitas. Esto no significa que las abstracciones sean malas, sino que tienen un precio. Joel Spolsky lo explica como nadie en su excelente The Law of Leaky Abstraccions.

Lógicamente hay situaciones, como factorías de software donde las oportunidades de reutilización son muchísimo más altas que en el desarrollo de software ‘in house’. Hay es posible que los costes de mantener un framework generalista si sean interesantes, por que un framework de dominio, debería adaptarse a tantas situaciones que acabaría siendo un framework generalista.

¡Por eso cuando oímos hablar de frameworks nos sonreímos!

46 comentarios sobre “El requeteframework”

  1. Hola:

    no podria estar mas de acuerdo contigo con respecto a los frameworks, me a tocado ver varios desarrollos realizados a base de fw’s en diferentes tecnologias (no los programe, pero les hacia el analisis de seguridad, asi que les veia las tripas) y pude darme cuenta de eso que comentas,depurar errores a algo que uno no a echo es demasiado complejo, por mas que tengas el fuente o no, algo que si suelo usar, son generadores de codigo (partes), pero de los que yo mismo programe, para generar codigo segun mi forma de trabajo – para algunas partes de codigo repetitivo, como generacion de entidades y demas- ; fuera de eso tampoco estoy a favor de los frameworks – exceptuando al de .net :)… –

    Salu2

    Ddaz

  2. Hola Rodri

    Haber, antes de nada, comento mi entorno o mi mundo, he pecado de no hacerlo, creo que con eso entenderemos la potencia de un framework pero ojo UN FRAMWEORK PROPIO, HECHO POR NOSOTROS

    A principios de los años 90 en la empresa donde entonces trabajaba nos hicimos un framework (en lenguaje C), y todas las aplicaciones se basaron en él (aplicaciones de paquetes estandard), cuando llegó windows 95 y sucesores, solo tuvimos que cambiar la parte del framework de interface de usuario, y encima nos la hicieron fuera; se la encargamos a un partner de Microsoft que hacía outsourcing, es decir, de la noche a la mañana (dos meses) tuvimos TODAS nuestras aplicaciones estandard de modo consola en modo grafico (diálogos windows). Lo mismo ocurrió con el acceso a datos, pasamos de gestor de ficheros a una BBDD (SQL Server, Oracle) con un esfuerzo muy poco costoso.

    Ahora trabajo en otra empresa muy parecida, tenemos también software de aplicaciones estándard y estamos migrando a .Net, cuando hablo de framework hablo de desarrollarnos uno nosotros, no muy extenso pero que cubra areas de acceso a datos, interfaz, seguridad, publicación de información etc… Es decir dedicar un equipo de 2-3 personas durante 1-2 mese al desarrollo de un fino framwork personalizado a nuestras necesidades, el retorno de la inversión está claro se producirá en el futuro.

    Yo encuentro un problema; la gente que venga nueva deberá empollárselo, pero podemos poner en marcha artimañas: ¿y si jugamos pe. con los namespaces? ¿Podíamos crear una Clase que fuera System.Data.DataSetCopermatica? Utilizando namespaces típicos del framework de .net «solapamos» nuestro framework, el programador nuevo en el equipo encuentra con intellisense nuestra clase al lado de la clase DataSet, es más DataSetCopermatica es una clase heradada de DataSet, dionde implementamos nuestras necesidades de acceso a datos, lo mismo con los objetos connection

    ¿Que opinais?

    Un saludo

  3. Pues vaya!!
    Yo no estoy tan de acuerdo!! Si estoy de acuerdo en que un framework no resuelve TODOS los problemas, ni que un framework es una varita mágica que hace aplicaciones…, pero yo, personalmente, si creo en un framework, propio, que evolucione, que esté bien documentado, que esta documentación también evolucione (wiki) y que se centre, en por ejemplo, aplicaciones de gestión, (altas, bajas, modificaciones,…)(listados, detalles del registro…) (seguridad, estilo visual, etc..) creo que es muy útil, ¡de hecho! creo que tiene muchas ventajas: http://geeks.ms/blogs/msierra/archive/2008/09/12/un-framework-y-la-calidad.aspx
    Y con respecto a la Enterprise Library, quizas no necesites conocerla entera, es probable que solo necesites aprender a usar el acceso a datos (te puede llevar dos mañanas) y te va a resolver problemas futuros de cambio de base de datos (por ejemplo)… de hecho que creo que realizar accesos a datos con la EL es una buena práctica.
    Es mi opinión! (espero no crear demasiada polémica)

  4. Hola miguel :

    no estoy deacuerdo contigo en que usar EL sea una buena practica de programacion…, no todas las cosas que hace ms con para usarse.. asi como los typed dataset.. la web de msdn esta llena de ejemplo de eso, pero no por eso son algo que deba usarse en un desarrollo real…

    las EL te llenan de mucho lastre…

  5. Bueno, yo creo que…, en concreto, el ejemplo del acceso a datos de la EL no le veo inconveniente, y si muchas ventajas… (insito que es una opinión) Y del blog de Joel no he encontrado nada de frameworks y efectos ¿? (igual no he buscado bien)
    De todos modos, ya he dicho que no creo en el «magic framework» que resuelve todo (la capa de ozono, el hambre en el mundo, …;)), pero si creo en que desarrollar un framework específico para problemas concretos es muy util.
    Al menos mi me ha sido muy util!!

  6. Hey Rodrigo … mira que había ejemplos y tuviste que elegir EntLib y además se que todos se sonríen porque son bastante simpáticos 😀 jeje

    Esto parece que no saliera de mi boca, pero yo tampoco soy un fiel creyente de los Frameworks mágicos y solucionadores de todos los males que existen en la tierra. Digo que no parece que saliera de mi boca ya que hace ya bastantes años (browsead por GotDotNet) comenzaron mis primeros pasos con EntLib creando lo que en esa época no existía: un gestor de datos transparente para conectarse con SQL Server y Oracle. Estoy hablando de .Net Framework 1.0, donde el provider para Oracle que poseía .Net era una castaña, y no te quedaba otra que utilizar el de Oracle; aunque claro, ambos proveedores eran completamente diferentes entre sí. Pues bien, basados en la capa abstracta de acceso a datos que presentaba el Data Access Application Block para SQL Server, extendimos el provider para crear algo que nos permita trabajar con Oracle. De esta forma mi aplicación, podía ser instalada bajo SQL Server, Oracle o Informix (historia que jamás contaré) y mi capa de datos no se daba por enterada. Hoy un par de años después, la suerte me dejó en Avanade, donde se crearon los primeros Bits de EntLib y que luego distribuyó Microsoft; y obviamente @home existen muchos amantes de EntLib. En este punto EntLib, como muchos otros Frameworks, puede jactarse de una evolución a lo largo de los años basada en las peticiones y las experiencias de la comunidad. Por ejemplo hoy ya existe una capa de datos abstracta que te permite trabajar con SQL Server, SQL Compact, Oracle, etc. y existen muchos otros bloques de aplicación que solucionan otros problemas específicos.

    Pero sigo compartiendo la consigna “para cada problema, la solución justa” y es en este punto donde tal vez EntLib, posea demasiadas Features que seguramente no utilizaré en mi aplicación. Sin embargo, y sin entrar en detalles sobre cómo funciona EntLib, lo que no puedo aceptar es que alguien desprecie un producto X y luego presente su solución: por ejemplo, me he encontrado con personas que no creen en algunos Frameworks (y ojo que estoy hablando de Frameworks que a mí tampoco me gustan); y que como solución presentan su Biblioteca de clases mágica que hace las cosas mucho mejor que un producto probado por una comunidad, esto tampoco es la mejor solución.

    Yo aunque no sea estrictamente necesario, si la situación lo requiere, no reinventaré la rueda una vez más y seguiré utilizando EntLib, y cuando tenga una necesidad no resuelta, tiraré líneas de código que como bien dice Rodrigo, deberé pensar a conciencia porque después deberé mantener

    Saludos

    PD: tio, me he gastado la tinta del post de hoy en este comentario jejeje

  7. @Miguel: Date cuenta que no hablo de los frameworks especificos de dominio… no me molestan si surgen de una necesidad… no me gusta el enfoque de ‘me hago el framework antes que la aplicación’ el framework es algo que emerge mediante refactorización…

    @Bruno: Recuerdo haber hablado contigo de esto en alguna ocasión y entiendo lo que comentas y lo comparto. Pero EntLib hace tiempo que a evolucionado en un moustro altamente aclopado entre si. Si quieres el acceso a datos tienes que arrastra el logeo, la configuración… además que muchas cosas son redundantes, pues ya están en el Framework de .Net…

    Sobre lo de librerías hechas por tí mismo… pues fijaros, si necesito abstraerme del motor de base de datos, por poner un simple ejemplo, seguro que no necesito otras mil capacidades que tiene EntLib para lograr ese proposito.

    Prefiero hacerme un pequeña y simple librería, que me abstraiga de ese aspecto y aproveche el conocimiento de mis requisitos para lograr simplicidad. Si sé que todo el acceso será contra procedimientos almacenados, que todos los procedimientos almacenados devolverán los errores de determinada manera y que todos seguirán un determinado patrón para devolver resultados y tomar parámetros puedo simplicar enormemente mi capa de datos respecto a lo que tendría que arrastrar con EntLib y lograr el proposito de abstraerme del gestor de base de datos sin tener que arrastrar un millón de líneas de código que me dan capacidades que no necesito para nada.

    ¡Un saludo!

  8. En mi opinion el EL y otras cosillas que saca microsoft son muy utiles para aprender por la via de leer codigo entender patrones, etc, etc, pero a la hora de hacer un proyecto solo confio en lo que puedo modificar y entiendo muy pero muy bien. Desde la perspectiva del cliente es dificil que la razon por la que no puedes cambiar, crear o eliminar algo de la aplicacion es que no se entiende como funciona y donde deben hacerse los cambios.

  9. @jkpelaez: comparto la opinión que expresas. No soy muy partidario de usar EntLib, pero si soy muy partidario de conocer EntLib y ver como se han implementado ciertas soluciones. Se puede aprender mucho mirando EntLib… también se puede aprender mucho mirando al framework de .net o spring.net o unity etc…

    ¡Un saludo!

  10. En cualquier caso, todos estamos atados a uno o varios framework, desde el propio Visual Studio, ahora en Ado con entity framework, hasta controles y librerías de terceros, siempre existirá algo que no podemos modificar ni controlar, nos guste o no lo que hacen internamente, y creo que este es uno de los factores del porque la informática evoluciona tan rápido. La única pregunta que podemos hacernos seria: ¿Es adecuado usar el framework xxx para la solución que busco?, habrá casos en que si y otros en que no, dependerá del tipo del proyecto al que nos enfrentemos, de los conocimientos de cada uno y de otros factores como el tiempo, los recursos, etc.

  11. Yo estoy de acuerdo con Julio Trujillo en que tener un «framework» propio puede ser muy positivo si está bien hecho. Lo malo es que hay muy poca gente capaz de crear un buen «framework» de bases de datos. Microsoft nunca ha podido. El de Maldivas tiene muy mala pinta por que parece un ORM de los anteriores a LINQ. LINQ tendrá muchos errores pero es el que va por mejor camino, por lo menos en el concepto.

  12. Yo creo que no hay mejor framerwork que el que mejor se adapte a tus necesidades dependiendo de cada momento, quizas te sirva el edm para un proyecto, nhibernate para otro,etl o usar datasets y datatables. creo que el cojoframerwork es muy dificil de encontrar esta bien saber que existen y saber cual usar en cada momento, eso es lo dificil de la tarea, no hacer «trabajo» extra si hay otro que te lo da mas o menos echo. todo depende de los requisitos…

    Alfredo: quizas maldivas tengo su framerwork asi debido a cuando se empezo a desarrollar, que es lo que habia en ese momento y cual es el tiempo de vida del proyecto, creo que a veces se habla por hablar…

  13. Rodrigo, te pido disculpas por contestar aquí, pero si hago un post mas, no vamos a acabar nunca… 🙂

    Alfredo, me dejas perplejo con tus afirmaciones, Maldivas es un Framework que propone una solución concreta para un momento determinado, en que la tecnología de Microsoft solo permitía utilizar su modelo de datos basado casi exclusivamente en Dataset o tenias que utilizar frameworks de terceros como n-hibernate, nace de una necesidad en concreto para dar solución a un proyecto que comenzó al principio del año 2005 datos, en ningún caso propongo un FrameWork para utilizar en otras aplicaciones.

    Este modelo está basado por completo en el Entity Data Model, que existe hace mas de 30 años y al que hemos dotado de funcionalidad adicional para minimizar el código requerido y dotarle de otras características.

    En ningún caso, propongo utilizar una solución similar, es más, si tuviera que hacer a día de hoy un nuevo proyecto, nunca desarrollaría una capa de acceso a datos como la que tiene Maldivas, en el que su arquitectura es muy similar al EDM de Microsoft, es lógico, se basan en el mismo patrón, y del que además puedo afirmar que tiene muchas más ventajas que el nuestro y que está mucho mejor construido, de hecho unas de las ideas futuras que tenemos es la readaptar nuestra capa de datos para reutilizar la del EF.

    Tan solo propongo algunas ideas y soluciones para la generalización de consultas que se pueden incorporar también a los modelos actuales, de hecho Unai hace una aproximación muy parecida en:

    http://geeks.ms/blogs/unai/archive/2008/07/06/entity-framework-y-la-generalizaci-243-n-de-consultas.aspx

    En cualquier caso, la capa de datos es solo una de las partes de las que se compone el proyecto y todavía no he hablado prácticamente nada de cómo está construido.

    Saludos.

  14. Juan, llevo bastantes años dedicandome a las bases de datos y no había oido nombrar al «Entity Data Model» hasta hace unos pocos meses. Lo he buscado con Google Trends y allí la primera señal de su existencia es del 2008 y no despega hasta junio.

    Y si te refieres al Entity Relationship Model eso solo es una técnica auxiliar que puede servir para ayudar a diseñar una base de datos y/o ayudar a documentar su diseño. Es lo que se conoce como una técnica de modelado conceptual, es decir: informal.

    Lo que hace Unai en el artículo del enlace es degradar el Entity Framework desaprovechando casi toda su potencia, envolviendolo con una interfaz sumamente primitiva. Dice que así no hace falta aprender eSQL.

    Es como si mete un libro en una caja para fabricar un pisapapeles y luego dice que así no hace falta aprender a leer.

    Yo comento lo que he visto, y esa forma de gestionar los datos es atroz ahora, lo era en el 2005 y en 1985.

  15. Rodrigo, lo malo es que usaron una técnica que siempre ha sido muy mala.

    De todas formas si hubiese usado LINQ como propone Unai tampoco hubiese ganado mucho.

  16. Alfredo, desde luego me refiero al Entity Relationship Model, si tu crees que es una tecnica auxiliar, estamos buenos….

    Eres capaz de evaluar un proyecto de varios miles de lineas de código, viendo tan solo unos formularios y la pequeña explicación que he dado de la distribución de tres de sus capas, impresionante. Por una parte dices que «LINQ tendrá muchos errores pero es el que va por mejor camino, por lo menos en el concepto», en cambio criticas mi modelo que esta basado en el mismo concepto, del que y esto te lo puedo asegurar, no tienes ni idea de como funciona.

    Creo, y no te lo tomes a mal, que no sabes de lo que estas hablando. No has entendido nada de lo que propone Unai, me gustaria, ya que eres un experto y por tu forma de hablar conoces mas de Entity FrameWork que el propio Unai, que nos iluminases con tus ideas y proyectos de como se debe trabajar con los datos.

  17. @Alfredo, espero con impaciencia el momento en que empieces a iluminarnos con tu sabiduria. De verdad depués de críticar sin argumentos solidos a Unai, uno de los mayores expertos en este pais en EF, no por que yo lo diga, sino porque Microsoft y la comunidad así lo reconocen, y a Juan, cuya aplicación no he visto ‘por dentro’, pero persona con la que he compartido mucha charla técnica y se de buena mano de su saber hacer, capacidades y sobre todo pragmatismo a la hora de abordar el desarrollo de una enorme aplicación empresarial, lo mínimo que espero es que sustancies tu crítica en algo más que en errores de nombres.

    ¡Un saludo!

  18. Juan, esa pequeña explicación me ha llegado de sobra para ver errores garrafales en la gestión de datos, y el decir que lo que describe Unai se aproxima, me lo ha confirmado todavía más.

    En lo que acierta LINQ es en la forma de abordar el problema del «impedance mismatch» integrando extensiones del tipo de SQL (declarativas y orientadas a conjuntos) en los lenguajes de programación. LINQ to Entities ya es un paso atrás bastante grande con respecto a LINQ to SQL y lo que hace Unai es crear una interfaz muy rudimentaria para la gente que no sabe nada de bases de datos.

    Te aseguro que entiendo muy bien lo que propone Unai, por que estoy harto de ver cosas parecidas. Es posible que se haya empollado muy bien la documentación de LINQ y se la sepa de memoria, pero eso no quiere decir que tenga la menor idea de como diseñar un buen sistema de información.

    Este no es el lugar para impartir un curso sobre teoría de bases de datos y diseño de sistemas de información, y por lo que leo aquí me parece que no os vendría nada mal. En condiciones adecuadas tampoco tendría inconveniente. Estoy acostumbrado a trabajar sobre estos temas a un nivel mucho más profundo y colaboro habitualmente con algunos de los mayores expertos mundiales en bases de datos.

  19. Me asombra que sigas manteniendo este tono de prepotencia en tus post, te aseguro que no puedo entenderlo, los que participamos de esta comunidad lo hacemos de forma desinteresada con el fin de compartir y aprender los unos de los otros, en tu caso te limitas a criticarlo sin más, a mi me parece bien acepto la crítica y ya.

    No quiero perder el tiempo si no vas a aportarme nada más que críticas sin explicar tus los motivos, pero que a Unai que considero una persona con una inteligencia excepcional que realiza un trabajo increíble para la comunidad y que creo que es uno de las mayores expertos en EF y Linq que existe, que digas que “se ha empollado muy bien la documentación”, no me lo puedo creer…

    Voy a parar aqui, no quiero decirte cosas de las que luego me voy a arrepentir, te aconsejo que midas los comentarios con gente que no conoces y que criticas tan alegremente.

  20. La verdad es que ni me iba a molestar en contestar, pero bueno, al final me he decidido hacerlo, y con esto no pretendo un guerra, de hecho es el último comentario que pondré en este post, a pesar de que Alfredo ya es sumamente conocido por sus comentarios en otros foros. Partiendo de la base de que no veo ninguna argumentación formal por tu parte Alfredo sobre la que realmente discutir…empezemos, en primer lugar mucho presupones al decir que entiendes cual es el propósito de ese sencillo ejemplo mostrado en el post en cuestión ,pero aún así, no acierto a ver que problemas tan grades tienes, más que nada porque tu mismo expones argumentos contradictorios en tus comentarios. Este era un ejemplo tonto que venía de una charla sobre un posible proceso de generalización de algunas consultas que me pidieron que hiciera en un evento en Santader… nada más que eso, simplemente, ni una recomendación, ni nada más que la respuesta a una petición. En segundo lugar efectivamente digo que no tienes que necesitar eSQL, no que eso sea bueno ni recomendado, ni malo, yo uso activamente eSQL y me parece imprescindible, aunque echo de menos ciertas features en la materialización de resultados, además, por si no lo sabes las consultas escritas en L2E y en eSQL comparten la misma base de código, no hay diferencia, ambas se traducen en lo que se conoce como Canonical Query Threads, por lo tanto no veo ninguna afirmación formal sobre esto de tu parte, simplemte guerra!!. La que más gracia me hace es decir, como en tu comentario, que L2E es un paso atrás sobre L2S, más ahora que ya han dejado de lado esta última. Como sabras TU que ERES EXPERTO en sistemas de información la posiblidad real de tener una abstraccion de la base de datos y de crear un modelo de trabajo, DDD, con L2S es ínfima por no decir nula, como haces entity spliting ( vertial u horizonatal), como trabajas con relaciones muchos a muchos con payload, como das soporte a TPT, TPH y TPS????

    Te digo en serio que me encantaría tener una conversación constructiva, siempre se puede aprender mucho de otras personas. Pero por lo que te conozco, sueles ser poco constructivo. Por mi parte te dejo una puerta abierta, a esta conversación y quizás mucha otra gente obtenga resultados de ella, bien por correo o como prefieras…

    un saludo a todos!
    Unai

  21. @Juan: No te quemes hombre. Alfredo Novoa viene a cubrir un rol importante en toda comunidad que hasta ahora no teníamos en Geek.ms, el de troll.

    Además entiendo que al ser alguien que trabaja con los mayores expertos mundiales no necesita argumentar sus manifestaciones como hacemos los simples mortales.

    Eso si, no dudo que sea un gran experto, pero en internet no he encontrado ni una sola referencia a ningún artículo, publicación o post suyo… quizás sea muy experto pero se guarda su experiencia… así que no es el tipo de persona que apreciamos en Geeks.ms. Algún flame del estilo de este si que he encontrado en Google, pero poco más.

    ¡Saludos!

  22. Juan, ya he explicado varios motivos y como me imaginaba no has captado nada. Ya he dicho que un comentario en un blog no es la forma apropiada de introducir a alguien en la teoría del desarrollo de sistemas de información, pero si quieres te puedo recomendar algunos libros para empezar. A ti te parecerá que soy prepotente, pero a mi me parece que no sabeis ni lo más básico y que os llevo muchas vueltas de ventaja en estos temas.

  23. Veo que no lo captas a la primera, eres de los persistentes, te lo voy a intentar dejar claro de una vez:

    Lo de los libros te lo agradezco, no te molestes, por mucho que lo intente no voy a llegar a tu altura, ya tengo 38 años y soy muy mayor para entender a uno de los mayores expertos del mundo en la «teoría del desarrollo de sistemas de información», solo puedo decirte una cosa, he visto un par de tus post, en uno dices que eres capaz de realizar mantenimientos de 100 tablas en un solo 1 día, nosotros para alrededor de 1000 llevamos un par de años y lo que nos queda…, me he dado cuenta de que no servimos para esto, acabo de decir a mi equipo que esto se acabo, no podemos competir…

    Te hare una proposición, te voy a contratar por 20 días, a tu velocidad te sobrara tiempo para terminar el sistema en el que trabajamos, el gerente de mi empresa me ha dado mano libre para pagarte una indecente cantidad de dinero, así podremos engordar las listas del paro cuando termines, por eso de la crisis…. La empresa tendrá la solución en poco más de un mes y diré “Le descubrí yo….”.

    Observo en tus post que manejas como nadie los datatables, eso si me permito hacerte una pequeña apreciación, no deberías utilizar nombres de columna entre comillas en los objetos de datos, ya que si en la base de datos se cambia el nombre, el programa dejara de funcionar. Permíteme además ofrecer a la comunidad otro post donde se aprecia el especial talante con el que ayudas a los demás, se nota que sabes trabajar en equipo y ayudas constantemente a la comunidad.

    http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?pg=2&p=1&tid=d23fa1aa-cab7-41ae-ba20-2839b141410e&dg=microsoft.public.es.csharp&cat=&lang=&cr=&sloc=

    http://www.kriptus.com/foro/programacion-en-2-capas-t24055.html

    En mi equipo, ya dicen, yo de mayor quiero ser como tu…

    Pd. Como va a ser poco tiempo, te importaria que hagamos un contrato en practicas, del sueldo ni hablar, te dejo un cheque en blanco y pones tu la cifra.

  24. Unai, lo de que el post ese sea un ejemplo tonto a petición de alguien y no una recomendación me parece muy bien, pero fue Juan el que dijo que proponía algo parecido como base para un ERP, y espero que estés de acuerdo en que eso es un enorme disparate. Y desde luego tu ejemplo hace lo que yo he descrito.

    Respecto a lo del paso atrás. ¿Que tendrá que ver que Microsoft haya dejado atrás a LINQ to SQL con que fuese por mejor camino que LINQ to Entities en muchos aspectos? Supongo que no habrás entendido lo que quería decir.

    Respecto a lo de hacer una abstracción del modelo de la base de datos es que no hay que hacerla, es un disparate. El modelo de la base de datos ya es la abstracción de los datos con la que tienen que trabajar las aplicaciones. Para eso está. Esto es de lo más elemental.

    Con respecto a la conversación, no tengo inconveniente.

    Rodrigo, no se muy bien como has buscado pero yo tengo más posts en Usenet que tú, cosa de la que tampoco me enorgullezco en absoluto. Y además participo en listas de correo a las que no vas a llegar con Google. Y a la correspondencia privada tampoco.

    Juan, otra vez no has entendido lo que escribí.
    En ese mensaje hablaba de un prototipo de una aplicación de 100 tablas en un día y así fue. Luego otra persona también muy rápida tardó unos cuantos días en acabarla. Eso lo hicimos con Delphi. Eso sí, no me extraña nada que tu no fueses capaz.

    Yo no uso DataTables, solo los usé una vez y me parecieron un desastre. No tengo problemas para poner los nombres de las columnas entre comillas por que gracias a la característica de la independencia lógica del Modelo Relacional nunca es necesario modificar una vista exterior de la base de datos cuando se hace una modificación de la estructura. Ya me imagino que esto te sonará a chino, pero es de 2º de carrera. Respecto a las otras provocaciones sería fácil responder, pero para que.

  25. Post en usenet… triste referencia para alguien de tu nivel… correspondencia privada… no se que haces en Geeks.ms, se trata de compartir conocimiento en público no en privado…

    y…

    Y que coño hago yo alimentando al troll

  26. «Respecto a lo de hacer una abstracción del modelo de la base de datos es que no hay que hacerla, es un disparate. El modelo de la base de datos ya es la abstracción de los datos con la que tienen que trabajar las aplicaciones. Para eso está. Esto es de lo más elemental.» Cuando acabe de escojonarme de risas… te cuento… a ver si haces alguna aplicación sería anda y te dejas de leer libros de bases de datos de los años 80.

    «No tengo problemas para poner los nombres de las columnas entre comillas por que gracias a la característica de la independencia lógica del Modelo Relacional nunca es necesario modificar una vista exterior de la base de datos cuando se hace una modificación de la estructura.», espero que nadie se tome esto en serio jejejej…

    Y… y que coño hago yo alimentando a un troll…

  27. Pues Geeks.ms no es mejor que Usenet en nada. Yo prefiero Usenet por que es mucho más participativo. Pero donde suele haber muchísimo más nivel es en algunas listas de correo serias. Y la correspondecia privada por supuesto que tampoco tiene nada de malo para comentar temas en mucho detalle.

    De todas formas yo me dedico al desarrollo y no a la investigación académica ni a la enseñanza. Pero si que estoy en contacto y pongo mi granito de arena colaborando con gente que publica al más alto nivel.

    Aquí vengo por curiosidad para ver un poco como está el panorama, y a veces es dificil resistirse a comentar algo sobre todas las barbaridades que leo.

    Tus comentarios me demuestran que tienes un nivel muy bajo, y con respecto a los libros de bases de datos de los años 80 te sorprenderías de lo poco que ha cambiado la teoría seria desde entonces. Leo mucho de lo que se publica sobre bases de datos a nivel de investigación.

  28. Disparate es lo que estás diciendo majo, eso si que es un disparate, que tu ombligo sea tu modelo relacional dice muy poco y a la vez mucho de tus pensamientos… que son totalmente alejados a los mios a la par de arcaicos y demostrados sobradamente como erroneos … Be a Domain my Friend!

    P.D: En serio, la última contestación..

  29. Yo creo Rodrigo que deberias dar a Alfredo un acceso a geeks y que nos demuestre como se hacen 100 formularios en 1 dia, que eso me tiene muy intrigado, quizas sea un iluminado, y nos puede iluminar a todos, nos veo dejando geeks y creando alfredonet.ms así veremos proyectos reales, proyectos de clientes grandes en (1000 tablas / 100 tablas dias) = 10 dias. Yo quiero aprender esa nueva metodologia ni scrum ni agile ni nada de nada la metodologia alfredoniana…

  30. News de Alfredo Novoa

    http://www.developersdex.com/sql/message.asp?p=3784&ID=%3C%23LlKCyFNJHA.5388%40TK2MSFTNGP04.phx.gbl%3E

    Sacado de las News

    Guillermo Peralta wrote:
    > Hola que tal;
    >
    > Existe algun Formato que le pueda pasar al ToString de un valor boolean
    > para que me visualice los datos de la siguiente manera?
    >
    > Por ejemplo
    >
    > void Imprime ()
    > {
    > bool TengoDinero = false;
    >
    > Console.Write (TengoDinero.ToString()); //que imprima No en lugar de
    > False
    >
    >
    > TengoDinero = true;
    >
    > Console.Write (TengoDinero.ToString()); //que imprima Sí
    >
    >
    > }
    >
    >
    > Gracias
    >

    Contesta Alfredo Novoa

    From: Alfredo Novoa
    Date Posted: 10/22/2008 10:32:00 AM

    El Wed, 22 Oct 2008 13:40:27 -0200, Guillermo Peralta escribió:

    > Existe algun Formato que le pueda pasar al ToString de un valor boolean para
    > que me visualice los datos de la siguiente manera?

    No se si existía, pero ahora si que existe 🙂

    public class BoolFormatProvider : IFormatProvider, ICustomFormatter
    {
    #region ICustomFormatter Members

    public string Format(string format, object arg, IFormatProvider
    formatProvider)
    {
    bool value = (bool)arg;
    format = (format == null ? null : format.Trim().ToLower());

    switch (format)
    {
    case «yn»:
    return value ? «Sí» : «No»;
    default :
    if (arg is IFormattable)
    return ((IFormattable)arg).ToString(format,
    formatProvider);
    else
    return arg.ToString();
    }
    }

    #endregion

    #region IFormatProvider Members

    public object GetFormat(Type formatType)
    {
    if (formatType == typeof(ICustomFormatter))
    return this;
    else
    return null;
    }

    #endregion
    }

    jajajajjajjajajajajajajajajja, jajajajajajajajajajjajaja, jajajajajajajajajajajjaja, jajajajajajajajajajajjajajajajajaj
    jajajajaja

    otro

    From: Luisa Goicochea
    Date Posted: 10/24/2008 5:41:00 AM

    Hola
    quiero que una instruccion no se ejecute en DesignMode para evitar producir
    unos molestos errores pero observo que si lo pongo en el constructor de una
    clase, DesignMode siempre me devuelve false es decir que no funciona.
    Conocen de alguna alternativa?

    contesta Alfredo

    From: Alfredo Novoa
    Date Posted: 10/24/2008 7:33:00 AM

    El Fri, 24 Oct 2008 07:40:28 -0400, Luisa Goicochea escribió:

    > quiero que una instruccion no se ejecute en DesignMode para evitar producir
    > unos molestos errores pero observo que si lo pongo en el constructor de una
    > clase, DesignMode siempre me devuelve false es decir que no funciona.
    > Conocen de alguna alternativa?

    Mueve el código del constructor al método del evento Load.

    Saludos

    jajajajajajajajajajajaj en lugar de if (!DesignMode)

    jajajajajajjajajajajajajjajajajajajajajajaj me troncho, jajajajaajajjaja

    Otra

    una de linq Add this thread to My Favorites
    From: [Juanjo]
    Date Posted: 10/21/2008 11:47:00 AM

    hola grupo:

    Estoy tratando de ejecutar una consulta sql desde linq, para ello genero
    mi sentencia, por ejemplo:

    string sql=»select * from personas where nombre ‘»+nombre+»‘»;

    donde nombre es una variable que leo de un formulario string ok?

    En principio, funciona bien, ahora si en el campo de texto del
    formulario metes un caracter que no sea
    alfanumerico, como una coma, comilla, punto, etc. jeje la consulta falla con
    una excepcion.

    Con los sqladapter podias crear un sqlparameter que te solucionaba el
    problema, pero con linq no doy.

    Alguien sabe de algo parecido o como solucionar el problema?

    gracias.

    Re: una de linq
    From: Alfredo Novoa
    Date Posted: 10/21/2008 2:13:00 PM

    El Tue, 21 Oct 2008 21:13:03 +0200, [Juanjo] escribió:

    > gracias, pero no me vale.
    >
    > imagina que el numero de «parametros» por los que quieres filtrar en el
    > where es variable,

    O que es cualquier update.

    Yo creo que para todo eso es mejor seguir usando los SqlCommands.

    Aunque con LinQ podrías crear un arbol de expresiones con lo que te de la
    gana.

    Saludos

    jajajajjajajajajaja, muy bueno, eres el mejor, el mejor jajajajajajajajjajaja

    Buenisimo

  31. Se me olvidaba

    Re: Sobreescribir bool
    From: Guillermo Peralta
    Date Posted: 10/22/2008 11:21:00 AM

    Gracias Alfredo, podrias pasarme un ejemplo de su uso?



    Guillermo Peralta

    «Alfredo Novoa» escribió en el mensaje de
    noticias:chsndjixqdb9$.3816ad6jdk17.dlg@40tude.net…
    > El Wed, 22 Oct 2008 13:40:27 -0200, Guillermo Peralta escribió:
    >
    >> Existe algun Formato que le pueda pasar al ToString de un valor boolean
    >> para
    >> que me visualice los datos de la siguiente manera?
    >
    > No se si existía, pero ahora si que existe 🙂
    >
    > public class BoolFormatProvider : IFormatProvider, ICustomFormatter
    > {
    > #region ICustomFormatter Members
    >
    > public string Format(string format, object arg, IFormatProvider
    > formatProvider)
    > {
    > bool value = (bool)arg;
    > format = (format == null ? null : format.Trim().ToLower());
    >
    > switch (format)
    > {
    > case «yn»:
    > return value ? «Sí» : «No»;
    > default :
    > if (arg is IFormattable)
    > return ((IFormattable)arg).ToString(format,
    > formatProvider);
    > else
    > return arg.ToString();
    > }
    > }
    >
    > #endregion
    >
    > #region IFormatProvider Members
    >
    > public object GetFormat(Type formatType)
    > {
    > if (formatType == typeof(ICustomFormatter))
    > return this;
    > else
    > return null;
    > }
    >
    > #endregion
    > }
    >
    >
    > Saludos

    Responde

    Re: Sobreescribir bool
    From: Alfredo Novoa
    Date Posted: 10/22/2008 1:31:00 PM

    El Wed, 22 Oct 2008 15:18:30 -0200, Guillermo Peralta escribió:

    > Gracias Alfredo, podrias pasarme un ejemplo de su uso?

    No funciona por que los chapuceros de Microsoft no han implementado bien el
    método:

    ToString(IFormatProvider provider)

    ¡Han puesto «True» y «False» a capón, y no hacen ni caso al FormatProvider
    del parámetro!

    Manda huevos. Eso me pasa por no probar las cosas, y eso que lo copié de
    por ahí y solo le cambié el Yes por el Sí O:-)

    Pues lo único entonces es hacer un método de extensión como dice Fernando,
    si usas C# 3.

    jajajajajajajajajajaja, hay que votarle para MVP, jajajajajaj

  32. Pues yo en las news de csharp e visto varias, una muy buena es:

    > Solo por aprender pues soy nuevo en esto
    >
    > Que tiene de malo LinQ to XML?

    Pues que no tiene sentido hacer consultas de archivos XML.

    Aunque te puede servir para otras cosas si no tienes más remedio que usar
    XML, lo que no es mi caso.

    Saludos

    El Tue, 21 Oct 2008 10:20:32 -0400, Carlos escribió:

    > quiero hacer una clase de tabcontrol y lograr que cuando se seleccione
    > cualquiera de sus tabpages el foco se posicione en el primer control de ese
    > tabpage.
    > Estoy usando el metodo Selected pero lo que no encuentro es como
    > posicionarme en el control primero de ese tabpage.

    Puedes recorrer todos los controles y elegir el que tenga el menor
    TabIndex.

    Saludos

    > Quiero preparar un demo de una aplicacion Windows. Alguien que tenga
    > experiencia en ello, me pueda decir como se hace para instalar datos con la
    > aplicacion demo quizas sql server express ya que si alguien descarga el demo
    > y no tiene sql server instalado no podria hacer funcionar el demo.

    No entiendo la pregunta.

  33. Pues mira este…

    Hola Carlos,

    El Mon, 15 Sep 2008 07:04:51 -0700 (PDT), Carlos M. Calvelo escribió:

    > Los diseñadores de SQL Server (o cualquier otro SGBD SQL) solo
    > sabían lo que le dieron hecho los diseñadores de SQL (y las teorías
    > del gran Codd).

    SQL se diseñó sobre la marcha para el System R y sus diseñadores no tenían
    experiencia ni muchos conocimientos sobre diseño de lenguajes por que no
    era su especialidad.

    > Estos a su vez *quizás* pensaron, ante el problema
    > de que puede faltar información, que un diseño lógico correcto daría
    > lugar a muchas tablas.

    Yo creo que simplemente les pareció que los nulos eran una buena idea, por
    que nadie los había probado antes y no se había visto lo malos que eran.

    El System R era solo un experimento para saber si el Modelo Relacional
    servía para algo. Y el resultado del experimento fue que el Modelo
    Relacional si servía, pero el SQL les quedó como un churro. Habían
    intentado hacer un lenguaje para tontos, es decir lo menos matemático
    posible, pero no les salía y entonces dieron marcha atrás, pero a medias, y
    les quedó de pena.

    El siguiente paso sería volver a empezar desde 0 aprendiendo de los
    errores, pero Larry Ellison se les adelantó sacando al mercado un producto
    basado en SQL, y todavía seguimos sufriendo las consecuencias.

    Saludos

  34. jajajajajajajajajajajaj en lugar de if (!DesignMode)

    jajajajajajjajajajajajajjajajajajajajajajaj me troncho, jajajajaajajjaja

    Jose Luís eres un bocazas. Si supieses leer habrías visto que ya había intentado eso y que DesignMode no funcioa en un constructor de un formulario.

    Respecto a lo de formatear el boolean en el primer intento me equivoqué y en el segundo funcionó y el que hizo la pregunta me dió las gracias. Lo del método de extensión no le valía por que dijo que utilizaba C# 2.0

    El resto también está bien pero tú no te enteras.

  35. Tu equivocarte, imposible, tu no te puedes equivocar si eres un experto, y la chapuza del format provider que no es necesaria, vaya un cristo que montastes, jajajja comparas un bool con null ,jajajajajaja, y lo del linq, si no tienes ni puta idea callate la voca y aprende de los demas, y lo del xml, anda ve y leete algun libro, chapucero, y tu te crees un experto, jajajajajajajajja, me mondo y me troncho…..

    Que has estudiado 2º de carrera, si si, de carrera de caballos, jajaajajajajaja

    Esto te pasa, por tonto, que eres un payaso, jajajajajajajajaja, tanto hablar y mira las chapuzas que escribes, tu, uno de los mayores expertos mundiales, en tocar los cojones a los demas, jajajajajajaja

    me troncho…….. jajajajajajajaja

    Saludos, me has alegrado la tarde, pobre de la gente que te pida ayuda….

  36. Boca con es con B de burro, pedazo de anormal. Tú si que tendrías que leer algún libro.

    Ese código estaba copiado de un foro en inglés, y por supuesto no compara un booleano con un nulo. Si no sabes leer y escribir en español como vas a saber leer código.

    Que gentuza.

  37. En mi opinión hay situaciones validas para todo y nunca se puede generalizar, sin embargo si se puede hablar de tendencias.

    En mi experiencia personal definitivamente el uso de frameworks tiene un costo elevadao a varios niveles, costos que solo recomendaria asumirlo cuando realmente se va a obtener como contraprestación un beneficio elevado, tal es el caso de las casas de software donde la utilizacion de esos frameworks les pueden ahorrar miles de horas de codificación pesonalizada en sus múltiples proyectos.

    Pero en proyectos chicos y en empresas de desarrollo chicas los framework traeran consigo un enorme desgaste en mantenimiento del lastre de cosas que no se usaran, en capacitacion de las personas que ingresen al equipo de trabajo y por supuesto en todos los errores que cometeran en su fase de aprendizaje que contrario a lo dicho no seran dos mañanas porque hacer dos lineas de código no te hace de criterio suficiente para lidiar con los problemas futuros ni con habilidad para depurar rápidamente un código defectuoso.

Responder a jkpelaez Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *